基于burp的fuzz上传插件

  • A+
所属分类:安全工具

基于burp的fuzz上传插件

一、背景

之前在雷神众测公众号看到过关于burp插件开发的一些文章,感觉还是很方便实用,回来后的第一件事就是自己尝试一下,搞定这个插件。现在把自己在尝试过程中遇到的一些问题做简单整理如下。


二、环境

burpsuit官方支持用java、python、ruby开发扩展,这里选择利用Python。利用python开发依赖Jython,需要先下载 Standalone Jar,并在burp中配置python的环境变量。


基于burp的fuzz上传插件


三、api接口

官方已经对一些常见的接口做了简单说明并提供一些开发案例,可参考链接https://portswigger.net/burp/extender/


关于文件上传的插件主要是利用Intruder payloads中开发案例进行改写,该案例可直接加载到burp中进行使用,主要介绍下IIntruderPayloadGenerator接口,此接口用于自定义的Intruder有效负载生成器,利用该接口下getNextPayload函数获取有效负载值。利用该接口可获取到在Intruder模块里设置的变量值,并去定义我们要替换的变量值。该接口的具体介绍可参考如下:

https://portswigger.net/burp/extender/api/burp/IIntruderPayloadGenerator.html


文件上传插件目的是对请求数据包中如下数据进行改写,尝试绕过一些上传限制规则,

Content-Disposition: form-data; name="uploaded"; filename="a.php"Content-Type: application/octet-stream

利用getNextPayload函数,basevalue即Intruder模块里设置的变量的值


基于burp的fuzz上传插件

变量数据输出如下:

基于burp的fuzz上传插件


接下来通过替换上传文件后缀名、变换Content-Disposition大小写、增删空格、修改Content-Type类型等构造一系列payload即可。

基于burp的fuzz上传插件

四、注意事项


1、python版本统一

burp的python环境要和插件的版本统一,不然在后续调试过程中会出现很多问题,比如在这里我的burpp ython环境是2.7,所以插件也是用python2.7版本写的。

基于burp的fuzz上传插件


2、在测试插件时遇到数据总是被url编码问题,这个问题还是找了很久的,在确定代码没问题后,矛头转向burp的设置,发现果然是设置出现问题。

基于burp的fuzz上传插件


在intruder功能下的payloads设置中,burp默认对payload中=、等一些字符进行了编码,将URL-encode these characters的勾选去掉即可。

基于burp的fuzz上传插件


3、为了利用getNextPayload函数将intruder模块中的变量值读取出来,需要用到chr(x)函数,但是调用该函数时总是出现如下错误。

基于burp的fuzz上传插件

原因如下,Python2.7,chr( K ) 将编码K 转为字符,K的范围是 0 ~ 255,python 3.0中,chr( K ) 将编码K 转为字符,K的范围是,0 ~ 65535,而在实际输出中出现负数,所以系统出现上述错误。

基于burp的fuzz上传插件


4、编写该插件基本都是边写边调试的,所以需要burp频繁加载和卸载插件,只要是加载插件次数多了系统就会出现内存错误,主要造成内存错误的原因如下:

由于Jython动态产生Java的类的方式,在加载插件时你可能会遇到内存错误,可以通过配置Java版本低于JDK8,通过如下命令启动burp来分配更多的内存java -XX:MaxPermSize=1G -jar burp.jar,注意,这种方式在JDK8+以上是不允许的。这种方法我没有尝试,我是在出现这种问题时,直接重启burp。

基于burp的fuzz上传插件


五、演示效果

1、加载插件

基于burp的fuzz上传插件


2、intruder设置变量值并加载插件

基于burp的fuzz上传插件

基于burp的fuzz上传插件


3、运行效果

此处建议是加上,上传成功后的提示进行匹配,这样效果会比单纯的根据长度匹配更明显一些,如下图

基于burp的fuzz上传插件

六、小结

此插件只是对数据包中的“Content-Disposition: form-data; name="uploaded"; filename="a.php"

Content-Type: application/octet-stream”进行了混淆,所以存在其局限性,只是辅助于日常的测试,对于请求数据头部的混淆、上传文件的混淆、上传文件的免杀等方面的测试,还需要人工进行测试。不过有了这个插件,可以慢慢积累一些常见的绕过方法,来扩充完善其功能,也是挺方便的。自己动手的最大好处就是遇到问题解决问题,对burp一些常见接口有了多一些了解,以后在改写类似的东西会更顺手一些。


E

N

D



Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,团队致力于分享高质量原创文章、开源安全工具、交流安全技术,研究方向覆盖网络攻防、系统安全、Web安全、移动终端、安全开发、物联网/工控安全/AI安全等多个领域。

团队作为“省级等保关键技术实验室”先后与哈工大、齐鲁银行、聊城大学、交通学院等多个高校名企建立联合技术实验室,近三年来在网络安全技术方面开展研发项目60余项,获得各类自主知识产权30余项,省市级科技项目立项20余项,研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。对安全感兴趣的小伙伴可以加入或关注我们。

基于burp的fuzz上传插件

本文始发于微信公众号(Tide安全团队):基于burp的fuzz上传插件

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: