Lamber's Blog

BurpSuit 插件开发(一)

字数统计: 889阅读时长: 3 min
2021/08/27

一、前言

  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所调用的,实质上就是个回调

二、入门准备

  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文件,方便一键启动。
3. 另一边就是IDE的配置了,以idea为例(注意jdk环境不能太高,否则你打包的jar包burp不能正常加载,推荐使用jdk1.8)

如上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。然后写入以下代码。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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包

最后成功输出结果

CATALOG
  1. 1. 一、前言
  2. 2. 二、入门准备
  3. 3. 三、Hello World