BurpSuite插件开发注意事项
0x1. Base64的坑
在JDK8版本里面,Java自带的java.util.Base64
是根据RFC4648和RFC2045实现的,但是JDK7里面的sun.misc.BASE64Encoder
,是RFC1521实现的。
这会导致java.util.Base64
解码JDK7版本的Base64发生错误:Illegal base64 character
。
可以使用shiro的Base64解决,增加maven依赖:
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.6.0</version>
</dependency>
PS: chybeta师傅在漏洞百出里面提出过,Shiro在Base64解码的时候会丢弃非Base64字符串,所以可以利用这一点绕过WAF防火墙,比如填充垃圾字符串。
0x2. RSA公私钥
Python加解密的时候,使用的是PKCS#1格式的公私钥:
# 公钥
-----BEGIN RSA PUBLIC KEY-----
-----END RSA PUBLIC KEY-----
# 私钥
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
但是在Java里面需要使用PKCS#8格式:
# 公钥
-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----
# 私钥
-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----
PKCS#1私钥转换为PKCS#8格式: openssl pkcs8 -topk8 -inform PEM -in rsa_private.pem -outform pem -nocrypt -out pkcs8.pem
RSA根据PKCS#8私钥生成公钥: openssl rsa -in pkcs8.pem -out rsa_public.pem -pubout
0x3. 插件打包
在插件开发完成之后,如果依赖有第三方的Jar包,需要把第三方的依赖也打包进去,修改pom.xml文件的build模块,加入maven的插件配置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>burp.BurpExtender</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
然后打包插件:
mvn clean
mvn clean compile assembly:single
0x4. 插件调试
在开发插件的时候,如果需要对插件实时调试,可以选择先在官网下载安装社区版本的BurpSuite,然后启动Burpsuite:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar burpsuite_community.jar
然后新增远程调试: