前言
burp插件以前开始也是从python栈开始,现在从java开始看,从同行优秀的插件开始看,然后理解之后试着自己改进。关于burp插件,学习分为三步。
第一步:环境配置
第二步:看代码
第三步:写代码。
原文件编译
先把编译走一遍,能自己搞出一个jar出来
第一步:导入代码
方法1: open-import 导入代码目录
方法2: 拖入build.gradle即可
第二步:编译成JAR包
output就有jar包了。jar包可以导入burpsuite
所以这里就将改代码-新jar包-新插件使用的过程完成了。
20220820更
好久没来了,找到个更好地打包jar的方法,起因是https://blog.csdn.net/xiru9972/article/details/126440943
这个kotlin打包成jar用上面的路子走不通。最后发现只需要在工程下面./gradlew build
即可。
https://github.com/PortSwigger/log4shell-scanner
代码阅读
编译完成之后就是看代码了
https://github.com/c0ny1/sqlmap4burp-plus-plus
目录结构
首先是burpextender
启动的时候会先调用registerExtenderCallbacks。,类似于php的魔法函数
package burp;
import java.io.PrintWriter;
public class BurpExtender implements IBurpExtender {
public static IExtensionHelpers helpers;
public static IBurpExtenderCallbacks callbacks;
public static PrintWriter stdout;
public static PrintWriter stderr;
@Override
public void registerExtenderCallbacks(final IBurpExtenderCallbacks callbacks) {
this.helpers = callbacks.getHelpers();
this.callbacks = callbacks;
this.stdout = new PrintWriter(callbacks.getStdout(),true);
this.stderr = new PrintWriter(callbacks.getStderr(),true);
callbacks.registerContextMenuFactory(new Menu());
callbacks.setExtensionName(String.format("%s %s",Config.getExtenderName(),Config.getExtenderVersion()));
stdout.println(Util.getBanner());
}
}
然后就是Config模块,主要的功能是配置项的一些默认信息和输入信息的函数。
configDlg和GBC主要是ui设计。
然后就是menu模块,比较重要的一点是将http请求保存在临时文件中存储起来。
sqlmapstarter就是根据不同的操作系统生成指定的命令最后调用就行,看起来很容易理解。
整体结构模块化很清爽,值得学习。
代码仿写
最后一步就是去根据原代码仿写一些插件进行改造。比如dirsearch4burp,尝试加几个函数,思路是只需要获取对应的url即可
在Config增加两个函数
public static void setRequstUrl(String requestUrl)
public static String getRequsturl()
Util增加一个函数
insertFuzzUrl
然后sqlmapstarter调用insertFuzzUrl函数即可,最后就能实现repeat直接扫目录
这里有个问题是dirmap的config文件加载问题,跨目录竟然不行,还得再看看dirmap的源码才能解决。
20210210更
dirmap的config路径解决思路有两个
- 更改config文件路径变为可输入模式
- 写死config路径,本地自己用。
QA速查
错误1 :程序包xxx不存在
如果直接编译会提示两个错误去这里下载两个lib
下载&导入
错误2: classnotfound
20210210更
编译可能会产生classnotfound的一些问题,主要目的在于备忘,主要关注这几个地方
后话
其实有很多好用的脚本都可以集成到burp里面,还得慢慢看,后续会慢慢更新。