🍣

Burp Suiteの拡張機能をMontoya APIで書く環境を整える。

2024/08/29に公開

脆弱性診断士の末席をびちゃびちゃに汚しているMariydiです。

Burp Suiteの拡張機能を作る際に初心者故に環境構築に時間がかかったので、記憶を失った僕がもう一度環境構築する際にこの記事を見てすぐに作れるようにする。
Extender APIの記事は良く上がってるけど、Montoya APIの記事はあんまり上がってないのよね。

材料

  • Burp Suite(Community EditonだとProの機能の検証ができないよ!)
  • VSCode
  • Gradle
  • Java (JDKでもJREでも…バージョンは任意のものをどうぞ)
  • Montoya API

インストールインストール!

書いたあとで、いるか?って思った。

Burp Suite

PortSwiggerのリリースページからダウンロード&インストールする。特に言う事無し。

VSCode

VSCodeのリリースページからダウンロード&インストールする。特に言う事無し。

Gradle

Gradleのリリースページからダウンロード&インストールする。特に言う事無し。

Java

OpenJDKとそうじゃないやつの違いがわかってない。
ORACLEとかOpenJDK(リンク先は22)とかそのへんのリリースページから適当にダウンロードしてください。

環境構築

っていっても、Gradleで作ったのをVSCodeで開いて、build.gradleにちょこちょこって書くだけなので分かる人はすぐできそう。Gradleってすごいのね。
なお、VSCodeの拡張機能に関しては割愛する。

Gradle動かそうね。

作業したいディレクトリを切る。

gradle init

を入力して、以下のような形で進めていく。Testツールとかの部分に関しては各々使いやすいものを選んで良いと思う。終わったら、code .とかでVSCodeを開く。

PS E:\tmp> gradle init

Select type of project to generate:
  1: basic
  2: application
  3: library
  4: Gradle plugin
Enter selection (default: basic) [1..4] 2

Select implementation language:
  1: C++
  2: Groovy
  3: Java
  4: Kotlin
  5: Scala
  6: Swift
Enter selection (default: Java) [1..6] 3

Generate multiple subprojects for application? (default: no) [yes, no]
Select build script DSL:
  1: Kotlin
  2: Groovy
Enter selection (default: Kotlin) [1..2] 2

Select test framework:
  1: JUnit 4
  2: TestNG
  3: Spock
  4: JUnit Jupiter
Enter selection (default: JUnit Jupiter) [1..4] 1

Project name (default: tmp):
Enter target version of Java (min. 7) (default: 21):
Generate build using new APIs and behavior (some features may change in the next minor release)? (default: no) [yes, no]


> Task :init
To learn more about Gradle by exploring our Samples at https://docs.gradle.org/8.6/samples/sample_building_java_applications.html

BUILD SUCCESSFUL in 23s
1 actionable task: 1 executed
PS E:\tmp>

./appに、build.gradleファイルがある。Montoya APIをGradleに知ってもらうためにPortSwiggerのこのページのGradleの部分を、dependenciesの中に追記して保存する。

dependencies {
    // Use JUnit test framework.
    testImplementation libs.junit

    // This dependency is used by the application.
    implementation libs.guava
    implementation 'net.portswigger.burp.extensions:montoya-api:+'

}

開発開始!

./app/src/main/java/org/example/App.javaを開く。
class Appの横に implements BurpExtentionを書いてみて、こんな感じでエラーが出た場合はクラスの中身を全部消して(クラスは残すよ。)、クイックフィックスの力を借りる。

最終的にこんな感じになったら、Burp Suiteの拡張機能の卵が完成。

/*
 * This Java source file was generated by the Gradle 'init' task.
 */
package org.example;

import burp.api.montoya.BurpExtension;
import burp.api.montoya.MontoyaApi;

public class App implements BurpExtension{

    @Override
    public void initialize(MontoyaApi api) {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'initialize'");
    }

}

Montoya APIを触る。

Burp Suiteの機能を触るためには、Montoya APIを呼び出す必要がある。
参考にするのは以下の2つ。
公式Montoya APIの使用例がGithubにあがっているので、それでどうやって使用しているかを見ている。有用だなと思ったものは下に記載しているので、参考になれば…。
JavaDocは拡張機能を作る際に自分の欲しい機能を探すために使う。最近こればっかり見てる。

UIは最初ほんとにわからなかったので、EclipseやNetBeansなどのJavaのUIをGUIで作ることができるものをいじってこんな感じだな~っていう感覚を得てから作った。Swingの考え方がわかったら作るのが楽しくなるよ。
(EclipseでもGradle使って色々できるよっていうのは言わないでください。)

ビルドして確認する。

VSCodeのターミナルでgradle buildを打つと、./app/build/libs/app.jarが生成される。
あとはこれをBurp Suite側でExtentionをインポートしたら確認できる。
対象のファイルのファイル名やディレクトリが変わらない限り、Burp Suite側での確認はExtentionのチェックを入れる/外すを行うと結果が反映される。

gradle build -> Burp Suiteでチェックを外してつける。 -> gradle build -> Burp Suiteで確認する。
ができるので、確認作業自体は楽。

終わり。

これを見たら、記憶を失った僕もVSCodeでMontoya APIを使ってBurp SuiteのExtentionを作ることができると思う。
記憶をなくさないに越したことはないけど。

Montoya APIについて詳しく書いたものを、また別の機会に上げようかな。

テストコードを書いたことがない(Gradleのは消した)から、テストコード書きたいんだけど今ひとつピンとこないので誰かいい本とかあったら教えて下さい。

Discussion