7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Codexを使ってBurpの拡張機能を作ったり改善したりしてみました

Last updated at Posted at 2025-12-19

はじめに

こんにちは、株式会社シーエー・アドバンスの脆弱性診断チームに所属している宮里と申します。

脆弱性診断を行っている時にBurp Suiteというローカルプロキシツールを使用しているのですが、とある作業を行う際に効率化したいと思った作業があり、Codexを使って作業と並行して自分用に拡張機能を作ってみたので、作った手順や機能など簡単に紹介したいと思います。

始める前に

今回はBurp Suiteの拡張機能を作成した内容を記載します。
Burp Suiteとは、ペネトレーションテストや脆弱性診断で主に使用されるローカルプロキシツールです。
HTTPリクエストやレスポンスを確認し、ヘッダーやパラメータなどを改ざんして送信出来ます。

詳しくはこちらから確認出来ます。
https://portswigger.net/burp

拡張機能の機能について

実現したい機能は以下になります。

・指定したクッキーやリクエストヘッダーの値を書き換えてリクエストを送る

欲しい理由として、脆弱性診断をしている時に、ユーザに設定されている権限が適切に機能しているか確認する事があります。

一例として、とあるサービスに以下のユーザーがいるとします。

ユーザーA(管理者ユーザー)
ユーザーB(一般ユーザー)

一般ユーザのセッションを使用して管理者ユーザーしか使用できない機能が使えないか、などを確認する際に効率よくセッションの差し替えと確認がしたいと思いました。

作った手順

Codexに指示をする際に、AGENTS.mdにやりたい事や作成する手順についてあらかじめ記載しました。
※AGENTS.mdにまとめたのですが、仕様書駆動だと「要件定義(requirements.md)」、「設計(design.md)」、「実装計画(tasks.md)」的な感じで分けることがあるので、面倒だったのでAGENTS.mdにまとめてます。

AGENTS.mdの内容は以下になります。

# 概要
Burpの拡張機能を作成します、各ステップに分けて実装を進めてください。
Montoya API 2025.8 を使用し、言語はKotlinでお願いします。また、gradlewでビルド出来るようにしてください。

最終的な機能は以下になります。
1. historyにあるリクエストを拡張機能に送る事が出来ます
2. 拡張機能に送ったリクエストのcookieを削除してリクエストを送り、未ログイン状態でアクセス出来るかチェックします
3. ヘッダーに指定したkey,valueを事前に設定し、それを追加してリクエストを送ります
4. 過去に送ったリクエストとレスポンスを確認出来るタブがあり、そこから結果を確認出来ます

# ステップ1
まずは土台として、読み込んでタブに拡張機能が表示され、選択すると拡張機能のタブに遷移しHello! extension!を表示する拡張機能を作成してください。

# ステップ2 
Historyにあるリクエストを拡張機能に送れるようにしてください。
拡張機能からリクエストを再送出来るようにしてください。

# ステップ3
拡張機能に送ったリクエストのリクエスト情報、ヘッダーとボディまで確認出来るUIにしてください。
履歴は選択したら送ったリクエストとレスポンスのヘッダーとボディまで確認出来るようにしてください。

選択したリクエスト情報、履歴のリクエストレスポンス情報を表示するUIは共通の場所を利用し、選択しているリクエストをもとに表示するものを切り替えてください。

# ステップ4
リクエストのcookie、ヘッダーのkeyを指定し、指定したvalueで変更してリクエストを再送出来るようにしてください。
複数のkeyの指定を行えるようにしてください。

# ステップ5
拡張機能内でタブを作成出来るようにして、同じリクエストに対して複数パターンの送信をチェック出来るようにしてください。

Codexには以下のような指示をして都度生成された拡張機能の挙動を見ながら進めていきます。

AGENTS.mdを参照しBurpの拡張機能を作成していきます、ステップ1の実装を行ってください

ちょっとやってみたコツ

AGENTS.mdのステップについては、最初記載していたのはステップ2くらいまででした。
ステップ1、ステップ2の出来を確認しつつ、最終的な目標を目指して少しづつ機能を足して近づけていくイメージでステップ3を記載して実行、ステップ4を...と続けました。

実行中は途中のファイル変更の許可や変更箇所の確認をしたりはしましたが、基本的にエラーが出ていないかを眺める程度でほぼ全任せにしており、自分は他の作業を優先していました。

出来上がった拡張機能

そして、出来あがった拡張機能はこちらになります。

スクリーンショット 2025-12-17 122355.png

社内で研修やインターンで利用しているWebアプリケーションがあるので、そちらで拡張機能を試してみます。

ログイン後認証を取得した後にマイページにアクセスするリクエストで確認してみます。
image.png

Historyからリクエストを選択し、右クリックのメニューから拡張機能を選択します。image.png

セッションを持っているCookieは「token_session」なので、指定して値を「hogehoge」になる設定をしてみます。

image.png

拡張機能に送ってきたリクエストを確認して「Send selected request」で送信します。
結果は「Send History」からリクエストを選択して確認出来ます。

image.png

設定したように指定したCookieの値が書き換わって送られている事、レスポンスが302で認証で弾かれてログインページに戻されている事など確認出来ました。
リクエストヘッダーも同様に行えます。

また、タブを複数作成でき、設定パターンも並行して確認出来るようにしています。
image.png

使って分かった問題点と、チーム内の他メンバーからの使ってみたいの声

自分の作業を手伝ってもらうには十分すぎるくらいでしたが、問題点ももちろんありました。

keyやvalueに長い値が入るとUIが崩れる

CookieでもHeaderでもどちらの設定を行うにしても、keyの指定でもvalueの指定でも文字列が長いとUIが崩れます。

また先ほどのお試しではhogeやhugeでやっていましたが認証を持っている値やjwtトークンなどを設定する事が多く、トークンの文字列は長いのが普通なので、UIは普通に崩れます。

image.png

Request / Response からメニューを開いたときに表示されないのが不便

Request,Responseの箇所で右クリックしてもメニューに拡張機能を送るボタンが表示されません。
ここから送れるようになるだけで、Historyから送るのが楽になったり、RepeaterやIntruder、Loggerからもリクエストを送る事が出来るようになります。

※画像を用意する前に修正が進んでしまいました、ごめんなさい:cry:

タブに名前をつけたいし、消したい時もある

タブはpattern1,pattern2....で連番で固定になっています。
設定しているタブごとに何を設定したかわかりやすく名前は変更出来たほうが良いです。

また、タブを削除する機能が無いのは使いにくい。

使いたいという声

社内のチームメンバーから拡張機能を見てみたい、使ってみたいと声を頂きました。
とても嬉しい事なのですが、自分が使用するなら目を瞑れる所でもさすがに他の方にこのまま渡すのは怖いです。
せっかくなのでCodexにこちらも修正してもらいましょう。

改善してみよう

AGENTS.mdに追記

以下のような内容で追記をしてみました

## 改善したい事

# ステップ1
Cookie overridesとHeader overridesの設定時と設定を追加した後にUIが崩れるため、幅を今の状態で固定にしてください。
はみ出す分はスクロールで表示してください。

# ステップ2
Request,Responseのタブやrepeaterのタブからも選択した際に拡張機能へリクエストを送れるようにしてください。

# ステップ3
作成したタブの名前を変更出来るようにしてください。
また、タブが二つ以上ある時のみ、タブの削除も可能にしてください

Codexに改善をお願いしよう

以下のようなプロンプトで修正を依頼していきます。

AGENTS.mdの「##改善したい事」に記載されているステップ1の実装をしてください。

ステップ1の修正を確認してみる:rage:

ステップ1の実装が完了したので見てみましょう。
長い値を入れた際に崩れなくはなりましたが、デフォルトの表示が少し崩れました。
プロンプトを改善してこちらも直してもらいましょう
image.png

ステップ1のプロンプト修正

改善のステップ1のプロンプトは最終的に以下のようになりました。

# ステップ1
Cookie overridesとHeader overridesの設定時と設定を追加した後にUIが崩れるため、幅を今の状態で固定にしてください。
また、横幅について余白が生まれないようにCookie overridesとHeader overridesの設定は可能な限り同じ大きさで、大きく配置してください。
はみ出す分はスクロールで表示してください。

Cookie name, Value とHeader name,Valueにも長い文字列が入るとUIが入力する前とした後で大きく形が変わります、入力後に形が変わらないようにしてください

そして出来たのがこちらになります。
値を入れる時の枠も崩れず、設定を追加した後も崩れなくなっていました!
image.png

引き続きステップ2も3も改善お願いする

引き続きCodexに作業をお願いしつつ、様子をみつつ必要があれば都度プロンプトを微調整しながら様子を見ます

ステップ2の改善

プロンプトの修正も必要が無く実装してくれました。
これでHistoryから送るのも楽になり、RepeaterやLoggerから拡張機能へリクエストを送る事も出来るようになりました。
image.png

ステップ3の改善

こちらもプロンプトを修正する必要が無く実装が完了しました。
名前の変更も、タブが2つ以上ある時に選択しているタブのDelete Tabボタンから削除も行える事を確認出来ました。
image.png
image.png

まだ、気になる部分を上げるとキリがないですが欲しいと言ってくれる方にとりあえず渡せるかも!と思う内容になった気がします。

所感

一通り作りたい機能をつけたり修正が出来たりをCodexに任せて実装がほぼ全て出来てしまいました。すごい。

プロンプトを作成したり実装された内容を確認する必要こそありますが、別作業をしながら並行して動いてくれる事が、他の作業を出来るだけ止めないでやりたい自分にはとても感動しました。

また、作成のハードルこそ下がってるとは思いましたが、むしろコード書く力や技術力は必要では...?と改めて思いました。

主な理由は以下です
・作る前の段階の技術選定
・生成したコードでビルドエラーした時のトラブルシューティング
・実装するゴールが見えているか、作業を正しく細かく出来るか

そもそも今回は上手く生成してもらえました、エラーの修正で同じ作業にループに入る事もあります、直した内容で別の問題が出てきたりします、イレギュラーに対応する力、生成されたコードを適切に読む力が必要だと思います。

もっと生成AIを強く振り回せるように精進しようと思いました。

興味に向かって作業してみるのは面白い

今回、チーム内から興味をもらえた結果になったのはとても嬉しい事でしたが、別に興味を持たれなくても自身で作ってみたいなと思った事は作ってみちゃっていいなと思いました。

自分の中だけで完結するからこそ、フットワーク軽く一旦やってみようかなと思えた事がきっかけで今回の流れに繋がったと思っています。

なので、難しい事は一旦置いといて興味が出た事には挑戦して良いと思います。
その手伝いとして生成AIに協力して貰いましょう。

この記事を見て、Burpに限った事ではなく何か他ツールなど作ってみたいなと思ってくれた方が一人でも増えてくれたら僕も嬉しいです:v:

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?