はじめに
この実験 (lab) では、Burp Intruder の強力な機能の一つである「Grep - Extract」の使い方を学びます。この機能を使用すると、Intruder 攻撃中に受信したレスポンスから特定のテキストを抽出するためのルールを定義できます。CSRF トークン、セッション ID、またはその他の動的に生成されたデータなど、リクエストごとに変化する可能性のある貴重な情報を収集するのに非常に役立ちます。
この実験 (lab) が終わる頃には、Burp Intruder を設定して、レスポンスからカスタムデータを自動的に検索して表示できるようになり、セキュリティテストのワークフローがより効率的になります。ここでは、Web ページのレスポンスから隠されたトークンを抽出する必要があるシナリオをシミュレートします。
Intruder > Options で「Grep - Extract」セクションまでスクロールする
このステップでは、Burp Suite を起動し、サンプルリクエストを Intruder ツールに送信することから始めます。これにより、抽出ルールの設定準備が整います。
まず、Burp Suite を起動する必要があります。通常、デスクトップ環境のアプリケーションメニューで見つけることができます。
- デスクトップからターミナルを開きます。
- コマンド
burpsuiteを実行して Burp Suite を起動します。一時的なプロジェクトを選択し、「Next」をクリックしてから「Start Burp」をクリックします。 - Proxy > Intercept タブに移動し、「Intercept is on」になっていることを確認します。
- Proxy > Intercept に移動し、「Open Browser」をクリックして、組み込みの Chromium ブラウザを開きます。
- ブラウザで、簡単なウェブサイト(例:
http://portswigger.net)にアクセスします。 - リクエストが Burp Suite でインターセプトされます。リクエストテキストエリアのどこかを右クリックし、Send to Intruder を選択します。
- 次に、Intruder タブに移動します。先ほど送信したリクエストが表示されます。
- Intruder タブ内で、Options サブタブをクリックします。
- ページをスクロールダウンして、「Grep - Extract」というタイトルのセクションを見つけます。ここでデータ抽出ルールを設定します。
これで、「Grep - Extract」セクションを正常に見つけ、ルールの追加準備ができました。
新しい抽出ルールの追加
このステップでは、「Grep - Extract」セクションに新しい空のルールを追加します。このルールは、後でサーバーのレスポンスから抽出したい特定のデータを定義するように設定します。
「Grep - Extract」機能は、ルールのリストを作成することで機能します。各ルールは、レスポンス内で探すべきパターンを定義します。レスポンスがルールに一致すると、レスポンスの指定された部分が抽出され、Intruder の結果テーブルの新しい列に表示されます。
新しいルールを追加するには、次の手順に従います。
- 前のステップで見つけた「Grep - Extract」セクションで、「Add」ボタンをクリックします。
「Add」をクリックすると、ルールテーブルに新しいエントリが表示されます。この新しいエントリにはデフォルト設定があり、次のステップで設定します。抽出を定義するためのダイアログもポップアップ表示され、入力待ちの状態になります。
データ抽出のための開始および終了デリミタの定義(例:隠しトークン)
このステップでは、先ほど追加したルールを設定します。Burp に、ターゲットデータの直前と直後にあるテキストを定義することで、何を抽出するかを指示します。これは、開始デリミタと終了デリミタを使用して行われます。
この実験では、以下の HTML スニペットを含むレスポンスから CSRF トークンを抽出することを想定します。
<input type="hidden" name="csrf_token" value="a1b2c3d4e5f6g7h8i9j0" />
目標は、値 a1b2c3d4e5f6g7h8i9j0 を抽出することです。
- 前のステップで「Add」をクリックした後、「Define extract grep」ダイアログが表示されます。開いていない場合は、追加した新しいルールをクリックして開きます。
- ツールは、Intruder に送信した元のリクエストからレスポンスを自動的に取得します。これは下部のレスポンスビューで確認できます。
- 抽出を定義するために、開始デリミタと終了デリミタを指定します。「Define start and end」オプションを使用するのが最も確実な方法です。
- 抽出したいレスポンス内のユニークなテキストを見つけます。例として、レスポンスに上記の HTML スニペットが含まれていると仮定します。
- レスポンスビューで、抽出したい値(例:
a1b2c3d4e5f6g7h8i9j0)をハイライトします。 - 「Start」および「End」フィールドが自動的に入力されます。
- Start after expression フィールドには、ターゲットデータの直前にあるテキストが含まれるべきです。この例では、
name="csrf_token" value="となります。 - End at delimiter フィールドには、ターゲットデータの直後にあるテキストが含まれるべきです。この例では、
"となります。
- Start after expression フィールドには、ターゲットデータの直前にあるテキストが含まれるべきです。この例では、
- 「OK」をクリックしてルールを保存します。
これで、すべてのレスポンスで name="csrf_token" value=" と " の間のテキストを検索し、それを抽出するルールが設定されました。
Intruder 攻撃の実行
このステップでは、基本的なペイロードを設定し、Intruder 攻撃を開始します。攻撃が実行されると、Burp は受信したすべてのレスポンスに Grep-Extract ルールを適用します。
まず、ペイロードの位置を設定する必要があります。
- Intruder > Positions サブタブに移動します。
- ここにリクエストテンプレートが表示されます。デフォルトでは、Burp がパラメータ値の周りにペイロードマーカー(
§...§)を自動的に追加している場合があります。この演習では、レスポンスに焦点を当てているため、ペイロードがどこにあるかは重要ではありません。デフォルトのマーカーを残すか、それらをクリアして任意の場所に 1 つ追加できます。たとえば、Cookie 値やパラメータに追加できます。 - 攻撃タイプが Sniper に設定されていることを確認します。
次に、シンプルなペイロードを設定します。
- Intruder > Payloads サブタブに移動します。
- Payload Sets で、Payload set を
1のままにします。 - Payload Options で、ドロップダウンリストから Numbers を選択します。
1から5まで、ステップ1で実行するように設定します。これにより、5 つのリクエストが送信されます。
最後に、攻撃を開始します。
- Intruder タブの右上隅にある Start attack ボタンをクリックします。
- 新しい「Intruder attack」ウィンドウが開き、攻撃の結果がリアルタイムで表示されます。
攻撃が現在実行されており、Burp は作成したルールに基づいてデータを抽出しています。
結果テーブルの新しい列で抽出されたデータの表示
この最終ステップでは、Grep-Extract 設定の結果を確認します。Burp に検索するように指示したデータは、攻撃結果ウィンドウにきれいに整理されています。
- 前のステップで開いた「Intruder attack」ウィンドウを確認します。
- 「Request」、「Position」、「Payload」、「Status」、「Length」などの列があるテーブルが表示されます。
- テーブルを右にスクロールします。新しい列が表示されているはずです。デフォルトでは、Extract 1 という名前になります。さらにルールを追加した場合、Extract 2 のようになります。
- この新しい列には、定義したルールを使用して各レスポンスから抽出されたデータが含まれています。
ターゲットとしたウェブサイトに、例として使用した csrf_token 文字列が実際には含まれていない場合、この列は空になる可能性があります。しかし、列が存在することは、ルールがアクティブであったことを確認します。ログインページ上の実際の動的なトークンをターゲットにしていた場合、この列には各レスポンスからのユニークなトークンが入力され、分析したり、後続の攻撃で使用したりする準備ができています。
テーブルヘッダーを右クリックして列を追加または削除したり、列ヘッダーをクリックしてそのデータに基づいて結果を並べ替えたりできます。
まとめ
この実験では、Burp Intruder の「Grep - Extract」機能の使用方法を学びました。リクエストを Intruder に送信し、特定の区切り文字で抽出ルールを追加・設定し、攻撃を実行し、最終的に結果ウィンドウでスクレイピングされたデータを表示するまでの全プロセスを体験しました。
このスキルは、Web アプリケーションから動的なデータを自動的に収集するプロセスを自動化するために不可欠であり、ペネトレーションテストやセキュリティ分析において一般的なタスクです。この知識を応用して、CSRF トークン、セッション識別子、API キー、またはその他の特定の情報を、セキュリティ評価中に HTTP レスポンスから抽出できるようになりました。
