实验前必备知识要点
考虑在线商店的应用场景,当用户在结账时输入促销代码以获得订单折扣时,应用程序可能遇到条件竞争问题。为了优化这种情况,应用程序通常会执行以下步骤:
- 检查促销代码是否已被使用。
- 对订单总额应用折扣。
- 更新数据库记录以标记该促销代码已被使用。
然而,如果在后续尝试中再次使用该促销代码,应用程序应当在开始处理之前进行初始检查,以防止重复操作。这样的设计有助于确保应用程序业务逻辑的正确性,并减少潜在的条件竞争风险。
如果先前从未使用过该折扣代码的用户尝试在几乎完全相同的时间应用两次,会发生什么?
应用程序通过临时子状态转换实现功能。换言之,在处理请求完成之前,应用程序会进入一个临时状态,然后再次退出。在此过程中,子状态从服务器开始处理第一个请求时启动,并在更新数据库以指示代码已被使用后结束。
这种方法引入了一个小的竞争窗口,允许根据需要多次申请折扣。
攻击的变体包括但不限于:
- 多次兑换礼品卡
- 多次对产品进行评级
- 提取或转移超过账户余额的现金
- 重复使用单个验证码解决方案
- 绕过反暴力破解速率限制
限制超支是“检查时间到使用时间”(TOCTOU)缺陷的一个子类型。
实验要求
该实验室购买流程存在竞态条件,可能导致以意外价格购买物品。
为解决该问题,需要成功购买一件 L33t 轻型皮夹克。
您可以使用以下凭据登录您的账户:wiener:peter。
渗透开始
请访问相应的靶场界面。
https://portswigger.net/web-security/race-conditions/lab-race-conditions-limit-overrun、
启动靶场
1. 站点分析
这是一个属于SHOP类型的网站。
我们的终极目标是以1337美元购买夹克。
2. 登录
首先,请使用提示的账户wiener:peter登录。
基于信用,我们可以得知我们拥有50美元。
3.日志探查
在处理总体操作时,我们发现可以享受20%的折扣,购买优惠。
使用POST请求来添加购物车,访问/cart端点。
创建折扣优惠券的购物车端点。
在该端点多次尝试添加-20%折扣时发现被阻止。
GET /cart端点
访问该端点将显示当前用户的购物车,通过 cookie 来识别会话记录,尝试更改 cookie。
通过更改 cookie 后,我们发现访问该端点时购物车为空,这证明购物信息是通过 cookie 存储在后端。因此,所有操作都依赖于 cookie 信息。
4.功能点探究
从逻辑上讲,折扣只能应用一次。如果试图第二次应用折扣,系统将显示折扣已被使用。
如果逻辑判断不严格,同一时间内使用折扣N次可能导致系统允许该操作。此后,移除折扣并启动5个数据包发送。
尝试按顺序发送请求组,使用单独的连接以减少干扰的可能性。
发送后发现只有第一个添加折扣成功,而后四个没有成功。
通过并发条件竞争发送到枚举模块,使用100个线程,发现通过这种方法可以重复利用购物券,突破了一次性限制。
跳转至购物页面后,发现购物券已被多次兑换。
5.完成实验
成功将夹克加入购物车,并再次使用相同方法顺利完成夹克的购买。
改进建议: 实施新的验证机制以防止并发问题。
暂无评论内容