pawan-9999/PortSwigger-Web-Security-Academy-Race-Condition-Labs

GitHub: pawan-9999/PortSwigger-Web-Security-Academy-Race-Condition-Labs

针对 PortSwigger Web Security Academy 竞态条件实验室的安全实践笔记,系统演示了并发请求处理中同步缺陷的识别与利用方法。

Stars: 0 | Forks: 0

# PortSwigger-Web-Security-Academy-Race-Condition-Labs 本实验室演示了当多个请求在没有适当同步的情况下被同时处理时,是如何引发竞态条件(Race Condition)的。通过识别共享资源并利用并发请求处理机制,该漏洞可以绕过业务逻辑,导致越权操作、权限提升或应用状态不一致。 # PortSwigger Web Security Academy – Race Condition Labs ## 简介 当应用程序在同时处理多个请求时,如果没有对共享资源的访问进行适当的同步,就会发生竞态条件。因此,攻击者可能会操纵请求的执行顺序,从而绕过业务逻辑、授权检查或安全控制。 这些实验室演示了与并发相关的漏洞是如何导致权限提升、越权操作和应用程序状态不一致的。在这些练习中,我们使用 Burp Suite 来分析应用程序的行为,识别同步点,并发送并发的 HTTP 请求。 # 实验室 1 – 单端点竞态条件 ## 目标 通过发送对同一资源进行操作的多个并发请求,识别并利用单个应用程序端点内的竞态条件。 ## 漏洞概述 易受攻击的端点在同时处理多个请求时,没有实现适当的锁定或同步机制。由于每个请求在更新状态之前都会独立验证应用程序的状态,因此多个请求能够在任何状态更改可见之前通过验证阶段。 这导致应用程序接受了多个本应只有一个能成功的操作。 ## 方法论 ### 1. 应用程序分析 使用 Burp Suite Proxy 和 Repeater 观察了应用程序的行为。 通过监控修改共享应用程序数据的请求,确定了易受攻击的端点。 典型特征包括: * 改变状态的 POST 请求 * 优惠券兑换 * 账户修改 * 积分扣减 * 购买确认 ### 2. 识别竞态窗口 分析了请求的执行流程。 很明显,服务器在更新底层数据之前执行了验证。 在这两个操作之间存在一个非常小的执行窗口,在这个窗口内,多个请求能够同时满足验证逻辑。 ### 3. 并发请求执行 利用 Burp Suite 的竞态条件测试功能,将相同的请求分组并同时发送。 由于所有请求几乎在同一时间到达服务器,因此每个请求在任何更新发生之前都观察到了原始的应用程序状态。 ### 4. 成功利用 应用程序不仅允许单个操作成功,而是让多个请求成功完成。 这证明了该应用程序未能强制执行关键业务逻辑的原子处理。 ## 根本原因 应用程序在处理并发请求时缺乏同步机制。 验证和状态修改是分开执行的,没有确保只有一个请求能完成该操作。 ## 安全影响 潜在的影响包括: * 重复购买 * 多次兑换优惠券 * 双重扣除(双花攻击) * 多次账户充值 * 业务逻辑绕过 * 经济损失 ## 缓解措施 建议的防御措施包括: * 原子数据库事务 * 资源锁定 * 乐观或悲观并发控制 * 幂等令牌 * 服务端请求同步 * 适当的事务隔离级别 ## 关键收获 竞态条件不依赖于绕过身份验证或修改请求。相反,它们利用的是应用程序无法安全处理并发操作的缺陷。 在识别这些漏洞时,了解服务器的执行时机至关重要。 # 实验室 2 – 多端点竞态条件 ## 目标 利用涉及多个端点的竞态条件,这些端点共同完成一个单一的业务流程。 ## 漏洞概述 与单端点竞态条件不同,此漏洞涉及参与同一工作流的独立端点。 尽管每个端点单独看起来是安全的,但它们的组合执行引入了同步缺陷,导致应用程序状态变得不一致。 ## 方法论 ### 1. 工作流映射 分析了完整的业务流程。 确定了交易中涉及的每个端点。 示例包括: * 更新账户信息 * 确认操作 * 完成交易 ### 2. 了解请求依赖关系 应用程序依赖于按特定顺序发生的多个请求。 然而,没有机制能够保证在这些请求同时执行时应用程序状态保持一致。 ### 3. 并发执行 准备了对不同端点的请求。 使用 Burp Suite 同时发送了这些请求。 服务器在重叠的执行窗口中处理了它们。 ### 4. 漏洞利用 由于两个端点都在处理部分更新的数据,安全假设变得无效。 应用程序进入了非预期的状态,导致受限操作得以成功执行。 ## 根本原因 业务逻辑依赖于顺序执行,而服务器却在并发处理请求。 相关端点之间不存在同步机制。 ## 安全影响 可能的后果包括: * 授权绕过 * 权限提升 * 工作流篡改 * 账户状态不一致 * 业务逻辑滥用 ## 缓解措施 建议的缓解措施包括: * 同步相关事务 * 在提交更改之前立即验证应用程序状态 * 使用跨越整个工作流的数据库事务 * 锁定共享资源 * 状态更改后重新验证授权 ## 关键收获 应用程序永远不应假设请求会按顺序到达或完成。 每当多个端点修改同一业务对象时,就必须考虑同步问题。 # 实验室 3 – 邮箱更改中的竞态条件(权限提升) ## 目标 利用电子邮件更改过程中的竞态条件,将任意电子邮件地址与用户账户关联,从而继承管理员权限。 ## 漏洞概述 该应用程序允许用户更新他们的电子邮件地址。 另外,待处理的管理员邀请是与电子邮件地址相关联的,而不是与永久绑定的用户账户相关联。 由于电子邮件更新过程包含竞态条件,因此可以认领一个已经存在未处理管理员邀请的电子邮件地址。 结果,管理员权限被意外转移。 ## 方法论 ### 1. 应用程序分析 使用 Burp Suite 检查了电子邮件更新功能。 确定了负责更改注册电子邮件地址的完整请求流程。 ### 2. 识别竞态窗口 应用程序在永久分配电子邮件之前进行了验证。 在这个短暂的处理间隔期间,多个请求可能会相互干扰。 ### 3. 并发请求 同时发送了多个电子邮件修改请求。 并发执行使得应用程序能够在完整性检查完成之前,将具有特权的电子邮件地址与攻击者的账户关联起来。 ### 4. 权限提升 一旦电子邮件关联成功,由于该电子邮件地址已经存在邀请,应用程序会自动授予管理员权限。 攻击者在未经授权的情况下继承了提升的权限。 ## 根本原因 管理员邀请链接到的是电子邮件地址,而不是不可变的用户身份。 再加上不安全的并发处理,这就导致了权限提升。 ## 安全影响 此漏洞可能允许攻击者: * 获取管理员访问权限 * 控制特权账户 * 访问敏感信息 * 修改应用程序配置 * 入侵整个应用程序 ## 缓解措施 建议的保护措施包括: * 将邀请绑定到用户 ID 而不是电子邮件地址 * 在处理过程中锁定账户更新 * 强制执行原子性电子邮件更改 * 在提交状态更改后执行授权检查 * 防止重复的并发更新 * 引入幂等性控制 ## 关键收获 身份永远不应仅仅依赖于像电子邮件地址这样的可变属性。 对安全敏感的工作流必须进行原子化处理,以消除竞态窗口。 # 总体学习收获 这些实验室表明,竞态条件属于业务逻辑漏洞,而不是传统的注入缺陷。 获得的最重要经验包括: * 在测试之前了解完整的应用程序工作流。 * 识别由多个请求修改的共享资源。 * 寻找被分离开的验证和状态更新操作。 * 使用并发请求而不是顺序请求来测试端点。 * 将时机视为一种攻击面。 * 处理金融交易、身份验证、账户管理和权限分配的应用程序需要严格的同步机制。 # 使用的工具 * Burp Suite Community Edition * Burp Proxy * Burp Repeater * Burp 竞态条件测试功能 * Firefox Developer Tools # 展示的技能 * 竞态条件识别 * 并发请求分析 * 业务逻辑测试 * 工作流枚举 * 授权分析 * HTTP 请求篡改 * 安全应用程序评估 * 漏洞验证 **平台:** PortSwigger Web Security Academy **类别:** 竞态条件 **难度:** 高级 这些实验室显著加深了我对并发请求处理、同步缺陷以及现代 Web 应用程序中常见的业务逻辑漏洞的理解。