☰
Race conditions:Multi-endpoint race conditions
2026/10/1 19:45:38 网站建设 项目流程

本文为博主原创文章,未经作者授权,禁止任何形式的转载。

一、漏洞原理

这道题的漏洞场景是:当我们下订单时(点击页面的“Place order”按钮),服务器的处理逻辑其实包含两个子过程,第一个过程是比较个人账号余额和购物车中的商品价格总额,如果个人账号余额大于商品价格总额,那么可以正常进行后续的支付流程;如果个人账号余额小于商品价格总额,那么无法完成后续的支付,并且前端会有明确的报错提示;第二个过程是对购物车中的所有商品进行支付。

那么,问题来了,我们可以先在购物车中添加总额低于个人账号余额的商品,绕过服务器对个人账号余额与购物车商品总额的比较后,再往购物车中添加其他商品,那么就可以达到用小金额额外购买商品的目的。

二、漏洞证明

1、使用burpsuite抓包找到将商品添加至购物车的http请求,接口是/cart,如下图:

2、使用burpsuite抓包找到生成订单并且支付订单的http请求,接口是/cart/checkout,如下图:

我们也可以看一下,如果个人账号余额不足以支付购物车中的所有商品时,前端页面会出现报错,提示如下图:

3、默认的个人账号余额是100美元,我们先往购物车添加价格总额低于100美元的商品,确保:

(1)个人账号余额小于购物车中所有商品的价格总额;

(2)点击“Place order”按钮后可以正常支付。

我的购物车商品如下:

4、将/cart和/cart/checkout两个接口发送至Repeater模块,并放在同一个组中,这里采用默认组名Group1,如下图所示:

5、将Group 1中/cart接口的参数productId,值改为1,代表的含义是我们要把Lightweight L33t Leather Jacket这件商品添加至购物车,/cart/checkout接口不做任何改动。/cart接口的修改如下图:

6、选择发送方式“Send group in parallel(single-packet attack)”,攻击结果分为下面两种情况:

(1)/cart请求在校验余额后但是支付订单前被处理,那么攻击成功,我们把指定商品添加到了购物车,并且不用花钱就下了单,如下图:

支付成功后余额变为负数,如下图:

(2)/cart请求在校验余额前就被处理或者在下单后才被处理,那么攻击失败。

三、漏洞思考

1、这道题的下单流程包含两个步骤:一是校验余额是否充足,充足的情况下才允许下单;二是使用余额完成支付。现实场景下的下单支付可能也有类似的流程,思路值得学习。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询