前言
之前做渗透测试的时候遇到过一个问题,当时的渗透测试项目发现个漏洞是XXE漏洞,这个漏洞是手工发现的,当时也挂着扫描器的被动扫描模式也扫了一遍,但是没扫到。当时是利用插件的形式简单实验了下,但是漏报太多了。
趁着有时间,把之前计划的Burp Suite插件开发给做掉。
0x01 Fastjson反序列化漏洞
简介
Fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
Fastjson相对其他JSON库的特点是快,从2011年Fastjson发布1.1.x版本之后,其性能从未被其他Java实现的JSON库超越。
之前做XXE测试的时候如果遇到Content-Type
是application/json
的时候都喜欢改为`application/xml
然后发个XXE的payload探测能不能解析xml文档,再进行下一步的测试,现在又要加Fastjson、Jackson的payload来测试是否有RCE的漏洞,这样的话效率就太低了。
由于大部分的测试都离不开Burp,所以,借助Burp插件即可帮我们自动化进行这些测试。
0x02 插件中用到的类和方法
由于我们的目标是想实现只要有流量就对流量进行筛选,然后进行漏洞探测,所以并不是需要触发才扫描的。这样,文档找起来范围就缩小很多了。
2.1 IBurpExtender
所有插件都必须实现这个接口。当我们在加载插件时,默认会调用IBurpExtender类下的registerExtenderCallbacks方法,并传递一个IBurpExtenderCallbacks对象,此对象在编写插件时会经常用到。
2.2 IHttpListener
该类是用来注册HTTP监听器,然后对获取到的请求或响应包进行处理,有个processHttpMessage的方法用于对请求和响应的数据包进行自定义操作,该方法在发送请求之前和接收响应之后会被调用。
2.3 registerExtenderCallbacks
当我们在加载插件时,默认会调用IBurpExtender类下的registerExtenderCallbacks方法,并传递一个IBurpExtenderCallbacks对象,提供可由扩展调用的方法以执行各种操作。
2.4 processHttpMessage
这是IHttpListener接口中唯一一个需要实现的方法,当通过IBurpExtenderCallbacks.registerHttpListener()
注册了HTTP监听器后,所有的流量都会先传入processHttpMessage方法中进行处理。
ending…
真的就用到这么多…
0x03 代码实现
这里只以Fastjson为例,其他同理。
代码逻辑为监听所有来自proxy、repeater的流量,检查请求头和响应头中content-type的值是否为json,如果是,则格式化payload,build之后重新发送。
|
|
后面的一些方法和类是为了后续实现其他东西自己预留的。
0x04 漏洞检测
加载插件
部署docker漏洞环境,请求数据
|
|
由于插件是自动的,同时也没有编写界面,可以使用logger++查看。
从上图可以看大片序号33是代理的流量,由于符合规则,所以紧接着就调用了我们编写的插件,并自动填充payload并发送
在dnslog中成功查看到攻击请求
0x04 漏洞告警
所有的payload可使用dnslog进行,并利用对应的API来获取数据,我这里使用的ceye.io,也可以自己用开源的vtest等自己搭建一套。
4.1 获取接口数据
为了准确,在payload中设置了随机字符。使用API获取数据
|
|
4.2 定时任务
做个定时任务轮询获取
|
|
4.3 漏洞推送
漏洞推送可以结合各种机器人,比如钉钉、企业微信、TG等,这里我用了别人直接开发好的微信推送:Server酱
他这个服务有个存储型XSS,作者给修成了这个吊样。。。
点进去之后即可查看详情了
0x05 扩展
Fastjson的payload很多,可以自己写个列表循环执行下即可,Jackson同理。
另外,XXE、SSRF等都可以利用此方法实现,搜了下,GitHub已经有代码了:https://github.com/yandex/burp-molly-pack/,照着代码根据自己需求改下就好了。
用着非常舒服,再扩展扩展,还要什么PassiveScan,要什么扫描器,要什么自行车~
参考文章:
https://cloud.tencent.com/developer/article/1166490
https://forum.portswigger.net/thread/scanner-vs-processhttpmessage-python-ef82b3ef