Burp Extension開発 - RESTfulアプリケーション対応

こんにちは。技術部エンジニアの松永です。

Burp Suite Japan(@BurpSuiteJapan)にて告知していました、HTTPリクエストのコピーツールを公開しましたので、簡単に紹介したいと思います。

Burp Extension

以下のGithubリポジトリで公開しています。

https://github.com/CyberDefenseInstitute/burp-req-cp

バイナリ(jarファイル)はこちらからダウンロードしてください。

https://github.com/CyberDefenseInstitute/burp-req-cp/releases

非常にシンプルなツールなので、ソースコードの説明は割愛します。

使い方

任意のリクエストのコンテキストメニューから "Copy Request" をクリックすると、リクエストの以下の情報をTSVでクリップボードにコピーします。
リクエストは複数選択可能です。

  • メソッド
  • オリジン (※ポート番号は省略)
  • パス
  • パラメーター

使いたくなる場面

Burp Suiteには任意のリクエストのコンテキストメニュー ”Copy URL(s)” から対象のURLをクリップボードにコピーする機能があります。
対象のURL一覧や遷移表の作成に "Copy URL(s)" を使用されている方もいらっしゃるかと思います。

例えば以下のリクエストを "Copy URL" した場合は、 http://localhost:3000/dashboard?name=value がクリップボードにコピーされます。

GET /dashboard?name=value HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:46.0) Gecko/20100101 Firefox/46.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ja,en-US;q=0.7,en;q=0.3
Connection: close

リクエストメソッドがGET/POSTのみで、メソッドの違いを意識しないWebアプリケーションの場合、 URLの一覧 ≒ リクエスト一覧 となり特に困らないことが多いと思います。

しかし、RESTfulな設計思想の下で開発されたWebフレームワークの登場により、状況が一変しました(たぶん)。
その代表格であるRuby on Railsの例を見てみると、GET/POST以外にPATCH(PUT)/DELETEメソッドが使用されてされている上に、似たようなパスのリクエストがずらりと並びます。

この状態で URLの一覧 ≒ リクエスト一覧 とすることはできないため、この世に生まれ落ちたのが burp-req-cp です。
以下のようなリクエストを "Copy Request" すると、

PATCH /users/2/messages/5 HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:46.0) Gecko/20100101 Firefox/46.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ja,en-US;q=0.7,en;q=0.3
Content-Type: application/x-www-form-urlencoded
Content-Length: 54

message[title]=test&message[body]=Hello,RESTful%20App.

以下の情報がクリップボードにコピーされます。

[] PATCH	http://localhost	/users/2/messages/5	message[title]=test&message[body]=Hello,RESTful%20App. []

こうして作成した一覧を観察していると、「messagesのDELETEが画面遷移では現れない」といった気づきが得られ、手動でDELETEメソッドのリクエストを作成して送信することで脆弱性が検出されることもあります。
(丁寧な検査ができるマニュアル診断のメリットですね!)

ちなみに Pro版の Burp Suite では "Target Analyzer" 機能を使用することで、以下の一覧を表示することも可能ですが、上記のような用途にはあまり向いていません(一度触ってみて下さい)。

  • ホスト
  • URL
  • メソッド
  • パラメータ数

おわりに

サイバーディフェンス研究所では、モダンなフレームワークで開発されたWebアプリケーションに対する診断手法の確立や効率化を行っています。
今回は小ネタでしたが、次回は脆弱性を解析して診断手法に取り入れる作業についてご紹介したいと思います。

© 2016 - 2024 DARK MATTER / Built with Hugo / Theme Stack designed by Jimmy