Hello there, ('ω')ノ
🎯 ラボの概要
このラボでは、メールアドレス変更機能がCSRFトークンを使用して保護されていますが、POSTリクエストに対してのみトークン検証が行われ、GETリクエストでは検証がスキップされるという脆弱性があります。
🧪 攻略手順
1️⃣ 自分のアカウントにログイン
- Burp Suiteのブラウザを使用して、
wiener:peter
の資格情報でログインします。
2️⃣ メールアドレス変更リクエストを確認
- 「Update email」フォームを送信し、BurpのProxyでリクエストを確認します。
- このリクエストは
POST
メソッドで、csrf
パラメータが含まれています。
3️⃣ CSRFトークンの検証を確認
- リクエストをBurp Repeaterに送信し、
csrf
パラメータの値を変更して再送信します。 - サーバーがリクエストを拒否することを確認します。
4️⃣ リクエストメソッドをGET
に変更
- 同じリクエストを
GET
メソッドに変更し、再送信します。 - サーバーが
csrf
トークンを検証せずにリクエストを受け入れることを確認します。
5️⃣ CSRF攻撃用のHTMLを作成
- 以下のHTMLフォームを作成します(
YOUR-LAB-ID
は実際のラボのIDに置き換えてください):
<form action="https://YOUR-LAB-ID.web-security-academy.net/my-account/change-email"> <input type="hidden" name="email" value="attacker%40example.com"> </form> <script> document.forms[0].submit(); </script>
- このフォームは、ユーザーがアクセスすると自動的に送信され、メールアドレスを変更します。
6️⃣ エクスプロイトサーバーにHTMLをアップロード
- ラボが提供するエクスプロイトサーバーにアクセスし、作成したHTMLを「Body」セクションに貼り付けて「Store」をクリックします。
7️⃣ 攻撃の検証と実行
- 「View exploit」をクリックして、自分自身で攻撃が成功することを確認します。
- メールアドレスが変更されたことを確認したら、HTML内のメールアドレスを他のユーザーと重複しないものに変更します。
- 「Deliver to victim」をクリックして、ラボを解決します。
🧠 攻略のポイント
- CSRFトークンの検証がリクエストメソッドに依存している場合、攻撃者は検証が行われないメソッド(この場合は
GET
)を使用して攻撃を実行できます。 - 状態変更を伴う操作には
POST
メソッドを使用し、すべてのリクエストメソッドに対してCSRFトークンの検証を行うことが重要です。
✅ まとめ
このラボでは、CSRFトークンの検証がPOST
リクエストに対してのみ行われているという実装ミスを突いて、GET
リクエストを使用したCSRF攻撃を実行しました。
このような脆弱性を防ぐためには、すべての状態変更操作に対して適切なHTTPメソッドを使用し、すべてのリクエストメソッドに対してCSRFトークンの検証を行うことが重要です。
Best regards, (^^ゞ