どーも、ばぁどです。 BurpSuiteの拡張機能をPythonで書いてみました。
なぜやろうと思ったのか
BurpSuiteと仲良くなりたかったのことをよく知りたかったからです。
脆弱性診断にジョブチェンしてBurpSuiteというローカルプロキシツールに出会いました。 今までWebアプリケーション開発を生業にしていた筆者からしたら、あまり絡むことのなかったツールであり、要領を掴むのが大変でした。 とある日、会社のメンバーがPythonでButpSuiteの拡張機能を書いていることを知り、プログラマとしての経験を活かしながらBurpSuiteを知ることができると思い、拡張機能を書いてみた次第です。
実行結果
下図のように、BurpSuiteを中継してサーバーに飛ぶリクエストにオリジナルのヘッダーをつけることができます。
下記のオリジナルのヘッダーが付与されていることがわかりますか?(赤枠部分)
X-Original-Header: UltraBird
リクエストにオリジナルヘッダーが付くイメージは下記のようなイメージです。 今回のオリジナルヘッダーを確認するためには、BurpSuiteを二つ立ち上げる必要があります。
このサンプルを拡張機能として作ったからといって、何ができるかというと、別に何も影響はないのですが苦笑。今回のサンプルを用いながら、今後診断業務が便利になるコードを書いていきたい。
書いたコード
from burp import IBurpExtender from burp import IHttpListener class BurpExtender(IBurpExtender, IHttpListener): def __init__(self): self.new_header = "X-Original-Header: UltraBird" def registerExtenderCallbacks(self, callbacks): self._callbacks = callbacks self._helpers = callbacks.getHelpers() callbacks.setExtensionName("My Original Extension") callbacks.registerHttpListener(self) return def processHttpMessage(self, tool_flag, is_message_request, current_request): if not is_message_request: return request_info = self.get_request_info(current_request) header_list = self.get_header_from_current_request(request_info) body_info = self.get_body_from_current_request(current_request, request_info) new_request = self.create_new_request(header_list, body_info) current_request.setRequest(new_request) return def get_request_info(self, current_request): return self._helpers.analyzeRequest(current_request) def get_header_from_current_request(self, request_info): return list(request_info.getHeaders()) def get_body_from_current_request(self, current_request, request_info): body_bytes = current_request.getRequest()[request_info.getBodyOffset():] return self._helpers.bytesToString(body_bytes) def create_new_request(self, header_list, body_info): header_list.append(self.new_header) return self._helpers.buildHttpMessage(header_list, body_info)
コードはBurpSuiteの公式リファレンスを参考にしつつ、インターネット上のものを参考にしながら作成させていただきました。 ユニットテストもそのうち追加したい。
備忘録:BurpSuiteでPythonの拡張コードを読み込ませる方法
BurpSuiteは基本的にJavaで動いています。 BurpSuiteを動かすときにjarを利用することがあれば、拡張機能も大部分がjarで配布されており、jarファイルを読み込むことで拡張機能を使用することができます。
今回はPythonで拡張機能を書いたため、BurpSuiteでPythonを読み込めるようにする必要があります。
手順1. Jython ファイルを入手する
最初にJavaで動いているBurpSuiteにPythonを読み込ませるためのjarファイルをjythonの公式サイトから用意します。
[Extender]→[Options]→[Python Environment]→[select File...]から、ダウンロードしたjarファイルを読み込ませます。
対象ファイルを選択して[Open]をクリックするとjarファイルが読み込まれます。
手順2. Pyhonを読み込む拡張機能を追加する
Python Scripter という拡張機能を読み込ませます。
[Extender]→[B App Store] →(検索ボックスで)[python scripter]と検索し、インストール。
手順3. 作成したPythonコードを拡張機能として読み込ませる
[Extender]→[Extentions]→[Add]
[Java]を[Python]に変更し、[Select file...]をクリック。
作成したPython ファイルを選択する。
手順4. 読み込まれたことを確認して終了
もしPythonコードにエラーがあれば、この時点でエラーだとわかります。
エラーが出なければ完了です。お疲れ様でした。
まとめ
まだBurpSuiteを触りきれていないので、どういったツール、拡張機能があれば便利なのかはわかっていないです。しかし今後脆弱性診断を続けて行くにつれて、そういった視野が開けて行くことに期待しております。