freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Burpy:连接你的BurpSuite和Python
2020-04-20 15:00:07

在工作中,主要任务是app安全测试。app的流量,尤其是金融类客户端的流量,基本都会涉及到加密和签名。在App测试的时候,一般会选择Brida,它将BurpSuite和Frida结合了起来,这样BurpSuite里可以集成我们写的hook脚本,避免了在命令行和Burp之间的复制粘贴,极大了提高了渗透测试的效率。

但有些时候,你需要RSA加密或签名,密钥就在那里,通过frida再写hook有些绕了,如果因为一个项目需要就写一个插件,又比较麻烦。如果能直接运行我们的Python脚本不就完美了?

基于这个需要,我开始在Brida代码基础上实现一个其他插件,打通Burp与Python之间的路,于是就有了Burpy。

进化

刚开始的时候Burpy只能执行一个自己的Python函数,把在Burp中选择的内容传进去,经过函数处理之后返回给Burp。

这个是基本满足需要的,但后来发现有些测试目标,比如一些小程序,它的加解密或签名是在前端JS实现的,用Python的Selenium直接写函数的话,每次都要初始化webdriver,而这个过程是很耗时的,给人的感觉就像卡死一样,不够流畅,所以开始重新设计加载Python脚本的过程,把之前直接执行函数变成加载一个类,这样我们可以把耗时多的或需要初始化的东西放在init里面。

再到前几天,觉得用类的话,的确解决了加载的问题,但测试的时候大部分是加密、解密同时需要,偶尔还需要签名,所以之前一个类一个函数的方法导致Burpy只能执行一个功能,于是又改了一下。但加密解密签名又不是每次都需要,所以增加了`EnableEncryption``EnableDecryption``EnableSign`的开关,如果没有Enable这些,直接写main函数就好,也就是Burp只完成一个功能。

后来又想到,有些测试的时候,需要进行Intruder操作,但如果payload是需要目标程序加密或签名的怎么办呢?总不能一个payload一个payload的进行加密签名地手工做吧?于是又完成了payloadprocessor功能,如果`EnableProcessor`开启,就可以在我们的脚本中实现processor函数,在Intruder的时候就可以用到这个函数。而这样一来,processor还可以方便的调用加密、解密、签名的函数。

到此,Burpy的一些功能基本上满足了我的需求,所以把它的用法简单写一下,方便大家提高干活效率。

使用

主界面如下,基本上与Brida一样。也是通过PyRO4进行的通信。

PYEditor里面就是我们的脚本内容,可以很方便的进行更改。

在没有Enable其他开关的时候,右键菜单里面就一个`BurpyMain`项,它调用的就是我们脚本里面的`main`函数。

我们先把这几个选项都选上

此时我们右键菜单上就增加了相应的项:

脚本

测试脚本如下:

```python

class Burpy:

    '''

    header is list, append as your need

    body is string, modify as your need

    '''

    def main(selfheaderbody):

        header.append("Main: AAA")

        print "head:", header

        print "body:", body

        return header, body

    

    def encrypt(selfheaderbody):

        header.append("Enc: AAA")

        return header, body

    def decrypt(selfheaderbody):

        header.append("Dec: AAA")

        return header, body

    def sign(selfheaderbody):

        header.append("Sign: AAA")

        return header, body

    def processor(selfpayload):

        return payload+"burpyed"

```

很简单,不过需要注意的是,右键菜单会把整个http包给传进来,这样是为了方便进行加密、解密和签名。因为有时候会用到httpheader里的东西,有时候会更改header里面的东西,只传httpbody的话,还是不够灵活。

我们把header和body进行修改之后,再return回去,就完成了。

这个示例脚本的作用是在header里面增加一个新的header项,如`Main:AAA`,执行一个试试。

脚本里面的函数与右键菜单中的是一一对应的,所以最少需要1个main函数,当然你也可以写任意多个其他函数,只要不跟这4个函数重名就好。

PayloadProcessor

脚本中的processor函数就是用做处理payload的。

我们把一个数据包发送到Intruder,然后设置一下

设置好位置:

在Payloads界面增加一个处理方式,选择`InvokeBurpextension`,然后选择我们的`Burpyprocessor`

在脚本中,processor函数只是在payload后面加上了`burpyed`字符

增加几个payload用来测试:

开始

实际使用的时候,只要改一下processor函数的处理方式就ok了。所以你拥有了任意处理payload的能力,而不用自己写插件啦。

下载与安装

https://github.com/mr-m0nst3r/Burpy.git

cdBurpy

mvncleanpackage

在Burp中增加:

最后,欢迎提改进意见。

*本文作者:m0nst3r,转载请注明来自FreeBuf.COM

# burpsuite # python # Burpy
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者