11
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Day 1

Protocol Buffers用のBurp Suite拡張機能

Last updated at Posted at 2024-11-30

はじめに

Protocol Buffers (以下、Protobuf) を使った通信の脆弱性診断って大変ですよね。
なので Burp Suite (以下、Burp) で診断を行う際に Json で送信すると Protobuf メッセージに変更する拡張機能を作成しました。

Protobuf を扱うための拡張機能は他にもありますが、よければ使ってみてください!

作成した拡張機能

こちらです。

リリース から jar ファイルをダウンロードして、Burp の Extensions からインストールしてください。

機能

  • Handler
    • Burp の Proxy、Repeater、Intruder、Scanner、Extensions を通過するリクエスト、レスポンスに対して、Json から Protobuf メッセージへの変換を行います
  • Editor
    • Burp のメッセージエディターに Protobuf メッセージを Json フォーマットに変換するタブを表示します
    • エディター上の Json を変更して送信すると、 Protobuf メッセージに変換され送信されます

動作確認環境

  • macOS Sonoma
  • Burp Suite Professional v2024.9.5
  • OpenJDK 21.0.5

事前準備

  1. Protocol Buffer Compiler Installation を参考に適宜 protoc コマンドをインストールしてください。
  2. 拡張機能で読み込むための Descriptor ファイルを作成します
$ cd protobufHandler/example/proto
$ protoc --descriptor_set_out=./hello.desc *.proto
$ ls
hello.desc  hello.proto user.proto
#  ↑これを作成する

拡張子は必ず .desc としてください。

import ファイルが複数ある場合などは適宜 --proto_path オプションなどを追加してください。

#例
protoc --proto_path=./protobuf/:. --descriptor_set_out=./hello.desc *.proto

Handler の使い方

リクエスト、レスポンスをハンドリングし、Protobuf メッセージに変換する手順を記載します。

Request handling

リクエストボディを Json の状態で送信したときに、Protobuf メッセージに変換する手順を説明します。

  1. 対象のリクエストを Burp の Target Scope に登録します
  2. 対象のリクエストの Body に Json を記述します
    request-handler-json.png
  3. Protobuf Handler のタブを開き、「New」ボタンで新しいルールを追加します
  4. 画面に表示されている項目を入力します
    • Scope: 対象となるリクエストを指定 (正規表現は不可)
    • Protobuf File: descriptor_set_out で出力したファイルを選択
    • Message Type: Protobuf に変換する定義を指定
    • Tool Scope: どのツールから送信されたリクエストを対象とするか指定
    • Handling Scope: Request を選択
    • Comment: 任意。その時の気持ちなど (コメントセルをダブルクリックで編集できます)
  5. 入力後、「Save」ボタンをクリックして保存します
  6. テーブルの「Enable」にチェックを入れ準備は完了です
    request-handler-rule.png
  7. Repeater タブに戻り、2で用意したリクエストを送信します
    request-handler-send.png
  8. Logger を表示すると、Protobuf に変換されていることを確認できます
    request-handler-log.png

補足
ActiveScan++ など拡張機能から送信される Scan リクエストは「Extensions」で送信されます。そのため Scan で使用する場合は、Tool Scope に 「Scan」「Extensions」の2つにチェックを入れることをおすすめします。

Response handling

レスポンスボディを Protobuf メッセージに変換することができます。またオプションでボディを Json に置換し、 Protobuf メッセージに変換することも可能です。

  1. レスポンスを書き換える対象のリクエストを Burp の Target Scope に登録します
  2. 予め書き換え対象のリクエストの通常時のレスポンスを確認します
    response-handler-raw.png
  3. Protobuf Handler のタブを開き、「New」ボタンで新しいルールを追加します
  4. 画面に表示される項目を入力します
    • Scope: 対象となるリクエストを指定 (このリクエストのレスポンスを書き換える)
    • Protobuf File: descriptor_set_out で出力したファイルを選択
    • Messsage Type: Protobuf に変換する定義を指定
    • Tool Scope: どのツールのレスポンスを対象とするか指定
    • Handling Scope: Response を選択
    • (Optional) Replaced Response Body: ボディの中身を固定にする場合に指定
    • Comment: 任意。気分 (コメントセルをダブルクリックで編集できます)
  5. 入力後、「Save」ボタンをクリックして保存します
  6. テーブルの「Enable」にチェックを入れ準備は完了です
    response-handler-rule.png
  7. Repeater タブに戻り、リクエストを送信します
  8. レスポンスの中身が書き換わっていることを確認できます
    response-handler-send.png
  9. また Logger でも書き換わっていることを確認できます
    response-handler-log.png

Editor の使い方

Repeater で Protobuf メッセージを Json に変換する方法、変換後の Json を編集して Protobuf メッセージで送信する手順を記載します。

  1. Repeater タブに対象のリクエストを送信する
  2. サポートしている Content-Type の時、「Protobuf to Json Decode」タブが表示されます
  3. Protobuf to Json Decode タブを選択すると Raw フォーマットで表示されます
    editor-raw.png
  4. 「Choose」ボタンで descriptor_set_out で出力したファイルを選択します
  5. 読み込みに成功すると Message Type が選択できるようになります
    editor-message.png
  6. デコードしたい Message Type を選択し、「Decode」ボタンをクリックしてください
    editor-decode.png
  7. 出力された Json を編集し「Send」をクリックする
    editor-send.png
  8. Logger を表示すると、Protobuf に変換されていることを確認できます
    editor-log.png

サポートしている Content-Type
application/x-protobuf
application/protobuf
application/grpc-web+proto

補足

色々テストできていない部分ありますので、使用は自己責任でお願いします。
不具合あればコメントなどで教えていただけると助かります!

参考記事

11
2
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
11
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?