【Burp插件】打通BurpSuite与Python之间的通道

宋鑫磊,从业8年,对网络安全、终端安全、二进制安全等都有强烈兴趣,主做APP/Web安全渗透测试。

Burpy

首先,BurpSuite插件已经那么多了,真的缺这一个?

面对这个 To be, or not to be 的灵魂之问,咱们先回答一下下面的问题:

• 你的BurpSuite中有多少插件?

• 你有没有这样的情况:有些工作我用大python写的,测试的时候需要burpsuite,所以干活的时候是不断地在命令行、Burpsuite、浏览器三个之间来回切换。

我就遇到一个RSA加密的流量,没有这个插件,我干活的状态应该是这样的:

• 编写一个RSA加密脚本

• 打开一个命令行,执行命令把我的payload加密

• 右键复制

• 切换到BurpSuite,粘贴加密之后的payload

• 发送请求,分析返回结果

• 切换到命令行,更换payload,执行python脚本加密

• 再复制

• 再粘贴

• 再发送请求

....

上面过程我才测试了两个payload,如果你有50个payload,你是不是想把电脑摔了?或者问候一下某人先人?

有朋友可能会说了,我有插件呀!

对,RSA可以弄个插件。那下一个活,不是RSA了,加了签名怎么办?

答:再写个插件!

对,如果下一个活,加密/签名算法不一样,比如有些加了时间戳,取url中后6位与时间戳合并,算32位的md5之后,把md5从中间劈开,前16位做key/后16位做iv,做了AES呢?

答:再写个插件!

....

那结果可能是,你的BurpSuite中装满了各式各样的插件!

假设上面的情况下,你还需要做Intruder的动作,可你的插件只做了加密,怎么办?

答:改插件!

如果你的回答跟上面一致,那么请大佬收下我的膝盖!

不是每个人都快速开发一个插件,而不同的活,用到的插件也不一定完全一样,并且改插件的话,需要了解BurpSuite内部的东西,这限制了团队内其他人员的发挥。

在深深的体验了上面不同情况下的痛楚之后,一个来自CFCA信息安全部的同志,小心翼翼地打开了破解版本的idea,学习了 Brida 插件的代码之后,通过大量复制、粘贴和修改之后,完成了一个他心目中的那个插件—— Burpy

从此之后,它的BurpSuite中只有一个插件,那就是 Burpy 。(当然有时会用一下Brida)

Burpy ,一个Burpy胜过千万个插件,是您居家日站的必备良器!

渗透测试人员必备两个技能:BurpSuite工具和Python脚本, Burpy 就是打通这任督二脉的神器!

恩,字数上应该差不多了,下面进入正题。

作用

执行指定python脚本,并将处理结果返回给BurpSuite。

功能、UI介绍

是不是很眼熟?简直就是Brida的亲兄弟有没有!这点恰恰证明了作为唯一开发者的我的Java编程功底~对,就是很浅。

这里有个注意事项:要用python2。

在Burpy PY file path:里面指定好你自己的python脚本,点击start server,就可以开心的干活了。

大家注意看这里:

这个地方是一些开关,为了右键菜单更加简洁。点上之后,右键菜单会有变化。

把这些开关都点上,来看一眼右键菜单:

Burpy Main会自动调用我们脚本中的main方法

Burpy Enc会自动调用encrypt方法

依次类推。

Enable Processor和Enable Auto Enc/Dec这两个开关的功能比较特殊,这里分开说一下

打开enable processor之后,在使用Intruder进行暴力破解之类的动作时,如果payload需要进行加密或签名,我们就可以把加密/签名的算法实现到自己有python脚本的processor函数中,参见下面的例子。

打开Enable Auto Enc/Dec之后,你就自由了!加密?不存在的!参见下面的例子。

脚本怎么写

在我们自己的脚本中,要新建一个Burpy类,此类在start server的时候会进行初始化。

Burpy类有这样几个函数:main, encrypt, decrypt, sign, processor,作用咱们上面提到了,不再重复

其中,main函数是必须的,因为右键菜单始终会有一个Burpy Main,这个菜单就是调用的main函数。(如果你连Burpy Main也不调用,这个函数也是可以没有的)

其他的函数看需要,可有可无。之所以这样设计是因为,不是每次你都要进行加解密操作,有时候你只需要进行个md5或者base64就行。贴不贴心?

Talk is cheap, show me the code!

下面咱们看几个例子吧!

编码

这是一个base64编码的例子,其实呢,base64功能很多插件都有,burpsuite自己也有,这里只是为了说明一下Burpy的用法。

import base64

class Burpy:

'''

header is list, append as your need

body is string, modify as your need

'''

def main(self, header, body):

return header, body

def encrypt(self, header, body):

body = base64.b64encode(body)

return header, body


def decrypt(self, header, body):

return header, body


def sign(self, header, body):

return header, body


def processor(self, payload):

return payload+"burpyed"

很简单对不对?

Burpy的灵活之处就在这里,它把整个HTTP数据包都发送到脚本进行处理,HTTP头保存在header列表中,body是个字符串,想怎么处理就怎么处理,处理完把header和body返回就搞定。

上面的函数中,我们只用到了 encrypt ,其实其他函数都可以删掉的

强行分期

Burpy 的简单用法如上。

长文好像不太友好,咱们在这儿强行分一期,下期更新 Burpy 的高级用法,看完之后你就可以去打肉山了。下期见。

作者邮箱:songxinlei@cfca.com.cn

欢迎大家提出宝贵的建议!

校对:牛   菁

排版:牛   菁

审核:谢宗晓

↓↓↓长按下方二维码关注「网安前哨」,查看更多历史文章

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章