概要
BurpSuiteでWebアプリケーションの脆弱性診断を行う際に、HTMLフォーム送信におけるパラメータを引き継ぎたい場面があります。
BurpSuiteにもともと備わっているMacroとSession handling rulesを使用することで、引き継ぎ可能です。
本記事ではその機能の使い方を記載します。
※ もし引き継ぎたいパラメータがJSONの場合は、以下を参照してください。
目的
- BurpSuiteのRepeaterでリクエストBを送信した際に、リクエストAで得たパラメータを、リクエストBに引き継ぐ
- さらに、リクエストCを送信した際に、リクエストBで得たパラメータを、リクエストCに引き継ぐ
前提
デモとして下記仕様とします。
- リクエストBで正常なレスポンスを得たい場合、リクエストAで返却された文字列が必要である
- リクエストCで正常なレスポンスを得たい場合、リクエストBで返却された文字列が必要である
- リクエストAを送信すると、H1タグに文字列が返却され、これはリクエストBで必要になる
- リクエストBをPOSTで、uuid={リクエストAで得た文字列}として送信すると、
- 成功の場合、H1タグに文字列が返却され、これはリクエストCで必要になる
- 不成功の場合、H1タグに文字列が返却さず、エラー画面になる
- リクエストCをPOSTで、token={リクエストBで得た文字列}として送信すると、
手順
まずは、リクエストA→リクエストBの引き継ぎ設定を行います。
Macroの設定(リクエストA→リクエストB)
ここで、リクエストAで返却される文字列の抜き出し設定をします。
SettingでMacroと検索し、Addを押下します。
Macro recorder でリクエストAを選択します。

Macro recorder でリクエストAを選択
右側にあるConfigure itemを押下し、Addを押下します。
ここで、リクエストAで返却される文字列の抜き出し設定を行います。
Parameter name を今回だとuuidに設定します。
Define start and endで、抜き出したい文字列の始まりから終わりの目印を設定します。
今回だと、<h1>からはじまり、</h1>で終わるので、そのように記載します。
下図のように、抜き出したい文字列がハイライトされていればOKです。

抜き出したい文字列がハイライトされている
これでMacroの設定は完了です。
次に、Session handling rulesの設定をします。
Session handling rulesの設定(リクエストA→リクエストB)
Session handling rulesで検索し、Addを押下します。
DetailsタブのRule descriptionには任意の名前をつけます。ここでは、「requestA」と設定します。
Rule actionでは、AddからRun a Macroを選択し、先ほど作成したMacroを選択します。
Session handling action editorでは、Update only the following parameters and heders:で、引き継ぎ先のパラメータのキー値を設定します。ここでは、「uuid」と設定します。

引き継ぎ先のパラメータのキーを設定する

Detailsタブ
Scopeタブでは、Tool Scopeで使用したいツールを選択します。今回はRepeaterで引き継ぎ処理ができればいいので、Repeaterにチェックを入れます。
URL Scopeでは、この設定をいつ動かすかを設定します。今回は、リクエストBを送信した際に動いて欲しいので、Use custom scopeにリクエストBを設定します。

Scopeタブ
動作確認(リクエストA→リクエストB)
RepeaterでリクエストBを送信して、リクエストボディの値が変化して、引き継ぎ設定がうまくいっているか確認します。

Repeaterで動作確認
次に、リクエストB→リクエストCの引き継ぎ設定を行います。
Macroの設定(リクエストB→リクエストC)
ここで、リクエストBで返却される文字列の抜き出し設定をします。
SettingでMacroと検索し、Addを押下します。
Macro recorder でリクエストA、リクエストBを選択します。

Macro recorder でリクエストA、リクエストBを選択
リクエストAを選択した状態で、右側にあるConfigure itemを押下し、Addを押下します。
ここで、リクエストAで返却される文字列の抜き出し設定を行います。
この設定はここでの設定と同様です。
次に、リクエストBを選択した状態で、右側にあるConfigure itemを押下し、Addを押下します。
リクエストBのリクエストボディuuidに、いま設定したリクエストAの値を設定します。
Derive from prior respons で Respons 1 をプルダウンで選択します。

リクエストAで抜き出した値をリクエストBのボディに当て込む設定
右下Addを押下し、リクエストBのレスポンスから文字列を抜き出す設定を行います。
Parameter name を今回だとtokenに設定します。
Define start and endで、抜き出したい文字列の始まりから終わりの目印を設定します。
今回だと、<h1>からはじまり、</h1>で終わるので、そのように記載します。
下図のように、抜き出したい文字列がハイライトされていればOKです。

抜き出したい文字列がハイライトされている
このMacroの設定がうまくいってるか、Test Macroを押下して確認します。
Macro testerで、リクエストBが成功していればOKです。

Test Macroで動作確認
これでMacroの設定は完了です。
次に、Session handling rulesの設定をします。
Session handling rulesの設定(リクエストB→リクエストC)
Session handling rulesで検索し、Addを押下します。
DetailsタブのRule descriptionには任意の名前をつけます。ここでは、「requestB」と設定します。
Rule actionでは、AddからRun a Macroを選択し、先ほど作成したMacroを選択します。
Session handling action editorでは、Update only the following parameters and heders:で、引き継ぎ先のパラメータのキー値を設定します。ここでは、「token」と設定します。

引き継ぎ先のパラメータのキーを設定する

Detailsタブ
Scopeタブでは、Tool Scopeで使用したいツールを選択します。今回はRepeaterで引き継ぎ処理ができればいいので、Repeaterにチェックを入れます。
URL Scopeでは、この設定をいつ動かすかを設定します。今回は、リクエストCを送信した際に動いて欲しいので、Use custom scopeにリクエストCを設定します。

Scopeタブ
動作確認(リクエストB→リクエストC)
RepeaterでリクエストCを送信して、リクエストボディの値が変化して、引き継ぎ設定がうまくいっているか確認します。
期待値通りの挙動であれば、設定完了です。

Repeaterで動作確認
参考文献
ローカルプロキシツールBurpの使い方 その4 ~マクロ機能_ 複数画面とトークンの引継ぎ~
| パーソルクロステクノロジー株式会社
