探秘条件漏洞:系统安全的潜在隐患
字数 982 2025-08-29 08:30:19

探秘条件漏洞:系统安全的潜在隐患 - 教学文档

竞争条件概述

竞争条件是一种与业务逻辑缺陷密切相关的常见漏洞,发生在网站在没有足够保护措施的情况下并发处理请求时。这会导致多个线程同时与相同数据交互,引发应用程序中的"碰撞"和意外行为。

关键概念

  • 竞争窗口:可能发生碰撞的时间段,通常是两次与数据库交互之间的几分之一秒
  • 影响:严重依赖于应用程序及发生问题的具体功能

限制溢出竞争条件

这是最著名的竞争条件类型,允许超出应用程序业务逻辑施加的限制。

典型示例

在线商店促销代码使用流程:

  1. 检查用户之前未使用过此代码
  2. 将折扣应用于订单总额
  3. 更新数据库记录以反映代码已被使用

攻击变体

  • 多次兑换礼品卡
  • 多次评价产品
  • 提取或转账超过账户余额的现金
  • 重复使用单个CAPTCHA解决方案
  • 绕过防暴力破解速率限制

技术分类

限制溢出属于"检查时间到使用时间"(TOCTOU)缺陷的子类型

检测与利用方法

基本流程

  1. 识别具有安全影响的单次使用或速率限制端点
  2. 连续快速发出多个请求,尝试超出限制
  3. 确保请求时机对齐使竞争窗口重叠

使用Burp Repeater

Burp Suite 2023.9新功能

  • 支持并行发送请求
  • 自动调整技术:
    • HTTP/1:使用最后一个字节同步技术
    • HTTP/2:使用单包攻击技术

单包攻击优势

  • 单个TCP包可同时完成20-30个请求
  • 完全消除网络抖动干扰
  • 减轻服务器端抖动

使用Turbo Intruder

配置要求

  • 目标必须支持HTTP/2
  • 设置engine=Engine.BURP2concurrentConnections=1
  • 使用gate参数分配命名门
  • 通过engine.openGate()并行发送请求

示例代码

def queueRequests(target, wordlists):
    engine = RequestEngine(endpoint=target.endpoint,
                         concurrentConnections=1,
                         engine=Engine.BURP2
                         )
    # 在门'1'中排队20个请求
    for i in range(20):
        engine.queue(target.req, gate='1')
    # 并行发送门'1'中的所有请求
    engine.openGate('1')

实践靶场

  1. 限制溢出竞争条件靶场:https://portswigger.net/web-security/race-conditions/lab-race-conditions-limit-overru
  2. 通过竞争条件绕过速率限制靶场:https://portswigger.net/web-security/race-conditions/lab-race-conditions-bypa

防御建议

  1. 实施适当的锁定机制
  2. 使用原子操作
  3. 减少竞争窗口时间
  4. 在关键操作中增加验证步骤
  5. 考虑使用事务处理
探秘条件漏洞:系统安全的潜在隐患 - 教学文档 竞争条件概述 竞争条件是一种与业务逻辑缺陷密切相关的常见漏洞,发生在网站在没有足够保护措施的情况下并发处理请求时。这会导致多个线程同时与相同数据交互,引发应用程序中的"碰撞"和意外行为。 关键概念 竞争窗口 :可能发生碰撞的时间段,通常是两次与数据库交互之间的几分之一秒 影响 :严重依赖于应用程序及发生问题的具体功能 限制溢出竞争条件 这是最著名的竞争条件类型,允许超出应用程序业务逻辑施加的限制。 典型示例 在线商店促销代码使用流程: 检查用户之前未使用过此代码 将折扣应用于订单总额 更新数据库记录以反映代码已被使用 攻击变体 多次兑换礼品卡 多次评价产品 提取或转账超过账户余额的现金 重复使用单个CAPTCHA解决方案 绕过防暴力破解速率限制 技术分类 限制溢出属于"检查时间到使用时间"(TOCTOU)缺陷的子类型 检测与利用方法 基本流程 识别具有安全影响的单次使用或速率限制端点 连续快速发出多个请求,尝试超出限制 确保请求时机对齐使竞争窗口重叠 使用Burp Repeater Burp Suite 2023.9新功能 : 支持并行发送请求 自动调整技术: HTTP/1:使用最后一个字节同步技术 HTTP/2:使用单包攻击技术 单包攻击优势 : 单个TCP包可同时完成20-30个请求 完全消除网络抖动干扰 减轻服务器端抖动 使用Turbo Intruder 配置要求 : 目标必须支持HTTP/2 设置 engine=Engine.BURP2 和 concurrentConnections=1 使用 gate 参数分配命名门 通过 engine.openGate() 并行发送请求 示例代码 : 实践靶场 限制溢出竞争条件靶场:https://portswigger.net/web-security/race-conditions/lab-race-conditions-limit-overru 通过竞争条件绕过速率限制靶场:https://portswigger.net/web-security/race-conditions/lab-race-conditions-bypa 防御建议 实施适当的锁定机制 使用原子操作 减少竞争窗口时间 在关键操作中增加验证步骤 考虑使用事务处理