Shikata Ga Nai

Private? There is no such things.

LAB: CSRFトークンが存在する場合のみ検証される脆弱性の攻略方法

Hello there, ('ω')ノ

🔍 概要

このラボでは、CSRF(クロスサイトリクエストフォージェリ)トークンの検証が、トークンがリクエストに含まれている場合にのみ行われるという脆弱性を突きます。つまり、トークンがリクエストに含まれていない場合、サーバーは検証をスキップし、リクエストを受け入れてしまいます。


🎯 攻略手順

1. Burp Suiteでリクエストを確認

  • Burp Suiteを起動し、ブラウザでアプリケーションにログインします。
  • 「メールアドレスの変更」フォームを送信し、そのリクエストをBurp SuiteのProxyでキャプチャします。
  • キャプチャしたリクエストをRepeaterに送信し、csrfパラメータの値を変更して送信してみます。サーバーがリクエストを拒否することを確認します。
  • 次に、csrfパラメータ自体をリクエストから完全に削除し、再度送信します。サーバーがリクエストを受け入れることを確認します。

2. CSRF攻撃用のHTMLを作成

以下のHTMLコードを使用して、CSRF攻撃を行うページを作成します。このコードでは、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" />
</form>
<script>
  document.forms[0].submit();
</script>

YOUR-LAB-ID は、ラボのURLに応じて適切な値に置き換えてください。

3. 攻撃ページをエクスプロイトサーバーにアップロード

  • ラボが提供するエクスプロイトサーバーにアクセスします。
  • 上記のHTMLコードを「Body」セクションに貼り付け、「Store」ボタンをクリックして保存します。

4. 攻撃の検証と実行

  • 「View exploit」ボタンをクリックして、自分自身で攻撃を試します。
  • 攻撃が成功し、自分のメールアドレスが変更されたことを確認します。
  • 攻撃用HTMLのメールアドレスを、他のユーザーと重複しないように変更します。
  • 「Deliver to victim」ボタンをクリックして、攻撃を被害者に実行させます。

💡 攻略のポイント

  • トークンの省略csrfパラメータを完全にリクエストから削除することで、サーバーの検証を回避できます。
  • 自動送信フォーム:HTMLフォームにauto-submitスクリプトを追加することで、ユーザーの操作なしにリクエストを送信できます。
  • メールアドレスの一意性:攻撃用のメールアドレスは、他のユーザーと重複しないように注意してください。

✅ まとめ

このラボでは、CSRFトークンの検証が不完全な実装を突くことで、CSRF攻撃を成功させる方法を学びました。トークンが存在しない場合に検証をスキップする実装は、攻撃者にとって大きなチャンスとなります。今後は、トークンの存在と値の両方を厳密に検証することの重要性を理解し、セキュアな実装を心がけましょう。

Best regards, (^^ゞ