TOUCH THE SECURITY Powered by Security Service G

こんにちは、セキュリティサービスGの「シン」です。前回はBurpのマクロ機能について説明しました。あまりBurpに詳しくなかった方も第1回目からご覧になっている方は、かなり使いこなせるようになったのではないでしょうか。プロキシツールって色々ありますけど、フリーのツールでこれほど機能が充実しているツールは無いと思います。
そして第5回目に説明するBurpの機能は、「Intruder」という機能について説明したいと思います。
目次
1.Intruder機能とは
Intruder機能とはどんなものか?
Proxy機能やRepeater機能は自らが診断値を挿入し、レスポンスを見て脆弱性があるかを確認しますが、Intruder機能はこれらの機能を自動で行なってくれるため、入力ミスや確認ミスがなく診断を確実に実施できます。つまり商用のWebアプリケーション診断ツールと同じ事ができるのです。ただし自動とはいえ、自分自身でパラメータに診断値を挿入する箇所や、検出トリガーを設定する必要があります。
私は現場では商用のWebアプリケーション診断ツールを利用しているのですが、一部の通信形式でツールが対応していないものがあり、その場合にこの機能を利用しています。
2.Intruderの設定
それでは実際にIntruder機能の利用方法を説明していきます。
Burpを起動してProxyタブから診断したいリクエストをキャプチャしてください。診断するログを選択して、右クリックからSend to Intruderを選択します。

2-1.Targetを設定する
Targetタブには診断対象のHost情報を入力します。
2-2.Positionsを設定する
先ず、Positionsタブを選択します。
ここでは診断したいパラメータを指定します。デフォルトでは、Cookieリクエストパラメータ値が§で囲まれています。画面右側にある「Auto § ボタン」を押下しても、同じ状態になります。マルチパートのパラメータやXMLやJSONパラメータも自動的に認識してくれるようです。
尚、手動で指定する場合は、(図では見切れてますが)画面右側「Clear § ボタン」を押下して、診断値を挿入したい箇所にカーソルを合わせて、画面右側「Add § ボタン」を押下して指定します。
-
手動での設定例
- parameter1=test§§ パラメータ値の末尾に診断値を挿入
- parameter2=§testtest§ パラメータ値ごと診断値を置換
- parameter3=§testtesttest§§§ 上記を両方やりたい場合

この画面にAttack typeというリストがありますが、今回はデフォルトのSniperを選択してください。詳しくは後ほど説明します。
2-3.Payloadsを設定する
Payloadsタブでは診断値を設定します。
Payload Options のテキストボックスに入力してAddボタンで設定できます。手打ちでは時間がかかるのでテキストファイルに診断値のリストを作成しておき、Loadボタンで読み込むまたは、テキストファイル内容を全コピーからPasteボタンで一括挿入できます。

2-4.Optionsを設定する
次にOptionsタブで検出トリガーを設定します。
これは、脆弱性が検出されたことを判定するためのものですね。Grep Matchのテキストボックスに入力してAddボタンで設定できます。手打ちでは時間がかかるのでテキストファイルに検出トリガーのリストを作成しておき、Loadボタンで読み込むまたは、テキストファイル内容を全コピーからPasteボタンで一括挿入できます。
特定の文字列を検出トリガーとする場合はMatchTypeにSimple stringを選択します。正規表現を利用する場合はMatchTypeにRegexを選択します。

最後に一番下のRedirectionsにAlwaysを選択します。この設定することでリダイレクトが発生した場合にリダイレクト先もGrepMatchで設定した文字列が含まれているかが確認してくれます。

3.Intruderを利用する
基本的な設定は以上です。右上にStart attackのボタンがあるので押下すると診断が開始されます。

今回のフリーエディションでは、リクエスト間隔に制限があるため遅めになっています。Start Attackは複数で実行できるので、指定パラメータを複数に分割して実施することで診断時間を軽減できます。

画面一番下がFinishedになれば診断終了です。

詳細を確認したい場合は、任意の行を選択するとリクエスト・レスポンスの情報が確認できます。カラム名をクリックしてソート可能です。
3-2.診断結果のカラムについて
診断結果のカラムについての解説です。
Request | 診断した順番を表します |
---|---|
Position | Targetで指定した挿入箇所をNoで表したもの |
Payload | 挿入した診断値 |
Status | 応答したステータスコード | Error | リクエスト時のエラー有無 | Redirects followed | リダイレクトが発生した数 | Timeout | レスポンスのタイムアウト有無 | Length | レスポンスのbyte数 |
尚、これより右側はOptionsのGrep Matchで設定した文字列が含まれているかが確認できます。含まれている場合はこのようにチェックが入ります。

3-2.Payload PositionsのAttack typeについて
先ほどのPayload PositionsのAttack typeについてもまとめておきます。
Sniper | positionで指定した箇所を、Payload Optionsで設定した値に1つずつ変更して送信 |
---|---|
Battering ram | positionで指定した箇所を、Payload Optionsで設定した値に全て変更して送信 |
Pitchfork | positionで指定した箇所ごとに、Payload Optionsで値を設定して送信。 name=§shin§&age=§36§&address=§chiba§があった場合、name、age、addressごとに変更するものをPayload Optionsで設定します。 |
Cluster bomb | positionの一つを固定しながら他を変えるのを順繰り設定していきます。 position1のPayload Optionsの値を「aaa、bbb」position2のPayload Optionsの値を「ccc, ddd」と設定した場合、始めにposition1の「aaa」が固定され、position2が「ccc, ddd」となって送信。続いてposition1が「bbb」で固定され、position2の「ccc, ddd」が送信されます。 |
4.まとめ
いくつか利用できる機能に制限がありますが、Intruder機能はどのような診断値を挿入して、どのような結果が返ると脆弱性なのかをしっかり理解できれば、有償ツールのようなWebアプリケーション診断を再現することができます。
以上、第5回はBurpのIntruder機能についての説明でした。