まったり技術ブログ

Technology is power.

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

f:id:motikan2010:20180211221846p:plain

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

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

 そこで、Burp Siteでは「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

ディレクトリ構造

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

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

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

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

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>

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」タブにエラーメッセージの表示、例外メッセージの表示
  • 「アラート」タブにメッセージの表示

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

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

f:id:motikan2010:20180211204005p:plain

「Output」タブに表示

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

f:id:motikan2010:20180211204024p:plain

「Errors」タブに表示

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

例外メッセージを表示

throw new RuntimeException("Burp Suite exceptions");

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

「アラート」タブに表示

iBurpExtenderCallbacks.issueAlert("Burp Suite Alerts");

f:id:motikan2010:20180211204103p:plain

コンパイル と 実行

 最終的に完成したコードは下記の通りになります。
このファイルをコンパイル(ビルド)後、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で取得したリクエストとレスポンスのヘッダ・ボディを表示する拡張プラグインを作成していきます。