
Extension adds a new tab in Burp Suite called Extractor
GoogleのGSONライブラリをMavenからダウンロードします。
(http://central.maven.org/maven2/com/google/code/gson/gson/2.8.2/gson-2.8.2.jar)
wget http://central.maven.org/maven2/com/google/code/gson/gson/2.8.2/gson-2.8.2.jar
Burpの Extender/Options/Java Environment で、GoogleのGSONライブラリをダウンロードしたフォルダを選択します。
Burpの Extender/Extensions タブから拡張機能を追加します。(拡張機能はリポジトリの dist フォルダ内のjarファイルです)。
リポジトリをクローンします。
Burpのタブ Extender/APIs に移動し、Save interface files ボタンをクリックして、Burpのインターフェースファイルを新しいフォルダに保存します。次に、これらのファイルをクローンしたリポジトリの src/burp ディレクトリにコピーします。
GoogleのGSONライブラリをMavenからダウンロードします。
(http://central.maven.org/maven2/com/google/code/gson/gson/2.8.2/gson-2.8.2.jar)
wget http://central.maven.org/maven2/com/google/code/gson/gson/2.8.2/gson-2.8.2.jar
extractorディレクトリから:
4. mkdir build
5. javac -cp gson-2.8.2.jar -d build src/burp/*.java
6. jar cf extractor.jar -C build burp
次に、BurpのExtenderタブでextractor.jarファイルを読み込みます。(また、GSONライブラリを保存したフォルダにBurpのパスを設定する必要があります: Burp Extender > Options > Java Environment)
Burpに Extractor という新しいタブが追加されます。

この拡張機能は、Burp Suiteに Extractor という新しいタブを追加します。
このタブ内では、リクエストまたはレスポンス内のデータがどのようなものかを表すツリーにノードを追加できます。ツリーの各リーフは、クエリまたはレスポンスが表示されるすべての場所に新しいタブを作成し、特定のリーフまでのすべての親ノードに従ってクエリデータを変換したものを表示します。
例えば、リクエストのボディが、Base64でエンコードされた文字列を含む特定のタグを持つXMLペイロードである場合、ツリーは次のようになります:

上記の設定により、すべてのリクエストとレスポンスには Body>XML:tag_name>Base64 という名前のタブが含まれるようになり、そのタブにはリクエストのボディのXMLタグ tag_name に含まれるBase64デコード済みデータが表示されます。そのタブのデータを変更すると、データがBase64エンコードされ、リクエストのボディの同じXMLタグに再び注入されます(これにより、Proxy/Interceptでリクエストをインターセプトしながら変更したり、Repeaterでペイロードを作成したりできます)。
パラメータなし。
このノードは、渡されたデータをBase64デコードし、そのノードまたはその子ノードのいずれかでデータを変更すると、チェーンに沿って再エンコードします。
パラメータなし。
このノードは、渡されたデータに対して基本的なURLデコードを行います。このノードまたはその子ノード内で変更されたデータは、チェーンに沿って再エンコードされると、無効なURL文字のみが再エンコードされるため、見た目が異なる可能性があることに注意してください。
パラメータなし。
このノードは、渡されたデータをGZip解凍し、自身またはその子のいずれかが変更された場合にGZipで圧縮し直します。
パラメータなし。
このノードは、渡されたデータをバイナリから16進数文字列に変換します。自身のデータまたは子ノードのデータが変更された場合、16進数文字列からバイナリに変換し直します。
パラメータなし。
このノードは、渡されたデータを16進数文字列からバイナリに変換します。自身のデータまたは子ノードのデータが変更された場合、バイナリから16進数文字列に変換し直します。
パラメータ1つ:
このノードは、x-www-form-urlencoded タイプの1つのURLパラメータノードからデータを抽出します。リクエストのURLからURLパラメータを抽出するための Header の子ノードとして直接使用できるほか、ボディがURLスタイルのパラメータのみを含む場合は body の子ノードとして、あるいはURLまたは x-www-form-urlencoded パラメータを含む任意の他のノードの子として使用できます。変更されたデータは、同じ位置のパラメータに再び注入されます。
パラメータ2つ:
このノードは、multipart/form-data タイプのボディパラメータを抽出するために使用されます。変更されたデータは、同じ場所のパラメータに再び注入されます。
パラメータ1つ:
このノードは1つのクッキーからデータを抽出します。変更されたデータはクッキーに再び注入されます。このノードは Header ノードの直接の子として使用する必要があります。
パラメータ1つ:
このノードは1つのヘッダーフラグの内容を抽出します。変更されたデータはフラグに再び注入されます。このノードは Header ノードの直接の子として使用する必要があります。
パラメータ1つ:
このノードは、XMLノード名パラメータに一致する最初のXMLノードから値を抽出します。変更されたデータは、同じノードの値に再び注入されます。
パラメータ2つ:
このノードは、XMLノード名に一致する最初のXMLノードからパラメータ値を抽出します。変更されたデータは、同じノードのパラメータに再び注入されます。
パラメータ2つ:
このノードはJSONペイロードからデータを抽出します。渡されたペイロードのトップレベルのデータのみを抽出できます。ただし、このノードを他のJsonノードとチェーンして、JSONオブジェクト内に埋め込まれたJSONオブジェクトを抽出できます。
パラメータ1つ:
このノードは、渡されたデータとそのパラメータのデータとのAND演算を行います。ノードに渡すデータはバイナリ形式である必要があります(必要に応じて最初にHextoBinノードを使用してください)。変更されたデータはAND演算で戻されますが、AND演算子は全単射ではないため、この操作にはほとんど価値がないことに注意してください(注入し直したデータがそのコンテキストで意味を成すことは期待できません)。
パラメータ1つ:
このノードは、渡されたデータとそのパラメータのデータとのOR演算を行います。ノードに渡すデータはバイナリ形式である必要があります(必要に応じて最初にHextoBinノードを使用してください)。変更されたデータはOR演算で戻されますが、OR演算子は全単射ではないため、この操作にはほとんど価値がないことに注意してください(注入し直したデータがそのコンテキストで意味を成すことは期待できません)。
パラメータ1つ:
このノードは、渡されたデータとそのパラメータのデータとのXOR演算を行います。ノードに渡すデータはバイナリ形式である必要があります(必要に応じて最初にHextoBinノードを使用してください)。変更されたデータはXOR演算で戻されます。
パラメータなし
このノードは何も処理しません: 渡されたデータを表示するだけです。これは主に、ノードが挿入された特定のポイントで、ノードのチェーンに沿って渡されたデータが正しいかどうかを確認するためのコントロールポイントを追加するのに役立ちます。
パラメータ1つ:
このノードは、正規表現にコンテンツを渡し、サブマッチのみを抽出します。他のノードに渡す前にノードを準備するのに役立ちます。
サンプル ==> Callback\\((.*)\\)
Javaで独自のノードを作成することもできます。コード内にQueryNodeXXX.javaという名前のサンプルノードファイルが用意されているので、コピー&ペーストして名前を変更し、ファイル内の指示に従ってください。また、新しく作成したノードをGlobals.javaのリストの末尾近くに追加することを忘れないでください(何も壊したくない場合は、そのリストの最初の2行は変更しないでください)。