重构sqlmap4burp插件

其实联动sqlmap与burp的插件挺多的,有gson,CO2,sqli-py等等。但我独爱sqlmap4burp,因为它使用超简单。原来在Windows下体验还是很ok的,自从换上mac之后就不好使了。

sqlmap4burp项目作者已经很久没有维护了,于是打算对其进行重构。新插件就叫sqlmap4burp++,表示感谢原作者的思路。sqlmap4burp++兼容更多操作系统操作更加简单界面更加简洁

0x01 重构之路

下面简单记录下重构做的一些小工作。

1.1 去除多余依赖

原插件依赖commons-io-<version>.jar,commons-langs-<version>.jar这两个jar。但查看代码只是为了可以使用FileUtils.writeByteArrayToFile()StringUtils.isNoneBlank()两个方法。sqlmap4burp++使用原生Java代码实现,让插件更轻量易编译。

1.2 去除JTab控件

现在的Burp插件很丰富,Burp suite JTab控件太多界面会显得特别臃肿。

sqlmap4burp的JTab控件

考虑了下该插件并非特别需要JTab面板来添加sqlmap的配置命令,于是去除JTab控件该换成如下的弹窗。

sqlmap4burp++的弹框控件

1.3 多系统支持

插件会自动将Burp的request数据包保存为xxx.req到java临时目录,而多系统支持无非就是在目标系统下,能弹出命令行窗口并执行我们的sqlmap -r xxx.req命令,但各个系统实现的方式都有所不同!

1.3.1 Windows

Windows实现比较简单,只需要将sqlmap命令保存为bat脚本(sqlmap4burp.bat),然后执行以下命令:

1
cmd.exe /c start sqlmap4burp.bat

实现代码如下:

1
2
3
4
5
6
7
8
String command = "sqlmap.py -r xxxxx.req";
List<String> cmds = new ArrayList();
cmds.add("cmd.exe");
cmds.add("/c");
cmds.add("start");
String batFilePath = Util.makeBatFile("sqlmap4burp.bat",command); //生成bat文件
cmds.add(batFilePath);
new ProcessBuilder(cmds).start();

1.3.2 Mac OS X

Mac下我们可以编写如下osascript脚本来调用Terminal并让它执行sqlmap命令。

1
2
3
4
tell application "Terminal"
activate
do script "sqlmpa.py -r xxx.req"
end tell

实现代码如下:

1
2
3
4
5
6
7
8
9
10
String command = "sqlmap.py -r xxxxx.req";
List<String> cmds = new ArrayList();
cmds.add("osascript");
cmds.add("-e");
String cmd = "tell application \"Terminal\" \n" +
" activate\n" +
" do script \"%s\"\n" +
"end tell";
cmds.add(String.format(cmd,command));
new ProcessBuilder(cmds).start();

这里需要注意两点:

  • 第一次运行,mac会提示是否允许外部程序执行osscript,记得允许!
  • 有时莫名其妙调用osascript不成功,我们需要确保Terminal是运行状态,如果已经是运行状态,可以重启下。

1.3.3 Linux

Linux下想实现弹出命令行窗口同时执行命令,我尝试了很多方法,但是都没有成功的。比较接近想要效果的方法是先将sqlmap命令写到shell脚本中(sqlmap4burp.sh)。然后执行如下命令来运行sqlmap4burp.sh

1
gnome-terminal -t "sqlmap4burp" -x bash -c "sh ./tmp/sqlmap4burp.sh;exec bash;"

但使用代码去执行的时候并没有弹出Terminal。大家如果有解决方法,可以Fork sqlmap4burp++项目贡献代码,或者发送想法到我的邮箱root#gv7.me。

目前采用临时的方法:先弹出Terminal窗口,然后将生成好的sqlmap命令复制剪贴板,最后手工在弹出的窗口中粘贴并执行。

1
2
3
4
5
6
7
String command = "sqlmap.py -r xxxxx.req";
List<String> cmds = new ArrayList();
cmds.add("/bin/sh");
cmds.add("-c");
cmds.add("gnome-terminal");
Util.setSysClipboardText(command); //sqlmap命令到剪贴板
new ProcessBuilder(cmds).start();

完整代码请移步项目地址:https://github.com/c0ny1/sqlmap4burp-plus-plus

0x02 插件演示

插件已经在如下系统测试成功:

  • Windows:7,10
  • Mac OSX:Mojave 10.14.5
  • Linux:Kali2019.2

请FQ观看演示,或者直接访问:https://www.youtube.com/watch?v=1RWVkztssvw

0x03 参考项目