
Burp拡張機能の生成について知っておくべきすべて

まず、npm(node.jsが事前にインストールされていることを前提とします)を使用してYeomanとgenerator-burp-extensionをインストールします。
npm install -g yo
npm install -g generator-burp-extension
次に、新しいプロジェクトを生成します。
yo burp-extension
プラグインプロジェクトを生成する際、ジェネレーターはプラグインにどの機能を含めるかを尋ねます。Burp拡張機能の開発に精通している場合は、機能名だけで十分に理解できるでしょう。しかし、Burp拡張機能に不慣れな方のために、各機能で何ができるのかを簡単に説明します。
BurpのUIに追加されるカスタムタブです。通常は、何らかの機能(logger++拡張機能など)を追加したり、ユーザーが拡張機能を設定できるようにするために使用します。

BurpのメッセージエディタUI(リピーター、イントルーダーなど)に追加されるカスタムメッセージエディタタブです。通常は、リクエスト/レスポンスのペイロードに何らかのカスタムエディタ/ビューア機能を提供するために使用します。一例として、JSON Beautifier拡張機能があります。

右クリックによって、BurpのUIのほぼどこにでもカスタムコンテキストメニューが追加されます。Burpでは、以下の状況でコンテキストメニューを表示できます。
この機能の簡単な例として、リクエストをPythonコードとしてコピーできるcopy-as-python-requests拡張機能があります(あくまで一例です)。

リスナーは、プロキシツール(プロキシリスナー)または任意のBurpツール(HTTPリスナー)によって処理されるリクエストとレスポンスの通知を受け取ります。拡張機能は、これらのメッセージに対してカスタム分析や変更を実行できます。
言い換えると、プロキシリスナーはブラウザからBurpへのリクエストと、Burpからブラウザへのレスポンスをインターセプトします。HTTPリスナーはBurpからWebサーバーへの送信リクエストと、Webサーバーからの受信レスポンスをインターセプトします。

この拡張機能の機能を使用した実際のプラグインの例としては、AutoRepeaterがあります。
イントルーダーペイロードを拡張し、カスタム生成機能を追加します。この機能の使用例として、ランダムな有効なIBAN番号を生成することが考えられます。実際の例としては、Intruder file payload generator拡張機能があります(私は使っていませんが、単なる例です)。

イントルーダーペイロードを拡張し、カスタムプロセッサー機能を追加します。例えば、静的キーに基づいたAES暗号化を実行することが考えられます。

スキャン実行時、Burpはチェックに対してベースリクエストに対してアクティブスキャンまたはパッシブスキャンを実行するよう要求し、特定されたスキャナ問題を報告します。
リクエストがアクティブスキャンされる際、スキャナがこれを呼び出し、プロバイダーはスキャンで使用されるカスタム挿入ポイントのリストを提供する必要があります。
登録された各アクションは、セッションハンドリングルールUI内でユーザーがルールアクションとして選択できるようになります。ユーザーはアクションを単独で直接呼び出すか、マクロの実行後に呼び出すかを選択できます。

リスナーは、拡張機能がBurpからアンロードされる際に通知を受け取ります。注意:バックグラウンドスレッドを開始したり、システムリソース(ファイルやデータベース接続など)を開く拡張機能は、リスナーを登録し、拡張機能がアンロードされる際にスレッドを終了/リソースを閉じる必要があります。
リスナーは、スキャナツールによって報告された新しい問題の通知を受け取ります。拡張機能は、スキャナリスナーを登録することで、スキャナ問題のカスタム分析やログ記録を実行できます。
リスナーは、Burpのスイート全体のターゲットスコープに変更が発生するたびに通知を受け取ります。
おそらく、Burpではグローバルスコープの定義にアクセスできないため、役に立たないでしょう。
このセクションでは、テンプレート開発におけるいくつかの決定事項について説明します。
まず、私はJavaのファンではありません。
ご存知かもしれませんが、BurpSuiteでは3つの主要言語(Java、Python、Ruby)で拡張機能を開発できます。実際にはこれは完全に正しいわけではありません。BurpではJythonとJRubyでの開発が可能です。ここで実際の問題は、JythonやJRubyをBurp拡張機能で使用する場合でも、Java(Burpの主要言語であるため)を考慮する必要があることです。結局のところ、PythonとJavaの両方で開発することになりますが、実際のIDE、オートコンプリート、そのようなモダンな機能とプロジェクトを統合する際に多くの問題が発生します。
JavaをJythonではなく使用するもう一つの良い理由は、JythonがPython 2.7に基づいていることです。また、JRubyは好きではないため使用していません。それだけです。
お気づきかもしれませんが、Burpインターフェースのすべての実装はシングルトンパターンに従っています。その主な理由は完全に主観的なものです。
Burpは素晴らしいツールですが、その内部については少し不明瞭で、おそらく少し乱雑です。そのため、例えばBurpでは複数のIHTTPListenerを登録できますが、これらのリスナーの呼び出し順序のような重要な決定を失うことになります。このような状況は、私の謙虚な意見では、Burp拡張機能の理解とコードの保守性を不明瞭にし、困難にする可能性があります。
各シングルトンクラスを、Burpとの必須の接続ポイントと見なすことができます。これは一意でなければなりません。その接続ポイントから、コードを制御し、あらゆる種類のオブジェクト指向設計を実行できます。
MIT © Raul Sampedro