BurpSuite插件开发之过狗菜刀

独家 作者: DarkRay
2016-02-26 12,958

Ps:看群里关于过狗的讨论于是便有了下文。本文目标旨在练习BurpSuite的插件开发

0x01 写在前面

早在之前小伙伴的线下分享中,我便谈过两种改造菜刀的方式,其一是PEDIY,其二是截取封包后再转发。
burp1

对于没有二进制程序开发的同学又想用GUI来装装b的,不妨试试通过Burp来转发封包达到过狗的目标。整个开发流程我已经在之前的PPT中阐述了,具体可以看上面这个图。

0x02 插件开发基础

详细的使用方法可以参考https://portswigger.net/burp/help/extender.html ,这里大致说一下。

插件支持3大主流语言(Java、Python、Ruby)进行开发,除了原生的Java外,分别通过Jython和JRuby实现对另外两种语言的支持。

我比较习惯于使用Python,所以下面就以Python为例了.
首先需要搭建开发环境,从 http://www.jython.org/downloads.html 下载standalone版的Jar文件,并在Burp的extender选项的python enviroment中设定好Jar文件路径。
设定好之后,首先让我们来实现一个Hello World,万里代码第一步嘛~(这里直接贴代码了)

burp2

在extender中载入后效果如下,根据官方文档,多次载入或者重载Python写的插件可能会有出错信息提示,这时只要在启动Burp时候加入参数即可

java -XX:MaxPermSize=1G -jar burp.jar

 

burp3

简单的说明一下代码,IBurpExtender 这个接口是必须要导入的,我们写了一个自己的类并继承自它。

而 registerExtenderCallbacks 函数几乎也是必备的,其定义了我们在导入插件时需要做的事情,很多时候一般是初始化。

我这里用了Java Swing中的一个方法来弹出MessageBox,正常的情况如果使用Python的函数如print则会显示在插件导入时的Output栏中。
接下来进入正题,首先我们需要思考一下,我们的插件需要完整什么功能,其大致的流程如下:

1. 开启Proxy(貌似没找到API能直接控制这个的)
2. 在Proxy中拦截菜刀的请求
3. 解密菜刀的请求
4. 解密后的请求经过修改(如使用自己的加密方式)发送给目标
5. 依据响应结果看是否需要再拦截一次进行修改,最后返回给菜刀

我们使用 registerHttpListener(或者registerProxyListener) 函数注册了Burp的这个接口之后,所有的Http流量都可以拿过来给我们用了。

在 processHttpMessage 函数中,我们可以来处理Http流量。

这里又分为两种方式,一种比较省事儿,就是将传入的请求全部加密一次(如下例中,在 processHttpMessage 中使用 IExtensionHelpers 接口的 base64encode 函数将所有流量编码成base64),然后以Asp.net的代码为例,我们只需要类似如下操作:
System.Convert.FromBase64String(base64encode_all_data)
另一种则比较麻烦,但是自由度较高,就是先全部解密所有的传入流量(unicode_urldecode、base64decode),再解析相关参数或者语句将其重组或者加密,甚至直接全部重写他的函数。
以下代码展示了替换菜刀传入流量的(防止伸手党就不给出绕过代码了,只给出替换全部流量的代码)

burp4

输出效果如下:
burp5

 

0x03 菜刀封包分析

以上图的为例,我们先讲需要转换编码的工作完成,美化后的代码如下图(列磁盘功能)

caidao=Response.Write("->|");
var	err:Exception;
try
{
	eval("var c=System.IO.Directory.GetLogicalDrives();
	Response.Write(Server.MapPath("/")+"	");
	for(var i=0;i<=c.length-1;i++)
		Response.Write(c[i][0]+":");","unsafe");
}
catch(err)
{
	Response.Write("ERROR:// " = err.message);
}
Response.Write("|<-");Response.end();

其他功能就有待自己去分析了,解码的过程可以直接利用Burp提供的相关API来进行。

0x04 过狗测试

当然了,我们这里绕过安全狗主要是针对其对传输过程中的数据包拦截,关于接收的文件免杀的讨论,不再我们今天这个范围内,或许再下一次某Blog种我会专门来谈谈针对静态特征码查杀(关键字)一些对抗,无论如何,心中要有一句话,一切字符串的把戏都是纸老虎 :)
我们加载上写好的插件,可以切换到Alert标签或者Output栏目中看一看有没有什么奇怪的信息,由于菜刀是使用WinInet,所以在设置代理时候我们需要打开Internet选项中的代理设置来指定Proxy相关参数,如下图:

burp6

测试的相关截图就不发了,总体的思路大概是这样,如果在测试中遇到问题,也可以及时修改策略。当然最终极的方式,还是需要二进制功底的,比如将安全狗的规则库逆向出来,就能知道有哪些关键字,或者相关查杀策略是什么了。

0x05 总结

其实利用Proxy来转发也不算是什么新颖的思路了,在远古时代我天朝民众还会写脚本来转发,这样的局限性很大(比如你需要在菜刀中把目标地址修改成你代理脚本的地址)。同类型的Proxy有很多,我在前面的PPT截图中也做了一些总结。使用Burp来做这个工作是因为其本身提供的结构就非常丰富了,包括且不限于代理请求,加密解密函数等。最终的最终我们还是需要打造一些自己的工具的,将自己在渗透过程中的思想和技巧融合到工具之中,也是一种渗透能力的体现

参考

http://www.youxia.org/burpsuite-plugin-development-rsa-encryption-decryption.html
http://drops.wooyun.org/papers/3962
http://drops.wooyun.org/tools/5751
http://www.moonsos.com/Article/penetration/107.html
https://github.com/mwielgoszewski/jython-burp-api
http://blog.opensecurityresearch.com/2014/03/extending-burp.html

 

【原文:BurpSuite插件开发之过狗菜刀 作者:安全脉搏Darkray  】

Tags:
奖励积分:4    

评论  (1)
快来写下你的想法吧!

DarkRay

文章数:5 积分: 6

关注我们

合作伙伴