18
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

シーエー・アドバンスAdvent Calendar 2021

Day 11

PythonでBurp Suite拡張機能の作り方

Last updated at Posted at 2021-12-10

脆弱性診断で使用しているBurp Suiteの拡張機能の作り方を簡単にメモしたいと思います。

環境構築

Pythonで拡張機能を使用するには、Javaで実装されたスクリプト言語のJythonをBurpに設定する必要があります。

  1. 公式サイトからJython Standaloneをダウンロードします
  2. Burpの Extender > Options > Python Environment を表示します
  3. Location of Jython standalone jar file にダウンロードしたJythonのjarファイルのパスを指定します

これでPythonで書かれた拡張機能を使用できるようになります。

作り方

Burp拡張機能のサンプルは Burp Suite Extensibility で公開されています。
後は Burp Extender API も見ながら書いていきます。Burp Extender API の日本語訳されたページもあります!

  1. BurpExtenderというclassをこねこねしていきます
  2. registerExtenderCallbacksメソッドに拡張機能で使用する機能などを登録します
  3. 例としてProxyのリクエストやレスポンスを通知するProxyListenerを登録します
  4. 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に追加することが可能です。

  1. registerExtenderCallbacksメソッドでカスタムタブを追加します
  2. getTabCaptionでカスタムタブのタブタイトルを設定します
  3. 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メッセージエディタにカスタムタブの追加

拡張機能の読み込み

  1. Burpの Extender > Extensions > Burp Extensions を表示します
  2. Addボタンをクリック、Extension Details > Extension type で Python を選択
  3. Extension file の Select files で作成した .py を選択
  4. Nextボタンをクリックし、Errorに何も表示されない場合は読み込み成功

最後に

BurpのUIで日本語が使いたい...。 Javaで作ればできる
作成中の拡張機能が完成したら紹介したい。

18
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?