脆弱性診断で使用しているBurp Suiteの拡張機能の作り方を簡単にメモしたいと思います。
環境構築
Pythonで拡張機能を使用するには、Javaで実装されたスクリプト言語のJythonをBurpに設定する必要があります。
- 公式サイトからJython Standaloneをダウンロードします
- Burpの Extender > Options > Python Environment を表示します
- Location of Jython standalone jar file にダウンロードしたJythonのjarファイルのパスを指定します
これでPythonで書かれた拡張機能を使用できるようになります。
作り方
Burp拡張機能のサンプルは Burp Suite Extensibility で公開されています。
後は Burp Extender API も見ながら書いていきます。Burp Extender API の日本語訳されたページもあります!
- BurpExtenderというclassをこねこねしていきます
- registerExtenderCallbacksメソッドに拡張機能で使用する機能などを登録します
- 例としてProxyのリクエストやレスポンスを通知するProxyListenerを登録します
- processProxyMessageメソッドで、Proxyのリクエスト時の処理などを記述する
from burp import IBurpExtender
from burp import IBurpExtenderCallbacks
from burp import IProxyListener
class BurpExtender(IBurpExtender, IProxyListener):
def registerExtenderCallbacks(self, callbacks):
callbacks.registerProxyListener(self)
...
def processProxyMessage(self, messageIsRequest, message):
# リクエストのみ処理する
if not messageIsRequest:
return
... 何かしらの処理 ...
IProxyListener以外にも下記のリスナーも用意されています (一部抜粋)
- IHttpListener
- Burpが作成したリクエストやレスポンスがリスナーに通知
- IScannerListener
- Scannerツールが報告する問題を通知
UIの作成
APIにあるITabを使用することで簡単にカスタムタブをBurpに追加することが可能です。
- registerExtenderCallbacksメソッドでカスタムタブを追加します
- getTabCaptionでカスタムタブのタブタイトルを設定します
- getUiComponentでカスタムタブに表示されるコンテンツを返します
from burp import IBurpExtender
from burp import IBurpExtenderCallbacks
from javax.swing import JPanel
class BurpExtender(IBurpExtender, ITab):
TAB_NAME = "Test tab"
def __init__(self):
self._main_panel = JPanel()
...
def registerExtenderCallbacks(self, callbacks):
callbacks.addSuiteTab(self)
...
def getTabCaption(self):
return self.TAB_NAME
def getUiComponent(self):
return self._main_panel
コンポーネントにはJava SwingやJavaFxなどが使用できるため、検索すると沢山の情報を得ることができます。
カスタムUIには、ITab以外にも下記が用意されています(一部抜粋)
- IContextMenuFactory
- IContextMenuInvocation
- カスタムメニューの追加 (Burpの右クリックで表示されるメニュー)
- IMessageEditorTab
- IMessageEditorTabFactory
- HTTPメッセージエディタにカスタムタブの追加
拡張機能の読み込み
- Burpの Extender > Extensions > Burp Extensions を表示します
- Addボタンをクリック、Extension Details > Extension type で Python を選択
- Extension file の Select files で作成した .py を選択
- Nextボタンをクリックし、Errorに何も表示されない場合は読み込み成功
最後に
BurpのUIで日本語が使いたい...。 Javaで作ればできる
作成中の拡張機能が完成したら紹介したい。