一、前言

  1. burp官方支持三种语言开发插件:Java、Python、Ruby。但一般情况下推荐使用Java来做插件开发。原因有以下两点:

    1. 当用python去做插件的时候,如果需要使用到某个库,而这个库又是用C语言实现的。那么插件将无法正常运行。因为burp在执行python写的插件的时候,是通过Jython(Jython是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语言在Java中的完全实现。)去解析执行的。而Jython是无法使用C写的模块,所以在这时候插件就不能正常运行。
    2. burp本身是Java写的,使用Java去开发插件兼容性最高,会少很多莫名其妙的错误。而且当使用Java的时候,可以很方便的和ide进行远程调试。而在使用python写插件进行调试时,只能尽量通过输出去获取信息,没有好的办法进行下断点的动态调试

所以说Java是写插件的最优选择

  1. 回调的概念
    我们所写的插件,都是被burp所调用的,实质上就是个回调

Alt text

二、入门准备

  1. 在本文中是使用java来进行开发,所以主要讲一下java中的调试方法。其他语言就多写点print就可以了。
  2. 由于国内大多数是用的破解版burp,所以在调试方法的准备上稍微需要一点改变。一般情况下破解版burp有使用helper的,有使用keygen的。而如果想要进入调试状态,则需要使用kygen。在我的调试环境下,有如下两个文件

    1. burp-loader-keygen.jar
    2. burpsuite_pro_v1.7.31.jar

用如下命令启动burp并让它处于调试的监听方:java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Xbootclasspath/p:burp-loader-keygen.jar -jar burpsuite_pro_v1.7.31.jar这个命令和调试正版burp的区别在于,这个命令需要加-Xbootclasspath/p:burp-loader-keygen.jar这一段。
可以将这条指令保存为bat文件,方便一键启动。

  1. 另一边就是IDE的配置了,以idea为例(注意jdk环境不能太高,否则你打包的jar包burp不能正常加载,推荐使用jdk1.8)
    Alt text

如上debug模式的burp和IDEA都配置好后,就可以进行下断点调试了。需要注意的是,需要保持IDEA中的代码和你打包的插件的代码一致。

  1. 顺便在这里再码一篇写的很棒的文章 https://blog.netspi.com/debugging-burp-extensions/
    还有,官方资料都是最好的资料 https://portswigger.net/burp/extender#SampleExtensions

三、Hello World

  1. 首先我们创建一个IDEA工程文件,并且创建一个名叫burp的包。然后启动之前准备好的bat文件。并将burp里面的API接口文件导出到IDEA的burp包里面。再之后,新建一个class文件,名字为BurpExtender。然后写入以下代码。
    Alt text

Alt text

package burp;

import java.io.PrintWriter;

public class BurpExtender implements IBurpExtender{
    //
    // implements IBurpExtender
    //

    @Override
    public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks) {
        // set our extension name
        callbacks.setExtensionName("Hello world extension");

        // obtain our output and error streams
        PrintWriter stdout = new PrintWriter(callbacks.getStdout(), true);
        PrintWriter stderr = new PrintWriter(callbacks.getStderr(), true);

        // write a message to our output stream
        stdout.println("This is output");

        // write a message to our error stream
        stderr.println("This is errors");

        // write a message to the Burp alerts tab
        callbacks.issueAlert("Hello alerts");

        // throw an exception that will appear in our error stream
        throw new RuntimeException("Hello exception");
    }
}

将项目打包为jar包然后从burp导入jar包
Alt text
Alt text
Alt text
Alt text
Alt text
Alt text

最后成功输出结果
Alt text

Last modification:January 1st, 2020 at 10:14 pm
给肥宅一点零花钱买可乐叭 (゜-゜)つロ