20

基于burp的fuzz上传插件

 3 years ago
source link: https://mp.weixin.qq.com/s?__biz=Mzg2NTA4OTI5NA%3D%3D&%3Bmid=2247491012&%3Bidx=1&%3Bsn=82e037c23f469b58a8074aa3cb2fcb1f
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Ifmy2mI.png!mobile

一、背景

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

二、环境

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

vIBvmyb.png!mobile

三、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模块里设置的变量的值

YJNVf27.png!mobile

变量数据输出如下:

3YNv63.png!mobile

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

NNBZZjy.png!mobile

四、注意事项

1、python版本统一

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

MZzIjuQ.png!mobile

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

yEVV7bJ.png!mobile

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

b6vUZrq.png!mobile

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

UZzU7jq.png!mobile

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

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

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

bAN3a2f.png!mobile

五、演示效果

1、加载插件

BZnEnmF.png!mobile

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

6BV7bai.png!mobile

V7jaE3u.png!mobile

3、运行效果

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

BbYzemi.png!mobile

六、小结

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

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

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

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

Rrmu2aU.gif!mobile


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK