ホーム 職種別 エンジニア BurpSuiteでのJSONパラメータやカスタムヘッダーの引き継ぎ方法について(Extension: CustomParameterHandlerのインストール方法と使い方)
BurpSuiteでのJSONパラメータやカスタムヘッダーの引き継ぎ方法について(Extension: CustomParameterHandlerのインストール方法と使い方)
 

BurpSuiteでのJSONパラメータやカスタムヘッダーの引き継ぎ方法について(Extension: CustomParameterHandlerのインストール方法と使い方)

コマースプラットフォーム部所属の大山大です。

【この記事の対象者】

BurpSuiteのRepeaterやIntruderを使用して、Webアプリケーションなどの脆弱性診断を行なっている方。

【目的】

POSTリクエストのJSONパラメータや、カスタムヘッダに設定されたCSRFトークンを、直前のレスポンスから引き継ぐ。
BurpSuiteのマクロ機能では、下記のようなJSONパラメータやカスタムヘッダのトークンを、レスポンスから引き継ぐことができない。
それを解決する拡張機能「CustomParameterHandler」を紹介する。

【制限事項】

本拡張機能は、スレッドで動作していないため、Intruder使用時のスレッド数は1、InteruderとRepeaterの並行作業はしないように。
実施した場合、期待した引き継ぎができない。
ターゲットした文字列の固定値への置き換え、例えばセッションIDの削除などはスレッドで使用しても問題ない。

【インストール方法】

1.ExtenderタブからBAppStoreを開きます。
2.右上の検索窓で「Parameter」と検索します。
3.「CustomParameterHandler」という拡張を選択します。
4.この拡張にはJythonが必要なので、「download Jython」をクリックして、ダウンロード先のWebサイトを開きます。

5.「Jython Standalone」を選択して、任意の場所にjarファイルをダウンロードします。

6.BurpSuiteに戻って、ExtenderタブのOptionsを開きます。
7.「PythonEnviroment」の「Location of Jython standalone JAR file」に、先程ダウンロードしたJythonのパスを設定します。

8.ExtenderタブのBAppStoreに戻り、他の拡張を選択して、「Custom Parameter Handler」を再選択すると、installボタンが表示されます。
9.installボタンを押して、拡張機能「Custom Parameter Handler」をBurpSuiteにインストールします。

10.インストールが終了すると、「CPH Config」というタブが追加されます。
11.パラメータを引き継ぐ際に使うツールがRepeaterの場合は、Repeaterにチェックを入れてください。不要なチェックは外してください。
12.インストール作業は以上です。

【使い方】

下記のようなJSONレスポンスから、JSONリクエストに値を引き継ぐことを想定します。
Response:input.php

Request:confirm.php

1.まず、通常通りマクロを組みます。
2.レスポンスを得るためのMacroを作成する。

3.MacroRulesに、「Run a macro」として登録する。

4.MacroRulesのScopeタブで、URL Scopeを「Include all URLs」として登録する。これで、JSONリクエストを送信する前にレスポンスを得ることができるようになりました。

5.さて、やっと拡張機能の使い方です。取得したいレスポンスをProxyタブなどで右クリックし、Extensions→Send to CPHを選択します。

6.そうすることで、CPH Configタブへレスポンスの内容がコピーされます。
ここで、レスポンスを記憶させるための設定をします。

7.Friendly nameに任意の名前を設定します。ここで設定した名前が、CPH Config内での名前になります。
8.CPH Configタブの7で設定したタブのチェックを外します。チェックがあると設定した内容で置き換えられますが、レスポンスはキャッシュされます。
9.Scopingのプルダウンで、「only on requests」を選択します。
10.ScopingのRegEx右側のテキストボックスに、リクエストの1行目をコピーして、貼り付けます。
BurpSuiteを流れる
11.Parameter handlingの「The value I need is dynamic」のチェックを外します。

12.次に引き継ぎ先のリクエストを、Proxyタブなどで右クリックして、Extensions→Send to CPHを選択します。

13.CPH Configタブへリクエスト内容がコピーされます。

14.Friendlynameを任意の名前に変更します。ここでは、replaceRequestとしています。
15.Scopingを「only on request」に設定します。
16.ScopingのRegExのチェックを外し、「POST /confirm.php HTTP/1.1」と設定します。
これで、この文字列を含んだリクエストのみ、引き継ぎが実行されます。
17.Parameter handlingの1)で、「”csrf_token”:”.*”」と置き換え対象の文字列を設定します。RegExにチェックが入っていると、正規表現が利用可能です。
18.Parameter handlingの3)で、「”csrf_token”:”\g<token>”」と、置き換え後の文字列を設定します。「\g<token>」については、後述します。
19.Parameter handlingの4)で、プルダウンから「values in the cached response of a previous CPH tab」を選択します。
キャッシュしたレスポンスから値を設定することを意味します。
20.Parameter handlingの4)で、2つ目のプルダウンから手順7で設定した名前を選択します。キャッシュしたレスポンスのうちどれかを選択することになります。
21.Parameter handlingの4)で、RegExのテキストボックスに「”csrf_token”:”(?P<token>[0-9a-z]*)”」と置き換え文字列の条件を設定します。
「(?P<token>~)」とすることで、手順18で「\g<token>」という名前で置き換え文字列の名前付けを行なうことができます。

22.【重要】最後に、引き継ぎ元と引き継ぎ前のリクエストドメインを、Targetに入れてください。
筆者もよくこの設定を忘れて動かなくてハマります。

23.以上を設定して、Repeaterを実行することで、リクエスト中のJSONパラメータの置き換えができました!

【最後に】

この拡張機能は私が作ったものではありませんが、日本語で解説された記事が見当たりませんでしたので、今回紹介させて頂きました。
設定内容はBurpSuiteを閉じると消去されるため、設定をエクスポートしておくことをオススメします。
他の使用方法等については、英語ですが公式Wikiをご参照ください。

github elespike/burp-cph

記事を共有

最近人気な記事