はじめに
Burp Suite は、Web アプリケーションのセキュリティテストを実行するための強力なプラットフォームです。そのコアコンポーネントの 1 つである Burp Proxy は、ブラウザとターゲットの Web サーバー間のマン・イン・ザ・ミドルとして機能します。これにより、双方向を通過する生のトラフィックをインターセプト、検査、および変更することができます。
リクエストのインターセプトは一般的なタスクですが、レスポンスのインターセプトと変更もセキュリティテストにおいて同様に重要です。これにより、クライアントサイドアプリケーションがサーバーからの予期しない、または操作されたデータをどのように処理するかをテストできます。
この実験では、サーバーレスポンスをインターセプトし、ブラウザに表示される前に Web ページの HTML コンテンツを変更するように Burp Proxy を設定する方法を学びます。このデモンストレーションでは、シンプルなローカル Web サーバーを使用します。
Proxy > Options > Intercept Server Responses へ移動する
このステップでは、Web サーバーからのレスポンスのインターセプトを有効にするように Burp Suite を設定します。デフォルトでは、Burp Proxy はブラウザからの送信リクエストのみをインターセプトします。
まず、Burp Suite を起動する必要があります。アプリケーションメニューから見つけるか、検索して起動できます。
Burp Suite が開いたら:
- ウィンドウ上部にある Proxy タブをクリックします。
Proxyタブ内で、Options サブタブをクリックします。- オプションをスクロールダウンし、Intercept Server Responses というタイトルのセクションを見つけます。
このセクションには、Burp Proxy が受信 HTTP レスポンスをインターセプトするかどうか、およびどのようにインターセプトするかを制御する設定が含まれています。これで、次のステップに必要な設定領域を見つけました。
「Intercept responses based on the following rules」チェックボックスを有効にする
このステップでは、レスポンスインターセプト機能を有効にします。
前のステップで見つけた Intercept Server Responses セクションに、チェックボックスがあります。
- Intercept responses based on the following rules というラベルの横にあるチェックボックスをクリックします。
このボックスをチェックすると、Burp Proxy はその下で定義されたルールに一致するサーバーレスポンスをインターセプトするように設定されます。デフォルトのルールである Is a response to a request that was intercepted は自動的に追加され、今回の目的に最適です。このルールは、プロキシによってインターセプトされた対応するリクエストに対するレスポンスのみをインターセプトするように Burp に指示します。これにより、背景画像やスクリプトなどのすべてのレスポンスで Burp が一時停止するのを防ぎ、アクティブに検査しているトラフィックのみに焦点を当てることができます。
リクエストをインターセプトして転送する
このステップでは、Burp の組み込みブラウザを使用して、ローカル Web サーバーにリクエストを送信し、それをインターセプトします。
- Proxy > Intercept サブタブに移動します。
- ボタンが Intercept is on と表示されていることを確認します。もし "Intercept is off" と表示されている場合は、クリックしてインターセプトを有効にしてください。
- Open Browser ボタンをクリックします。Burp Proxy を使用するように事前に設定された新しい Chromium ブラウザウィンドウが開きます。
- ブラウザのアドレスバーに
http://127.0.0.1:8000と入力し、Enter キーを押します。
ブラウザは無限にロードしているように見えるでしょう。これは、Burp が HTTP リクエストをインターセプトしたためです。Burp Suite ウィンドウに戻ってください。Proxy > Intercept タブに、生の HTTP リクエストが表示されます。
GET / HTTP/1.1
Host: 127.0.0.1:8000
... (other headers)
これは、ブラウザからローカルサーバーへのリクエストです。サーバーへの進行を許可するには、Forward ボタンをクリックします。リクエストを転送した後、Burp はサーバーから返されるレスポンスをインターセプトするのを待ちます。
インターセプトされたレスポンスの HTML ボディを変更する
このステップでは、ブラウザに送信される前に HTTP レスポンスの内容を編集します。
前のステップでレスポンスインターセプトを有効にし、リクエストを転送したため、Proxy > Intercept タブにはサーバーのレスポンスが保持されています。以下のような内容が表示されるはずです。
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.10.6
Date: ...
Content-type: text/html
Content-Length: ...
<h1>Welcome to the Original Page!</h1><p>This is the content you will modify.</p>
メインのテキストエリアは編集可能です。ここで、レスポンスをリアルタイムで変更できます。
- レスポンスボディのテキストエリアで、
<h1>Welcome to the Original Page!</h1>という行を見つけます。 - テキストを
<h1>Welcome to the Modified Page!</h1>に変更します。 - 必要に応じて、段落のテキストも変更できます。例えば、
<p>This content has been changed by Burp Proxy.</p>のように変更します。
これで、サーバーのレスポンスが変更されました。レスポンスはまだ Burp Proxy によって保持されており、ブラウザには到達していません。
変更されたレスポンスを転送してブラウザでの変更を確認する
この最終ステップでは、変更されたレスポンスをブラウザに送信し、その結果を確認します。
変更されたレスポンスは、まだ Proxy > Intercept タブで待機しています。
- 最後に Forward ボタンをクリックします。これによりレスポンスが解放され、変更されたバージョンがブラウザに送信されます。
- 以前ロード中だった Burp Browser ウィンドウに戻ります。
ページはロードを完了しますが、元のコンテンツの代わりに、入力したテキストが表示されます。以下のように表示されるはずです。
Welcome to the Modified Page! This content has been changed by Burp Proxy.
おめでとうございます!HTTP レスポンスを正常にインターセプトし、転送中にその内容を変更し、ブラウザでの変更を確認することができました。これは、Web アプリケーションのセキュリティテストにおける基本的な能力を示しています。「Intercept is on」ボタンをクリックして、インターセプトをオフにすることができます。
まとめ
この実験では、Burp Suite の主要な機能について実践的な経験を積みました。以下のことを学びました。
- サーバーレスポンスをインターセプトするように Burp Proxy を設定する方法(この機能はデフォルトで無効になっています)。
- リクエストをインターセプトし、転送し、対応するレスポンスをキャッチするというワークフローをたどる方法。
- HTTP レスポンスボディをブラウザに到達する前にリアルタイムで変更する方法。
- レスポンスの変更がレンダリングされた Web ページに与える直接的な影響を観察する方法。
このテクニックは、Web アプリケーションのフロントエンドコードがサーバーからの予期しないデータや悪意のあるデータをどのように処理するかをテストする上で、Web セキュリティの基本となります。これにより、クロスサイトスクリプティング(XSS)やアクセス制御の不備などの脆弱性を発見できる可能性があります。
