TORIPIYO DIARY

recent events, IoT, programming, security topics

pythonで開発したburpエクステンションをデバッグする

burpのpythonエクステンションを作成している時に、デバッグをしたかったのでその方法を調べました。How to use pdb to debug Python Burp Extensions の内容を参考にしています。

1. registerExtenderCallbacksメソッド内に、sys.stdout, sys.stderrを追加する
以下のように、registerExtenderCallbacksメソッド内にsys.stdout, sys.stderrを追加します。import sysを忘れないように。

    def registerExtenderCallbacks(self, callbacks):
        # debug purpose
        import sys
        sys.stdout = callbacks.getStdout()
        sys.stderr = callbacks.getStderr()

2. 実行を止めてデバッグしたい箇所に、import pdb; pdb.set_trace()を追加する
下記のように、ソースコードデバッグを実行したい箇所にimport pdb; pdb.set_trace()を追加します。

        # check var1 value
        var1 = issue.getIssueName()

        # stop program here
        import pdb; pdb.set_trace()

3. burpをコマンドラインから起動する
burpをコマンドラインから起動させます。自分の環境では、以下のパスでburpを起動することができます。burpsuite_pro.jarのパスは環境によって異なるかと思います。

java -jar /Applications/Burp\ Suite\ Professional.app/Contents//java/app/burpsuite_pro.jar

4. OutputとErrorsの向き先を"Output to system console"に変更する
開発中のエクステンションを読み込ませて、以下のようにOutputとErrorsの出力の向き先をsystem consoleに変更させます。

Output
f:id:ha107chan:20180707230231p:plain

Errors
f:id:ha107chan:20180707230255p:plain

5. エクステンションを実行してデバッグ開始
これで、デバッグの準備は出来ました。import pdb; pdb.set_trace()の箇所のソースコードが実行されるようにBurpで操作すると、コンソールからデバッグできるようになります。

~/ java -jar /Applications/Burp\ Suite\ Professional.app/Contents//java/app/burpsuite_pro.jar
(Pdb) temp_val = "aaa"
(Pdb) temp_val
'aaa'
(Pdb) import sys
(Pdb) os.name
'java'

開発が捗りますね。