前言
Burp在202309开始提供了条件竞争问题测试的支持,相比之前经常通过Intruder的多线程测试更为方便和高效,大大提高了相关问题测试的成功率。
介绍
在以往的Intruder测试条件竞争中,会面临两个弊端:1,自己网络的延迟和抖动,2,服务器的响应时间。而竞争条件测试时间往往可能要在几毫秒内甚至更短,所以之前的Intruder方法成功率会有不足。
Burp在最近更新中提供了相关支持,主要涉及到两种方法:1,Repeater的本身支持。2,Turbo Intruder插件的应用。
这两种方法在使用时,Burp会根据请求HTTP版本的不同来自动调整,因为版本的不同所使用的技术也不同,对于HTTP1用到的是最后字节同步技术,对于HTTP2用到的是但数据包攻击技术。保证了多个数据包的同时到达。
Repeater
对于常见的单个数据包的竞争条件测试,先将其发到Repeater,需要测试多少个就发多少个,快捷键是Ctrl+R,发送后在右侧有个Create tab group功能,如下图:
将相关的请求选中并确认,即把相关数据包放到一个组中,归纳起来。
随后Send会有一个下拉箭头,下拉选择parallel并发那个,如下图,然后再点击Send即可。
Turbo Intruder
Turbo也支持条件竞争测试,不过需要Python基础,它支持数据包的修改和定制,有些复杂场景如果Repeater无法满足时,则需要用到Turbo。
首先,数据包右键选择Extensions-Turbo Intruder-Send to turbo intruder来发送到Trubo。
随后如果有动态更改内容的值,则用%s代替,例如下图暴破的password变量。
将脚本下拉选择race-single-packet-attack,即竞争单包攻击,如下图。
它和Repeater作用基本一样,但支持定制,比如我要暴破密码,则可以通过脚本来遍历字典,wordlists.clipboard代表字典来源于剪贴板,所以运行时需要全选字典内容并复制。
最后点击Attack即可。
进阶用法
有这样一种情况,比如一个商城,用户挑选商品到购物车,并支付的流程,如下图:
这个流程的条件竞争点在于,用户输入密码支付订单后,到系统确认订单为已支付并等待发货的过程中,如果在这个期间再次加入购物车的商品,那么可能就会存在金额不变,却多买的情况。
那我们怎么测试呢,此时并发请求就不能是单单的添加购物车请求,而是支付和添加购物车两个请求同时去并发才可以。
所以需要把支付的请求和添加购物车的请求合并到一个组中。
这里还有一个链接预热的概念,试想有没有这样一种情况,比如添加购物车的逻辑比较简单,所以服务器会响应较快,而支付逻辑相对复杂,响应时间较慢,那么就无法达到理想的竞争测试。
解决办法就是在组中的最开始添加一个无关紧要的链接,然后把光标定位到第二个请求,之后开始Send,先让第一个请求和服务器产生链接交互,避免响应时差问题。
修复
针对条件竞争问题,很多场景和逻辑都可以进行测试,修复的话,可以参考下面几点:
1,对于共享资源,多线程环境中,建议适用锁机制,确保只有一个线程在执行相关操作。
2,对于数据库操作,可以添加事务处理机制。
3,对于一些权限类的,需要对用户进行权限确认。
参考
更多内容可以参考Burp官方说明:
https://portswigger.net/web-security/race-conditions
原文始发于微信公众号(aFa攻防实验室):Burp对条件竞争漏洞的支持
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论