Hello there, ('ω')ノ
🔍 概要
このラボでは、CSRF(クロスサイトリクエストフォージェリ)トークンがセッションとは異なるクッキーに紐づいているため、CSRF攻撃が可能となる脆弱性を利用します。
🎯 目的
攻撃者が自分のCSRFトークンとそれに対応するクッキーを被害者のブラウザに設定し、CSRF攻撃を成功させることです。
🛠️ 手順
1. 攻撃者のCSRFトークンとクッキーの取得
- Burp Suiteのブラウザで
wiener:peter
アカウントにログインします。 - 「メールアドレスの更新」フォームを送信し、リクエストをBurpのProxyで確認します。
- リクエストヘッダーから
csrf
パラメータとcsrfKey
クッキーの値を取得します。
2. クッキーのインジェクションポイントの特定
- ブラウザで任意の検索を行い、そのリクエストをBurpのProxyで確認します。
- レスポンスヘッダーに
Set-Cookie
が含まれているか確認します。 - 検索クエリに特殊文字(例:
%0d%0aSet-Cookie: csrfKey=...
)を含めることで、任意のクッキーを設定できるかテストします。
3. 攻撃用HTMLの作成
以下のHTMLを作成し、攻撃者のCSRFトークンとクッキーを使用して、被害者のメールアドレスを変更します。
<form method="POST" action="https://YOUR-LAB-ID.web-security-academy.net/my-account/change-email"> <input type="hidden" name="email" value="attacker@evil-user.net" /> <input type="hidden" name="csrf" value="攻撃者のCSRFトークン" /> </form> <img src="https://YOUR-LAB-ID.web-security-academy.net/?search=test%0d%0aSet-Cookie:%20csrfKey=攻撃者のCSRFKey%3b%20SameSite=None" onerror="document.forms[0].submit()">
YOUR-LAB-ID
はラボのURLに置き換えてください。attacker@evil-user.net
は攻撃者のメールアドレスに置き換えてください。攻撃者のCSRFトークン
と攻撃者のCSRFKey
は手順1で取得した値に置き換えてください。
4. 攻撃の実行
- 作成したHTMLをBurp SuiteのExploit Serverにアップロードします。
- 「Store」をクリックして保存し、「Deliver to victim」をクリックして攻撃を実行します。
✅ 攻撃成功の確認
被害者が攻撃用HTMLを読み込むと、攻撃者のCSRFトークンとクッキーが設定され、メールアドレスが攻撃者のものに変更されます。
🧠 ポイント
- CSRFトークンがセッションに紐づいていない場合、攻撃者のトークンを被害者に使用させることが可能です。
- クッキーのインジェクションが可能なエンドポイントを特定することが重要です。
SameSite=None
属性を使用することで、クロスサイトのクッキー送信が可能になります。
🛡️ 防御策
- CSRFトークンはユーザーのセッションに紐づけ、他のユーザーのトークンを使用できないようにする。
- クッキーのインジェクションを防ぐため、ユーザー入力を適切にサニタイズする。
SameSite
属性を適切に設定し、クロスサイトのクッキー送信を制限する。
Best regards, (^^ゞ