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

Errors

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'
開発が捗りますね。