メモと備忘録

メモや備忘録を残します

BurpSuiteのExtenderを開発してみる【メソッドの取得】

BurpSuite Extenderで、
どんな事が出来そうかを探っていきたいと思います。


動作的には
 「GETメソッドの場合は赤く表示する」
 「POSTメソッドの場合は青く表示する」
 「リクエストの場合はメソッドを取得する」
 「レスポンスの場合はステータスコードを取得する」
という感じのものを目指します。

package burp;

import java.io.PrintWriter;

public class BurpExtender implements IBurpExtender, IHttpListener,
        IProxyListener
{
    private IBurpExtenderCallbacks callbacks;
    private IExtensionHelpers helpers;
    private PrintWriter stdout;
    private final String EXTENDER_NAME = "Test Extender";

    //
    // implement IBurpExtender
    //

    @Override
    public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks)
    {
        this.callbacks = callbacks;
        helpers = callbacks.getHelpers();

        // set our extension name
        callbacks.setExtensionName(EXTENDER_NAME);

        // obtain our output stream
        stdout = new PrintWriter(callbacks.getStdout(), true);

        // register ourselves as an HTTP listener
        callbacks.registerHttpListener(this);

        // register ourselves as a Proxy listener
        callbacks.registerProxyListener(this);

    }

    //
    // implement IHttpListener
    //

    @Override
    public void processHttpMessage(int toolFlag, boolean messageIsRequest, IHttpRequestResponse messageInfo)
    {
    	if(messageIsRequest) {
    		IRequestInfo requestInfo = helpers.analyzeRequest(messageInfo);
            stdout.println("Request Method : " + requestInfo.getMethod());
    	}else {
    		byte[] response = messageInfo.getResponse();
    		IResponseInfo responseInfo= helpers.analyzeResponse(response);
            stdout.println("Response Status : " + responseInfo.getStatusCode());
    	}
    }

    //
    // implement IProxyListener
    //

    @Override
    public void processProxyMessage(boolean messageIsRequest, IInterceptedProxyMessage message)
    {
    	if(messageIsRequest) {
    		IRequestInfo requestInfo = helpers.analyzeRequest(message.getMessageInfo());
    		String method = requestInfo.getMethod();

    		if(method.equals("GET")) {
        		message.getMessageInfo().setHighlight("blue");
    		}else if(method.equals("POST")) {
        		message.getMessageInfo().setHighlight("red");
    		}

            //	red, orange, yellow, green, cyan, blue, pink, magenta, gray

    	}else {

    	}
    }

}


f:id:usagigozen:20190203173926p:plain
GETは青色で、POSTは赤色にする


f:id:usagigozen:20190203174037p:plain
リクエストはメソッド、レスポンスはステータスコードを取得する


期待通りの結果です。

processHttpMessage(int toolFlag, boolean messageIsRequest, IHttpRequestResponse messageInfo);
This method is invoked when an HTTP request is about to be issued, and when an HTTP response has been received.

processProxyMessage(boolean messageIsRequest, IInterceptedProxyMessage message);
This method is invoked when an HTTP message is being processed by the Proxy.

BurpSuiteのエディタに反映させたい場合は、processProxyMessageメソッド内で処理をする必要があるのかな。
使える色は「red, orange, yellow, green, cyan, blue, pink, magenta, gray」の9色っぽいです。


とりあえず以上です。


体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践 [ 徳丸 浩 ]

価格:3,520円
(2020/2/20 23:33時点)


基礎からのWebアプリケーション開発入門 Webサーバを作りながら学ぶ (Software Design plusシリーズ) [ 前橋和弥 ]

価格:2,948円
(2020/2/20 23:42時点)