まったり技術ブログ

Webエンジニアのセキュリティブログ

Burp Suite拡張プラグイン作成入門 その1 - Hello world編

f:id:motikan2010:20180211221846p:plain

はじめに

 Webアプリケーションのセキュリティを診断するツールとして、Burp Suiteが代表の1つとしてあり、拡張プラグインに頼らなくても標準の機能で多種類の診断を行うことができるほど多機能です。

 しかし、Webアプリケーションによっては遷移方法が特殊な場合がありは、拡張プラグインに頼らなくてはいけない場合もあります。 (値が更新されるCSRFトークンが存在する等)

 そこで、Burp Siteでは「BApp Store」に多くの人が開発した、拡張プラグインが公開されています。

拡張プラグインのストア「BApp Store」

 「BApp Store」で公開されている拡張プラグインで事足りるのであれば、独自に拡張プラグインを開発する必要はないと思っています。

portswigger.net

 しかし、公開されている拡張プラグインで対応できない診断対象に対応するためにも、独自に拡張プラグインを作成し、より妥協のないセキュリティ診断を行うためにも拡張プラグインの開発方法を学習していきます。

 ユニークな拡張プラグインを開発を開発できたら、BApp Storeに公開するのもありだと思います。
 良い拡張プラグインを開発する際に気を付ける点は下記のブログにまとめられています。

blog.portswigger.net

 今回は手始めに「Hello, world!」拡張プラグインを開発していきます。
拡張ということもあり、Burp Suiteにメインの処理は任せるようにし、送信するリクエストの加工や受信したレスポンスの検査等を拡張プラグインで行うようになっていくと考えています。

開発環境

 拡張プラグインは Java・Ruby・Python で開発できますが、今回はJavaを用いて開発を行なっていきます。

今回作成するプロジェクトのリポジトリは下記になります。

GitHub - motikan2010/Burp-Suite-Learning-Chapter01: Burp Suite 拡張プラグイン Hello, World!

 私の開発環境は以下のようになっています。

OS macOS 10.12 Sierra
プログラム言語 Java8
ビルドツール Maven
IDE IntelliJ IDEA

実装

1. ディレクトリ構造

 最終的なディレクトリ構造は下記のようになります。

.
├── pom.xml
└── src
    └── main
        └── java
            └── burp
                └── BurpExtender.java

2. Burp拡張ライブラリ(Burp Extender API)の取得

Maven Repository: net.portswigger.burp.extender » burp-extender-api

 Burp Extender API は "Maven Repository" に登録されており、pom.xmlファイルを編集することで導入することができます。

pom.xml の編集

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.motikan2010</groupId>
  <artifactId>burplearning</artifactId>
  <version>1.0-SNAPSHOT</version>

  <dependencies>
    <!-- https://mvnrepository.com/artifact/net.portswigger.burp.extender/burp-extender-api -->
    <dependency>
      <groupId>net.portswigger.burp.extender</groupId>
      <artifactId>burp-extender-api</artifactId>
      <version>1.7.22</version>
    </dependency>
  </dependencies>
</project>

3. Javaファイルの作成

 最初はライブラリ読込み時に実行されるコードを書いていきます。

 Burp拡張プラグインは、Javaでよく見られる mainメソッド から実行ではありません。

 下記の条件に合致するクラスを作成します。

  • パッケージが burp に属している
  • クラス名が BurpExtender
  • インターフェース IBurpExtender を実装

 実行コードは、registerExtenderCallbacksメソッド内に書いていきます。

  • BurpExtender.java
package burp;

import java.io.PrintWriter;

public class BurpExtender implements IBurpExtender {

    public void registerExtenderCallbacks(IBurpExtenderCallbacks iBurpExtenderCallbacks) {
        // ここにコードを書いていく
    }
}

 この記事では下記を学んでいきます。

  • プラグイン名の設定と表示
  • 「Output」タブに標準メッセージの表示
  • 「Error」タブにエラーメッセージの表示、例外メッセージの表示
  • 「アラート」タブにメッセージの表示

4. プラグインに名前を付ける

f:id:motikan2010:20180211204005p:plain

 Name列の値を指定できます。

// 拡張プラグインの命名
iBurpExtenderCallbacks.setExtensionName("Hello, Burp Suite");

5. 「Output」タブに表示

f:id:motikan2010:20180211204024p:plain

// メッセージを表示
PrintWriter stdout = new PrintWriter(iBurpExtenderCallbacks.getStdout(), true);
stdout.println("INFO : Hello, Burp Suite");

6. 「Errors」タブに表示

// エラーメッセージを表示
PrintWriter stderr = new PrintWriter(iBurpExtenderCallbacks.getStderr(), true);
stderr.println("ERROR : Hello, Burp Suite");

7. 例外メッセージを表示

 例外メッセージはエラーと同じタブに表示されるようになっています。
f:id:motikan2010:20180211204047p:plain

throw new RuntimeException("Burp Suite exceptions");

8. 「アラート」タブに表示

f:id:motikan2010:20180211204103p:plain

iBurpExtenderCallbacks.issueAlert("Burp Suite Alerts");

コンパイル から プラグインの読み込み まで

 最終的に完成したコードは下記の通りになります。
このファイルをコンパイル(ビルド)し、Burp Suite で読み込んで実行させます。

  • BurpExtender.java
package burp;

import java.io.PrintWriter;

public class BurpExtender implements IBurpExtender {

    public void registerExtenderCallbacks(IBurpExtenderCallbacks iBurpExtenderCallbacks) {
        iBurpExtenderCallbacks.setExtensionName("Hello, Burp Suite");

        PrintWriter stdout = new PrintWriter(iBurpExtenderCallbacks.getStdout(), true);
        stdout.println("INFO : Hello, Burp Suite");

        PrintWriter stderr = new PrintWriter(iBurpExtenderCallbacks.getStderr(), true);
        stderr.println("ERROR : Hello, Burp Suite");

        iBurpExtenderCallbacks.issueAlert("Burp Suite Alerts");

        throw new RuntimeException("Burp Suite exceptions");
    }
}

プロジェクトの設定

File > Project Structure > Artifacts > From modules with dependencies... f:id:motikan2010:20180211204139p:plain

OK
f:id:motikan2010:20180211204329p:plain

Apply > OK
f:id:motikan2010:20180211204720p:plain

ビルド

Build > Build Artifacts
f:id:motikan2010:20180211204812p:plain

拡張プラグインの読込み

Extender タブ > Extensions タブ > Add ボタン f:id:motikan2010:20180211213544p:plain

Select file ... f:id:motikan2010:20180211213540p:plain

 以上、「Hello, world!」拡張プラグインの作成と実行ができました。

 次回は、Burp Suiteで取得したリクエストとレスポンスのヘッダ・ボディを表示する拡張プラグインを作成していきます。
blog.motikan2010.com

更新履歴

  • 2018年2月11日 新規作成