現在地:ホーム / ハッキングツール / Response OverviewとColonel Clustered – Burpのレスポンスを内容でグループ化する
Intruderの攻撃結果をステータスコードと長さで並べ替えれば、サイズが異なるレスポンスは見つかります。しかし、内容だけが異なるレスポンスは見逃してしまいます。Drew KirkpatrickがColonel Clusteredの紹介に使った例では、すべてのレスポンスが同じサイズでした。それでも、あるID値に対してだけ、数百行あるうちの1行が異なっていました。長さの列では、この違いはまったく見えません。

Response OverviewとColonel Clusteredは、レスポンスを内容でグループ化する2つのBurp Suite拡張機能です。Response Overviewは、対象となるスコープ内のレスポンスが届くたびに振り分けます。Colonel Clusteredは、ユーザーが送信したレスポンスをまとめてグループ化します。
Advertisement
Discover more
Hacking tools directory
Cybersecurity training courses
Cyber security news
Response Overview:しきい値を自分で設定する
Response OverviewはBApp Storeからインストールできます。ストアにはバージョン1.6.0(2026年1月20日更新)が掲載されており、ProfessionalとCommunityの両エディションに対応しています。
ストアの手順は簡潔です。まず対象をスコープに追加し、Proxy、Scanner、Repeater、Intruderなど任意のツールでいつもどおりテストします。次にResponse Overviewタブを開き、任意の列で並べ替えて、小さなグループや珍しいステータスコードを調べます。確認が済んだ項目は、右クリックしてHide item(s)を選ぶと一覧から消せます。
各行は、代表となる1件のレスポンスとグループのサイズを表しています。レスポンスは、同じHTTPステータスコードを持つグループとだけ比較されます。その中で、各グループの最初のメンバーと照らし合わせます。類似度のしきい値(デフォルトは98%)を満たす最初のグループに加わり、どれにも該当しなければ新しいグループを作ります。
デフォルトでは、比較の前にリクエストパラメータの反映部分を除去します。対象は、8文字を超える名前と値で、デコード後とエンコード後の形式も含みます。そのため、長いペイロードがそのまま返されても、グループは分割されません。
デフォルトでは、スコープ内で1 MiB未満のレスポンスだけを対象にします。この上限は設定で変更できます。また、関心の薄いMIMEタイプやファイル拡張子、一般的なWebサーバーの標準エラーページはスキップします。
見逃す可能性があるケース。類似度は、Pythonのdifflib方式の比率で算出します。ただし、バイトの並び順ではなく、各バイトの出現頻度をもとに計算します。ソースコードには「ABBA and BAAB and BABA are all the same」と書かれています。
そのため、同じ文字を異なる順序で含む2つのレスポンスが、同一グループに入ることがあります。たとえば、表の中で2つの値が入れ替わっているケースです。8文字以下のペイロードは除去されないため、短い反映入力があるとグループが分割される場合もあります。
同じステータスコードとボディサイズを持つグループが30個に達すると、そのステータスとサイズのレスポンスはそれ以降まるごとスキップされます。表示されるグループサイズは実際より少なくなります。ソースコードでは、正確なカウントよりも速度を優先しています。
Colonel Clustered:しきい値を自動で決める
Kirkpatrickの解説では、まずIntruderの攻撃を最後まで実行します。次に、結果をすべて選択して右クリックし、Send to Colonel Clusteredを選びます。その後、「Col. Clustered」タブに切り替えると、デフォルトのFast Scanが実行されます。
このタブは4つのペインで構成されています。左上には、メンバー数付きのクラスタと、独立したOutliersグループが表示されます。その下には、選択したクラスタのメンバーが、ステータスコード、長さ、Content-Typeとともに並びます。これらは列ごとに並べ替えられます。右側にはリクエストとレスポンスのビューアがあります。
見るときは、小さいほうから確認します。メンバーが1つだけのクラスタやOutliersの項目は、他のどれにも似ていないレスポンスです。解説では、メンバーが1つだけのクラスタを選び、Burp Comparerで何が違ったのかを正確に確かめています。
内部では、各レスポンスをContent-Typeに応じて読み取ります。HTMLの場合は、タグとスクリプトを取り除き、表示テキストを5文字ずつのチャンクに分割します。このとき数字は正規化します。テンプレート内でIDが変わっても、1つのページが多数に分かれないようにするためです。
JSONでは、値を無視してキーとその入れ子構造だけを残します。バイナリデータは、5バイトの並びとして比較します。
同一のトークン集合は統合されます。その後、Fast ScanでDBSCANを実行します。近傍距離は、ユーザーが指定するのではなく、Kneedleアルゴリズムで選ばれます。より低速なDeep Analysisはボタンから起動します。こちらはJaccard距離から階層的にクラスタを構築し、クラスタの統合状況に基づいてしきい値を決めます。
見逃す可能性があるケース。テンプレート化されたページをまとめるためのルールが、ファジングで探している違いまで隠してしまうことがあります。最初に確認したいのはこの点です。
変わるのが値だけのJSONレスポンスは、近隣のレスポンスと同じキーを持つため、同じクラスタに入ります。たとえば、ロールが違う場合や、同じフィールド内のエラー文字列が違う場合です。数字は正規化されます。そのため、IDや件数、残高のように数字だけが変わる場合も、ページが別のクラスタに分かれない可能性があります。
作者は、高速アルゴリズムが「ほとんどの場合うまく機能した」と述べています。2つ目の例では、明らかに異なる2つのレスポンスが大きなクラスタにまとめられてしまいました。ただし、Intruderのサイズ、ステータスコード、Content-Typeの各列を見れば、違いに気づけたはずです。
Deep Analysisでは、その2つが独立したクラスタに分けられました。大きなクラスタのメンバー間でこれらの列に違いがある場合は、Deep Analysisを実行してください。処理が遅すぎる場合は、キャンセルもできます。
作者は、計算量をデフォルトでO(n²)、Deep AnalysisでO(n³)としています。また「このプラグインに5万件のレスポンスを投げるのはためらう」と述べています。攻撃結果は絞り込んだ一部を送るようにしましょう。
比較表
| Response Overview | Colonel Clustered | |
|---|---|---|
| 実行タイミング | Burpのあらゆるツールから届く、対象のスコープ内レスポンスに対して常時実行 | 送信した項目に対してオンデマンドで実行 |
| 類似度のしきい値 | ユーザーが設定(デフォルトは98%) | 自動で決定。Fast ScanではKneedle、Deep Analysisでは統合距離を使用 |
| 比較の対象 | バイトの出現頻度。デフォルトでは、8文字を超える反映パラメータの名前と値を先に除去 | 内容を考慮したトークン(表示テキスト、JSON構造、バイト列) |
| ステータスコード | 同じステータスのレスポンスだけを比較 | 列として表示。READMEには、クラスタリングに影響するとの記載なし |
| 隠れてしまう可能性があるもの | 順序だけが異なる同じバイト列。短い反映ペイロードがあるとグループが分割される場合あり | キーが同じJSONで値だけが変わった場合。数字だけの変化 |
| 入手方法 | BApp Store(ProfessionalとCommunity) | GitHubのリリースjarまたはビルド。2026年9月29日時点でBApp Storeには未掲載 |
どちらを選ぶか
Response Overviewは、案件全体をバックグラウンドで見渡すためのビューです。BApp StoreからCommunity版でも入手できます。スコープを設定して動かしたままにしておき、あとで小さなグループを確認します。
通常のばらつきでグループが増えすぎる場合は、類似度のしきい値を下げます。意味のある違いを持つレスポンスがまとめられてしまう場合は、しきい値を上げます。ステータスコードで分割する仕様のため、同じボディを持つ200と500は別々に扱われます。一方で、1つのページが2種類のコードで返された場合も、2つのグループに分かれます。
Colonel Clusteredは、すでに絞り込んだ一括データ(たとえば1回のIntruder攻撃)に向いています。しきい値を選ばなくてよい点が最大の利点です。
Colonel Clusteredでは、クラスタを開いてメンバーを読めます。Response Overviewは、グループごとに代表を1件だけ表示します。そのため、件数だけでは、背後にあるレスポンスがすべて一致していると判断できません。値の変化が重要な場合は、元のIntruderやProxyの結果に戻り、そのエンドポイントのレスポンスを複数件比較してください。
ファジング中のパラメータがJSON内の値を変える場合は、Colonel Clusteredの大きなクラスタでも同様に確認してください。トークン化の仕組み上、そうしたレスポンスは1つにまとめられてしまうためです。ページ上の数字だけが変わる場合も、大きなクラスタを確認してください。数字の正規化によって、変化が隠れる可能性があります。
Colonel Clusteredの入手方法
2026年1月3日のv1.0.0リリースには、ビルド済みのColonelClustered.jarが含まれています。BurpのExtensions > Addから読み込んでください。READMEでv1.0.1とされている最新のソースをビルドするには、JDK 17が必要です。
|
git clonehttps://github.com/hoodoer/ColonelClustered.git cd ColonelClustered ./gradlew build |
jarはbuild/libs/ColonelClustered.jarに生成されます。Burp Communityで動作するかどうかは、READMEに記載がありません。
Kirkpatrickの解説によると、PortSwiggerのBApp Storeへ申請済みですが、拡張機能の審査が滞っているとのことです。筆者が確認した時点では、まだ掲載されていませんでした。
このアイデアの背景
当サイトが2007年1月にBurp Suite 1.01を取り上げた時点で、すでにIntruderとサードパーティ製拡張機能向けのインターフェースがありました。今回の2つの拡張機能が変えるのは、攻撃後の工程です。結果を1行ずつ読む代わりに、グループ単位で読むようになります。
Response Overview自身のヘルプテキストによると、その源流はmodzeroのTobias Ospeltが作ったPython拡張機能ResponseClustererにあります。これは「似たレスポンスをまとめ、クラスタごとにリクエストとレスポンスを1件ずつ示す要約を表示する」ツールで、最後にプッシュされたのは2019年6月です。Ospeltは、これが「Burpのパフォーマンスを食っているかもしれない」と気づきました。2021年にツールが動かなくなると、機能を変えてKotlinで新しい拡張機能を書きました。
Response OverviewはBApp Storeからインストールできます(ソース:https://github.com/pentagridsec/PentagridResponseOverview)。Colonel Clusteredはhttps://github.com/hoodoer/ColonelClusteredで入手できます。作者による解説はTrustedSecのブログにあります。
翻訳元: https://www.darknet.org.uk/2026/10/response-overview-colonel-clustered-burp-response-grouping/