条件竞争的骚操作(一)
字数 1231 2025-08-23 18:31:24

条件竞争漏洞利用技术详解

一、条件竞争漏洞概述

条件竞争(Race Condition)是指当网站在没有足够保护措施的情况下同时处理多个请求时,服务器来不及处理多余的请求,导致多个不同的线程同时与相同的数据交互,从而产生"冲突"并导致应用程序出现意外行为。

漏洞原理

  • 服务器无法同时处理大量并发请求
  • 多个请求同时与相同数据交互导致逻辑冲突
  • 攻击者通过精心定时的请求造成故意冲突

常见易受攻击场景

  1. 签到系统
  2. 积分领取功能
  3. 点赞/评论功能
  4. 优惠券使用
  5. 账户余额提取
  6. 图形验证码重复使用
  7. 任何限制用户单次操作的功能点

二、条件竞争漏洞利用技术

1. 限制性条件竞争(Limit Overrun)

典型场景:使用单张优惠券多次降低商品价格

案例:利用仅有的一张少额优惠券和50¥购买价值1337¥的商品

利用方法一:Turbo Intruder插件

  1. 登录系统并选择目标商品加入购物车
  2. 在优惠券兑换处抓取请求包
  3. 发送到Turbo Intruder插件
  4. 选择race-single模式
  5. 修改并发请求数量(建议100+以提高成功率)
  6. 执行攻击
  7. 观察回显判断成功请求数量
  8. 完成购买

利用方法二:Repeater分组发送

  1. 抓取优惠券兑换请求包
  2. 发送到Repeater
  3. 使用Ctrl+R复制多个相同请求
  4. 将所有请求放入同一分组
  5. 使用Send group同时发送
  6. 成功率略高于Turbo Intruder但操作更复杂

2. 绕过频率限制的条件竞争

典型场景:绕过登录尝试次数限制

案例:在3次登录尝试限制下爆破carlos用户密码

利用步骤:

  1. 抓取登录请求包
  2. 发送到Turbo Intruder
  3. 修改脚本以使用不同密码并发请求:
def queueRequests(target, wordlists):
    engine = RequestEngine(endpoint=target.endpoint,
                          concurrentConnections=1,
                          engine=Engine.BURP2)
    passwords = wordlists.clipboard
    for password in passwords:
        engine.queue(target.req, password, gate='1')
    engine.openGate('1')
  1. 准备密码本(可包含常见弱密码)
  2. 执行攻击
  3. 观察302响应判断成功登录
  4. 成功率较低,可能需要多次尝试

3. 多端点条件竞争

典型场景:在订单支付过程中修改商品

案例:在支付过程中将高价商品替换为低价商品

利用方法:

  1. 抓取以下关键请求:

    • 添加高价商品
    • 移除高价商品
    • 添加低价商品
    • 提交订单
  2. 将所有请求放入同一分组

  3. 设置发送顺序:

    • 添加高价商品
    • 移除高价商品
    • 添加低价商品
    • 提交订单
  4. 确保每次购物车中存在低价商品

  5. 反复执行直到成功

替代方法:

  1. 将支付请求和修改商品请求放入同一分组
  2. 利用服务器处理支付请求的时间窗口修改商品

4. 竞争窗口概念

竞争窗口是指可能发生条件竞争的时间段,通常是:

  • 数据库两次交互之间的极短时间
  • 服务器处理多个接口调用的间隙
  • 订单验证与支付确认之间的时间差

三、防御措施

  1. 实施原子操作
  2. 使用适当的锁机制
  3. 服务器端频率限制
  4. 关键操作添加唯一性校验
  5. 减少竞争窗口时间
  6. 实现幂等性设计

四、高级利用方向(预告)

  1. 单端点条件竞争
  2. 时间戳重置密码绕过
  3. 部分构造条件竞争
  4. 利用条件竞争上传Webshell

注:实际利用条件竞争漏洞时,成功率与网络环境、服务器性能等因素密切相关,通常需要多次尝试。所有测试应在授权环境下进行。

条件竞争漏洞利用技术详解 一、条件竞争漏洞概述 条件竞争(Race Condition)是指当网站在没有足够保护措施的情况下同时处理多个请求时,服务器来不及处理多余的请求,导致多个不同的线程同时与相同的数据交互,从而产生"冲突"并导致应用程序出现意外行为。 漏洞原理 服务器无法同时处理大量并发请求 多个请求同时与相同数据交互导致逻辑冲突 攻击者通过精心定时的请求造成故意冲突 常见易受攻击场景 签到系统 积分领取功能 点赞/评论功能 优惠券使用 账户余额提取 图形验证码重复使用 任何限制用户单次操作的功能点 二、条件竞争漏洞利用技术 1. 限制性条件竞争(Limit Overrun) 典型场景 :使用单张优惠券多次降低商品价格 案例 :利用仅有的一张少额优惠券和50¥购买价值1337¥的商品 利用方法一:Turbo Intruder插件 登录系统并选择目标商品加入购物车 在优惠券兑换处抓取请求包 发送到Turbo Intruder插件 选择 race-single 模式 修改并发请求数量(建议100+以提高成功率) 执行攻击 观察回显判断成功请求数量 完成购买 利用方法二:Repeater分组发送 抓取优惠券兑换请求包 发送到Repeater 使用Ctrl+R复制多个相同请求 将所有请求放入同一分组 使用 Send group 同时发送 成功率略高于Turbo Intruder但操作更复杂 2. 绕过频率限制的条件竞争 典型场景 :绕过登录尝试次数限制 案例 :在3次登录尝试限制下爆破carlos用户密码 利用步骤: 抓取登录请求包 发送到Turbo Intruder 修改脚本以使用不同密码并发请求: 准备密码本(可包含常见弱密码) 执行攻击 观察302响应判断成功登录 成功率较低,可能需要多次尝试 3. 多端点条件竞争 典型场景 :在订单支付过程中修改商品 案例 :在支付过程中将高价商品替换为低价商品 利用方法: 抓取以下关键请求: 添加高价商品 移除高价商品 添加低价商品 提交订单 将所有请求放入同一分组 设置发送顺序: 添加高价商品 移除高价商品 添加低价商品 提交订单 确保每次购物车中存在低价商品 反复执行直到成功 替代方法: 将支付请求和修改商品请求放入同一分组 利用服务器处理支付请求的时间窗口修改商品 4. 竞争窗口概念 竞争窗口是指可能发生条件竞争的时间段,通常是: 数据库两次交互之间的极短时间 服务器处理多个接口调用的间隙 订单验证与支付确认之间的时间差 三、防御措施 实施原子操作 使用适当的锁机制 服务器端频率限制 关键操作添加唯一性校验 减少竞争窗口时间 实现幂等性设计 四、高级利用方向(预告) 单端点条件竞争 时间戳重置密码绕过 部分构造条件竞争 利用条件竞争上传Webshell 注:实际利用条件竞争漏洞时,成功率与网络环境、服务器性能等因素密切相关,通常需要多次尝试。所有测试应在授权环境下进行。