Burp Suite の Parameter changer (Extender) を JSON フォーマットのリクエストで使用する方法 

これは シーエー・アドバンス Advent Calendar2023 21日目の記事です。
昨日は @asami-H-Ishi さんの[脆弱性診断実施前にする対象調査の時点で「ある問題」を見つけたらチケットを起票しているよ、の話](https://qiita.com/asami-H-Ishi/items/44a6b1a994b3b38f83f5)でした。
脆弱性診断の流れなども分かりやすく書かれているので是非チェックしてみてください。
明日は @syuta5825 さんの記事です。

## はじめに
初めまして。
シーエー・アドバンス(CAAD)技術統括本部セキュリティチームの @azama_yasuhiro です。
社内(グループ会社含む)サービスの脆弱性診断に関わる業務を行っています。
普段の業務では Burp Suite というローカルプロキシツールを使用して診断をしています。
今回は弊社でよく利用している **Parameter changer** という拡張機能を JSON フォーマットのパラメータで動作させる方法を紹介します。
Parameter changer は例えばパラメータにユニークキーが設定されており、二重登録ができない場合などに指定したパラメータを任意の値に書き換えてくれる拡張機能です。
詳しくは参考の **(Webアプリケーション診断ツール「Burp Suite」のExtention紹介(二重登録エラー回避機能))** をご参照ください。
## 検証環境
* macOS Monterey v12.6.9
* Burp Suite Professional v2023.10.3.6
* jython-standalone-2.7.2.jar
## 事前準備
1. まずはじめに Python 環境を準備するため Jython の[公式サイト](https://www.jython.org/download.html)より Jython Standalone の jar ファイルをダウンロードし任意の場所に配置します。
![スクリーンショット 2023-12-20 11.00.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517080/6c6d2ebf-5f0f-b673-f5ec-0ed301bf9ca6.png)

1. 次に Burp を起動し Extentions > Extentions settings > Python Environment の 「Location of Jython standalone JAR file:」 にダウンロードしたファイルを指定します。
![スクリーンショット 2023-12-20 10.22.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517080/5cf4186f-7a38-d617-f2cb-50eda2bff21c.png)
これで Python 環境の準備が完了です。
1. 次に[こちら](https://gmo-cybersecurity.com/blog/burpsuite_extender/)のコードをコピーして任意の名前を付けファイルを保存し、Burp の Extensions から読み込みます。
Errors タブに Error が表示されなければ読み込み完了です。
![Extensions.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517080/73a055c3-4f54-7ad6-f0eb-89cc3e588ac8.png)
## JSON フォーマットでの使用
※通常使用については、「参考」に記載した[こちら](https://gmo-cybersecurity.com/blog/burpsuite_extender/)をご参考ください。
1. 書き換えたいリクエストの内容を確認します
![スクリーンショット 2023-12-12 19.17.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517080/484a2ca5-8d02-a903-cdc4-1c0d9b79a722.png)
1. 書き換えたい値をパラメータ化し、Content-Type を `text/html`に変更します
![スクリーンショット 2023-12-12 19.27.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517080/5bb694e3-04c8-655c-9c61-c801249c5f3d.png)
※text/html に変更することで Parameter changer でパラメータとして認識されます。
※パラメータ名は任意の名前で大丈夫です
※パラメータが複数ある場合など、対象としたいパラメータとそれ以外のパラメータになるようにパラメータ化します
(今回も実際の使用を想定してパラメータを2つにしています)
1. パラメータ化できたら書き換えたい値のリストを作成します
![スクリーンショット 2023-12-15 18.12.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517080/35868cf1-7ca9-55b1-e659-611f476693a7.png)
1. Upstream proxy servers を設定し、2つ目の Burp にリクエストを送ります
![スクリーンショット 2023-12-13 18.28.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517080/8e4283ba-2c6e-a77d-1283-3b32d26dcf77.png)
1. 2つ目の Burp の Match and replace rules で下記3つの設定を行います
![スクリーンショット 2023-12-13 18.37.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517080/30e7d39e-dbfb-8a46-bdad-914ed482b52f.png)
※「test=」「&test2=」はパラメータ化で使用した「test=」「&test2=」を空にする設定をしています
※「Content-Type: text/html」は json 形式に戻るように「Content-Type: application/json」に置き換える設定をしています
1. Parameter changer に3で作成したリストをセットします
![スクリーンショット 2023-12-13 18.49.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517080/94b83a87-6628-b7f2-aa44-a0dddf51a437.png)
※上のWindowにはパラメータ化に使用したパラメータ名が入ります
1. リストをセットしたら Repeater・Intruder でリクエストを送信します
1. これで無事正常なレスポンスが返ってくる確認ができました
![スクリーンショット 2023-12-13 18.57.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517080/6a214530-80c3-f76a-7e28-f7c41138b04b.png)
※２つ目の Burp で変換されているため１つ目の Burp で見えるリクエストは元のリクエストのままの状態です
1. 変換されている状況は2つ目の Burp で確認が可能です
![スクリーンショット 2023-12-13 19.02.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517080/07b97c3f-d214-df6b-711b-561a4e647324.png)
※こちらが5の Match and replace での変換前の Parameter changer のみが適応されてる状態です
![スクリーンショット 2023-12-13 19.03.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517080/4ed44883-3eac-a5ac-4708-7a769510eea0.png)
※こちらが最終的に変換されて送られているリクエストです
## 注意点
* よく忘れがちなのですが、Target scope に対象のドメインを追加しないと Parameter changer が反応してくれなくなるのでご注意ください
* パラメータ化した際に使用した **&** も Match and replace で一緒に書き換えるのを忘れないようご注意ください
* Parameter changer の対象とするパラメータは元々のパラメータ名ではなく、自身が設定したパラメータ名となるのでご注意ください
## 終わりに
今回のように複数の Burp Suite を組み合わせることで値の書き換えやMacroなど柔軟に診断を行うことができますので、ご参考いただければ幸いです。
また、今回の記事を書くにあたり、ローカル環境で対象のリクエストを作成するのに少し手間取りましたが、@arakaki_yogo さんの[ゼロから始めるブラウザゲーム生活 ~with GPT~](https://qiita.com/arakaki_yogo/items/e6e1846efcd4a15f9471)の記事を参考に、 ChatGPT を活用してみたところ15分ぐらいで対象のリクエストを作ることができました。
これからは ChatGPT もどんどん活用し業務や開発力の向上に役立てていければと思います。
最後までお読みいただきありがとうございます。
この記事が少しでも Burp Suite を使用する方の助けになれば幸いです。
## 参考
* [(Webアプリケーション診断ツール「Burp Suite」のExtention紹介（二重登録エラー回避機能）)](https://gmo-cybersecurity.com/blog/burpsuite_extender/)
* [Jython](https://www.jython.org/download.html)
* [ゼロから始めるブラウザゲーム生活 ~with GPT~](https://qiita.com/arakaki_yogo/items/e6e1846efcd4a15f9471)