はじめに
この実験では、Web アプリケーションセキュリティテストで最も人気のあるツールの 1 つである Burp Suite を使用して、Web トラフィックを傍受および変更する基本を学びます。HTTP リクエストを傍受し、サーバーに到達する前にその内容を変更し、その後レスポンスを観察する能力は、パラメータタンパリングや Insecure Direct Object References(IDOR)など、幅広い脆弱性を発見するための基本的なスキルです。
Burp Proxy を使用してブラウザからのリクエストをキャプチャし、URL パラメータをその場で変更して、ローカルで実行されているシンプルな Web アプリケーションに転送します。この実践的な演習では、プロキシを使用してクライアントとサーバー間の通信を操作する方法を示します。
Proxy タブでインターセプトモードを有効にする
このステップでは、Burp Suite を起動し、トラフィック傍受のコア機能を有効にします。Burp Proxy は、ブラウザとターゲット Web サーバーの間の「中間者」として機能し、それを通過するすべてのトラフィックを表示および変更できるようにします。
まず、デスクトップの左上隅にあるアプリケーションランチャーを開き、Burp Suite を起動します。
- "Temporary project" をクリックし、次に "Next" をクリックします。
- "Use Burp defaults" を選択し、**"Start Burp"** をクリックします。
Burp Suite が開いたら、Proxy タブに移動します。ここで HTTP トラフィックの傍受を制御します。
Proxy タブ内には、いくつかのサブタブがあります。Intercept サブタブにいることを確認してください。ここに、傍受のオン/オフを切り替えるボタンがあります。デフォルトではオフになっている場合があります。
"Intercept is off" と表示されているボタンをクリックして有効にします。ボタンのテキストが "Intercept is on" に変わり、押された状態に見えます。
これで、Burp Proxy は、この実験環境で事前に設定されたブラウザによって行われる次の HTTP リクエストを積極的にキャプチャするのを待機しています。
ブラウザからのリクエストを傍受する
このステップでは、Web ブラウザから HTTP リクエストを生成し、それを Burp Suite でキャプチャします。インターセプトモードがオンになっているため、Burp はリクエストを保持し、あなたがそれに対して何をするかを決定するまでサーバーに到達させません。
実験環境で提供されている Web ブラウザを開きます。このブラウザは、127.0.0.1:8080 で実行されている Burp Proxy を経由するように既に設定されています。
ブラウザのアドレスバーに、セットアップスクリプトによって起動されたシンプルな Web アプリケーションの URL を入力し、Enter キーを押します。
http://127.0.0.1:5000/search?q=books
ブラウザのタブにローディングアイコンが表示され、ページが読み込まれないことに気づくでしょう。これは予期された動作です。これは、Burp Proxy がリクエストを正常に傍受し、あなたの操作を待っていることを示しています。
次に、Burp Suite ウィンドウに戻ります。Proxy -> Intercept タブで、ブラウザが送信した HTTP リクエストの生のコンテンツが表示されます。
GET /search?q=books HTTP/1.1
Host: 127.0.0.1:5000
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
...
これで、HTTP リクエストが宛先に到達する前に正常にキャプチャできました。
「Raw」リクエストビューでパラメータ値を変更する
このステップでは、傍受した HTTP リクエストを変更します。これが、その場でリクエストを改ざんする中核となります。メソッド、パス、ヘッダー、またはボディなど、リクエストのどの部分でも変更できます。この実験では、URL パラメータを変更します。
リクエストが Proxy -> Intercept タブに表示されている状態で、Raw ビューにいることを確認してください。このビューはリクエストのプレーンテキストを表示するため、直接編集が容易です。
リクエストの最初の行を見つけます。
GET /search?q=books HTTP/1.1
q=books の部分は URL パラメータです。サーバーサイドアプリケーションは、q の値(現在は books)を使用してレスポンスを生成します。
次に、この値をテキストエリアで直接編集します。Raw ビュー内をクリックし、books を dvds に変更します。
変更後の最初の行は、次のようになります。
GET /search?q=dvds HTTP/1.1
転送中のリクエストデータを正常に変更しました。ブラウザはこの変更に気づいていません。ブラウザはまだ q=books でページをリクエストしたと考えています。サーバーはまだどのリクエストも受信していません。
変更したリクエストを転送する
このステップでは、変更したリクエストを Burp Proxy から解放し、Web サーバーに送信できるようにします。
Intercept タブでリクエストを編集した後、それに対して何をするかを決定する必要があります。ビューの上部にあるボタンを通じて、主に 3 つのオプションがあります。
- Forward: リクエストを(現在の、変更された可能性のある状態のまま)サーバーに送信します。
- Drop: リクエストを完全に破棄します。ブラウザは最終的にタイムアウトします。
- Action: リクエストを他の Burp ツールに送信するなど、その他のアクションのメニューを提供します。
変更したリクエストをサーバーに送信するには、**Forward** ボタンをクリックします。
リクエストを転送した後、Burp はそのタブでサーバーのレスポンスを表示します。Forward を再度クリックすることで、このレスポンスをブラウザに送り返すことができます。
関心のあるリクエストを処理し終えたら、後続のリクエスト(ファビコンなど)の傍受を避けるために、インターセプトをオフにするのが良い習慣です。**"Intercept is on"** ボタンをクリックして、**"Intercept is off"** に切り替えます。これにより、他のすべてのトラフィックが自由に流れるようになります。
変更されたリクエストに対するサーバーのレスポンスを観察する
このステップでは、ブラウザと Burp Suite の履歴の両方で、あなたの操作の結果を観察します。これにより、サーバーが変更されたデータを処理したことが確認できます。
まず、Web ブラウザに戻ります。以前は読み込みが停止していたページが、完全に読み込まれているはずです。ページに表示されているコンテンツを確認してください。次のように表示されているはずです。
You searched for: dvds
これにより、サーバーは元のパラメータ値(books)ではなく、変更されたパラメータ値(dvds)を受信して処理したことが確認できます。あなたは、サーバーをだまして異なるコンテンツを表示させることに成功しました。
次に、Burp Suite に戻って詳細を確認します。Proxy タブをクリックし、次に HTTP history サブタブをクリックします。このタブには、プロキシを通過したすべてのリクエストとレスポンスが記録されています。GET /search?q=dvds のエントリが表示されているはずです。それをクリックすると、送信した完全なリクエストと、それに対応してサーバーが返したレスポンスが表示され、インタラクションの完全な記録が得られます。
この簡単な演習は、強力な概念を示しています。クライアントサイドから来るデータは、Burp Suite のようなプロキシツールを使用して攻撃者によって簡単に操作できるため、決して信頼してはなりません。
まとめ
この実験では、Burp Proxy を使用して HTTP リクエストをリアルタイムで変更するという、不可欠なスキルを学びました。
あなたは以下のことを成功させました。
- Burp Proxy でインターセプトモードを有効にする。
- ブラウザからのライブ HTTP リクエストをキャプチャする。
- 生の HTTP リクエストビューで URL パラメータを変更する。
- 改変したリクエストを Web サーバーに転送する。
- サーバーのレスポンスが、あなたの変更したデータに基づいていることを観察する。
このテクニックは、Web アプリケーションセキュリティテストの基本的な構成要素であり、クライアントとサーバー間の通信を操作することで、さまざまな脆弱性を調査することを可能にします。
