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 应用程序中常见的业务逻辑漏洞的理解。