Burp Suite Extender を作ってみた（CopyRequestTsv）

# 概要

2016年11月に行われた [Burp Suite Japan LT Carnival](https://connpass.com/event/42509/) に参加して自分でも拡張機能を作ってみたくなりました！

脆弱性診断業務でサイトの把握のためにExcelでURL一覧を作成しています。
Burp Suiteからリクエスト情報を一括取得できる機能が欲しかったので、ブログ等で公開されている技術情報を参考に作りました。

HTTPリクエストに使われてそうなパラメータをTSV形式でクリップボードにコピーする拡張機能です。
よければ使ってみてください！

# 使い方など

ソースはこちら
https://github.com/toubaru/burp-copy-request-tsv

バイナリはこちら
https://github.com/toubaru/burp-copy-request-tsv/releases

から取得できます。

## 導入手順

1. バイナリをダウンロードします。
2. Burp Suiteを起動し、拡張機能を追加します。<br/>
   - `Extender > Extensions > Burp Extensions > Add` で Load Burp Extension 画面が開きます。
   - Extension Details を設定して拡張機能を登録します。
     - Extension type: Java
     - Extension file (.jar): ダウンロードしたバイナリを選択

## 使い方

1. `右クリック > Copy Request TSV (Full)` でリクエスト情報をクリップボードへコピーします。
2. HTTPリクエスト情報をExcelへ貼り付けられます。

Googleスプレッドシートにも貼り付け可能です。

# 動作確認環境

Windows 7
Java 1.8.0
Burp Suite ※Professional版で使ってますが、Free版でも一応動いてます

- Professional v1.7.15
- Free v1.7.10

# 経緯

脆弱性診断を始める前にサイトを把握するため、サイトをクロールしてURL一覧を作成しています。

ショートカットを駆使してもURL取得やパラメータの取得などにどうしても時間が掛かってしまうため、作業を効率化したいと考えました。

サイトが全て確認できるまで以下の作業を繰り返しています。

- Excelへ画面遷移を記載（パンくずリストみたいな感じです）
- Burp Suite > Proxy > HTTP History での操作
  - URLをコピー -> Excelへ転記
  - paramsタブからパラメータをコピー -> Excelへ転記
  - （あれば）jsonパラメータをコピー ->  Excelへ転記

結果、下記のような一覧が出来上がります。

|画面遷移|メソッド|URL|種別|KEY|VALUE|
|---|------|---|----|---|-----|
|TOP|GET|http://hogehoge/|-|-|-|
||||Header|Host|hogehoge|
|TOP > ログイン|POST|http://hogehoge/login|-|-|-|
||||Path|1|login|
||||Header|Host|hogehoge|
||||Header|Referer|http://hogehoge/|
||||Cookie|_session|hoge|
||||Body|login_id|testuser01|
||||Body|password|1234|
|TOP > ログイン > メニュー|GET|http://hogehoge/menu|-|-|-|
||||Path|1|menu|
||||Header|Host|hogehoge|
||||Header|Referer|http://hogehoge/|
||||Cookie|_session|fuga|
|||||||
|||||||

今回の拡張機能で遷移以外の項目を右クリックからの操作でクリップボードにコピー可能です。
あとはExcelに貼り付けるだけです。
※複数のURLを選択することで一括取得することもできます。

# コピー形式(サンプル)

下記の形式でコピーできます。下記はPOSTの例です。

## POSTリクエスト

|method|url|type|key|value|
|------|---|----|---|-----|
|POST|http://hogehoge/registUser|-|-|-|
|||Path|1|registUser|
|||Header|Host|hogehoge|
|||Cookie|_session|hoge|
|||Body|name|hoge|
|||Body|name|hoge@hoge|

## POSTリクエスト(JSON形式の場合)

|method|url|type|key|value|
|------|---|----|---|-----|
|POST|http://hogehoge/registUser|-|-|-|
|||Path|1|registUser|
|||Header|Host|hogehoge|
|||Cookie|_session|hoge|
|||Body|jsonData[name]|hoge|
|||Body|jsonData[mail]|hoge@hoge|

# 仕様

コピー形式について

- method（タブ）url（タブ）種別（タブ）key（タブ）value
- 種別は下記5種類になります。
  - Path
  - Header
  - URL
  - Cookie
  - Body
- JSON形式のデータの場合、keyはjsonDataという連想配列で保持しています
- 可能な限りExcelで俯瞰できるようにしたいため、valueが null or バイナリ形式 の場合、下記文字列に変換しています。
  - (null)
  - (binary)

# 補足

不具合あればコメントで教えていただけると助かります！

また、拡張機能の開発にあたり、たくさんのサイトを参考にさせていただきました。
何か問題等ありましたら教えていただけますと幸いです。

# 参考リンク

- [Burp Suite Extensibility](https://portswigger.net/burp/extender/)
- [Burp Suite拡張を作ろう | MBSD Blog](https://www.mbsd.jp/blog/20160914.html)
- [CyberDefenseInstitute/burp-req-cp: copies more http request's informations into clipboard](https://github.com/CyberDefenseInstitute/burp-req-cp)
- [暇人の備忘録: Burp Suite Extender ParameterGetter](http://basue.blogspot.jp/2015/04/burp-suite-extender-parametergetter.html)
  - https://github.com/toukato/ParameterGetter
- [Burp Extension JSON Prettyの公開 - DARK MATTER](http://io.cyberdefense.jp/entry/2016/09/23/Burp_Extension_JSON_Pretty%E3%81%AE%E5%85%AC%E9%96%8B)
- [Burp Extension開発 - MessagePack - DARK MATTER](http://io.cyberdefense.jp/entry/2016/05/13/Burp_Extension%E9%96%8B%E7%99%BA_-_MessagePack)
- [Burp suiteのリクエスト/レスポンス文字化け対策(試作) - 生存報告](http://tosebro.hatenablog.com/entry/2014/06/30/072208)
- [Javaでクリップボードにコピーをしてみた。 - Qiita](http://qiita.com/proelbtn/items/d6dbbffb8452d7e151c0)