はじめに
この実験では、Web アプリケーションのセキュリティテストにおける基本的なテクニックである、Burp Suite を使用したクロスサイトリクエストフォージェリ (CSRF) の概念実証 (PoC) の生成方法を学びます。CSRF は、被害者をだまして悪意のあるリクエストを送信させる攻撃の一種です。Burp Suite は、脆弱性の影響を示すために使用できる PoC を自動的に作成するための強力な機能を提供します。
Burp Suite のプロキシを使用して、アプリケーションの状態を変更するリクエスト(メールアドレスの更新など)を傍受し、その後「Engagement tools」を使用して、このリクエストを再現する HTML フォームを生成します。この実践的な演習により、CSRF 攻撃がどのように作成され、テストされるかについての理解を深めることができます。
プロキシ履歴で状態を変更するリクエスト(例:メールアドレスの更新)を見つける
このステップでは、Burp Suite を起動し、組み込みブラウザを使用してターゲットウェブサイトでアクションを実行し、プロキシ履歴で対応するリクエストを見つけます。 「状態を変更するリクエスト」とは、パスワードの変更、コメントの送信、プロフィール情報の更新など、サーバー上のデータを変更する任意のリクエストです。
まず、Burp Suite を起動しましょう。
- 画面左上の Applications メニューをクリックします。
- Web に移動し、Burp Suite Community Edition を選択します。
- ダイアログボックスが表示されます。デフォルト設定(
Temporary project)のまま、Next をクリックします。 - 次の画面で
Use Burp defaultsを選択し、Start Burp をクリックします。
Burp Suite が起動したら、組み込みブラウザを開きます。
Proxyタブに移動し、次にInterceptサブタブに移動します。Open Browserボタンをクリックします。新しい Chromium ブラウザウィンドウが開き、Burp Suite を介したトラフィックのプロキシが事前に設定されています。
次に、キャプチャするアクションを実行しましょう。この実験では、PortSwigger のテストウェブサイトを使用します。
- Burp ブラウザで、次の URL にアクセスします。
https://portswigger.net/web-security/csrf/lab-no-defenses Access the labをクリックします。ブログウェブサイトにリダイレクトされます。- ラボの説明ページにある認証情報
wiener:peterを使用して、アプリケーションにログインします。 - ログイン後、「Update email」フォームが表示されます。新しいメールアドレス(例:
test@example.com)を入力し、Update emailをクリックします。
最後に、Burp Suite でリクエストを見つけましょう。
- Burp Suite ウィンドウに戻ります。
Proxyタブに移動し、次にHTTP historyサブタブに移動します。- リクエストのリストを確認します。
POST /my-account/change-emailリクエストが見つかるはずです。これが、ターゲットにしたい状態を変更するリクエストです。それをクリックして、下のパネルで詳細を表示します。
POST /my-account/change-email HTTP/2
Host: your-lab-id.web-security-academy.net
...
email=test%40example.com
これで、状態を変更するリクエストを正常に傍受し、特定しました。
リクエストを右クリックする
このステップでは、Burp Suite のコンテキストメニューを使用して高度な機能にアクセスします。コンテキストメニューは Burp Suite のワークフローの中核であり、選択したリクエストに適用できるさまざまなツールへの迅速なアクセスを提供します。
Proxy > HTTP history タブで POST /my-account/change-email リクエストがまだハイライトされている状態で、次の操作を実行します。
- マウスカーソルを選択したリクエスト行に移動させます。
- リクエストを右クリックします。
これにより、多くのオプションが表示される大きなコンテキストメニューが開きます。このメニューはコンテキスト依存であり、利用可能なオプションはクリックした場所によって変更される場合があります。リクエストを右クリックすることで、その特定のリクエストに対して実行できるアクションのリストが表示されます。例えば、Repeater、Intruder、または今回の場合は CSRF PoC ジェネレーターなどの他の Burp ツールに送信するなどです。
利用可能なオプションを確認し、可能性を把握する時間を取ってください。
Engagement tools > Generate CSRF PoC へ移動する
このステップでは、コンテキストメニューを操作して CSRF PoC ジェネレーターを見つけ、起動します。このツールは「Engagement tools」の下に分類されており、脆弱性の実証や報告を支援するために設計された機能です。
前のステップでリクエストを右クリックした後、コンテキストメニューが表示されています。PoC を生成するには、次の手順に従ってください。
- コンテキストメニューで、Engagement tools オプションを探してマウスカーソルを合わせます。これによりサブメニューが表示されます。
- 表示されたサブメニューから、Generate CSRF PoC をクリックします。
「Generate CSRF PoC」というタイトルの新しいウィンドウが開きます。Burp Suite は、選択した POST リクエストを自動的に分析し、送信時に同じリクエストを再実行するシンプルな HTML ページを生成しました。これが CSRF 攻撃の核心です。ユーザーのブラウザを、既に認証されているウェブサイトへのリクエストを送信するように誘導します。
生成された HTML フォームを確認する
このステップでは、Burp Suite によって生成された HTML コードを確認します。このコードを理解することは、CSRF 攻撃がどのように機能するかを理解する上で非常に重要です。
「Generate CSRF PoC」ウィンドウには、HTML コードのブロックが表示されます。これは以下のようなものになるはずです。
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<script>
history.pushState("", "", "/");
</script>
<form
action="https://your-lab-id.web-security-academy.net/my-account/change-email"
method="POST"
>
<input type="hidden" name="email" value="test@example.com" />
<input type="submit" value="Submit request" />
</form>
</body>
</html>
この HTML の主要なコンポーネントを分解してみましょう。
<form action="..." method="POST">: これは HTML フォームを定義します。action属性は、フォームデータが送信される URL を指定します。この場合、メールアドレスを変更するために使用されたのと同じエンドポイントです。method="POST"は、元のリクエストのメソッドと一致します。<input type="hidden" name="email" value="...">: これは隠しフォームフィールドです。サーバーがアクションを実行するために必要なパラメータが含まれています。ここでは、値がtest@example.comのemailパラメータです。これは隠されているため、このページを訪れた被害者には表示されません。<input type="submit" value="Submit request" />: これは、攻撃をトリガーするために被害者がクリックする必要があるボタンを作成します。より高度な攻撃では、この送信は JavaScript を使用して自動的にトリガーされる可能性があります。
このシンプルな HTML ページは、CSRF 脆弱性に対する機能的な Proof of Concept (概念実証) です。
「Test in browser」機能を使用して PoC を検証する
このステップでは、生成された PoC を使用して CSRF 脆弱性を確認します。Burp Suite は、組み込みのテスト機能でこれを容易にします。
「Generate CSRF PoC」ウィンドウには、「Test in browser」というラベルのボタンがあります。この機能を使用すると、ターゲットアプリケーションに認証されているのと同じブラウザセッションで PoC を直接テストできます。
- Test in browser ボタンをクリックします。
- Burp Suite は一意の URL を提供します。Copy ボタンをクリックして、この URL をクリップボードにコピーします。
- Burp の組み込みブラウザ(Chromium ウィンドウ)に戻ります。
- コピーした URL をアドレスバーに貼り付けて Enter キーを押します。
新しいページが読み込まれ、「Submit request」ボタンのみが表示されます。これが動作中の PoC です。
- Submit request ボタンをクリックします。
ブラウザは POST リクエストを Web アプリケーションに送信します。既にログインしているため(ブラウザにセッションクッキーがあるため)、アプリケーションは正当なリクエストとして処理します。
攻撃が成功したことを確認するには:
- ブログアプリケーションのタブに戻ります。
- ページを更新するか、「My account」リンクをクリックします。
- メールアドレスが
test@example.com(または PoC にあった値)に更新されているはずです。ラボには「Congratulations, you solved the lab!」というメッセージも表示されるはずです。
これにより、CSRF PoC が機能し、アプリケーションが脆弱であることが確認されます。
まとめ
この実験では、Burp Suite を使用してクロスサイトリクエストフォージェリ (CSRF) の概念実証 (PoC) を生成およびテストする方法を習得しました。
このタスクの完全なワークフローを実践しました。
- Burp のプロキシを使用して状態変更リクエストをインターセプトする。
- コンテキストメニューを使用して
Engagement toolsにアクセスする。 - ワンクリックで CSRF PoC を生成する。
- 結果の HTML を分析して攻撃メカニズムを理解する。
- ブラウザで PoC をテストして脆弱性を確認する。
このスキルは、CSRF の欠陥が開発者や関係者に与える現実世界の影響を明確かつ効果的に示すことができるため、あらゆる Web アプリケーションセキュリティ専門家にとって不可欠です。
