---
url: https://docs.ogmabox.com/zh/app/utilities/race-smuggling.md
description: 使用 Ogma 实用工具测试竞态条件和 HTTP 请求走私行为。
---

# 竞态与请求走私 {#race-and-smuggling}

竞态 / 请求走私提供两种专用工具，用于对时间敏感的攻击和协议层 HTTP 攻击。

## 竞态条件 {#race-conditions}

竞态选项卡向同一端点同时发送一个请求的多个副本，让你比较各次并行执行的响应和耗时。

### 适用场景 {#when-to-use-it}

* **TOCTOU（检查时间 / 使用时间）**：测试并发请求能否将检查和状态变更操作分离。
* **账户操作**：并发发送余额变更、优惠券兑换或受限额约束的操作，测试是否存在重复花费或超额兑换。
* **投票或速率限制绕过**：确认每用户限制是否以原子方式执行。

### 运行竞态测试 {#running-a-race-test}

1. 在竞态选项卡中构建目标请求，或将其发送到该选项卡。
2. 设置**并发数**值，即要发送的并行副本数量。
3. 点击**发送**按钮（按钮文字会显示请求数量）。所有副本会尽可能同时发送。
4. 查看响应表格中每个副本的状态码、正文和耗时。
5. 响应差异（不同状态码、不同响应正文、第 2 个及后续副本意外成功）表明可能存在竞态窗口。

### HTTP/2 单包竞态 {#http-2-single-packet-racing}

目标支持 HTTP/2 时，启用 **H2 单包**模式。HTTP/2 在一个连接上复用所有并行请求，从而消除网络抖动，使请求同时到达服务器更可靠。

## HTTP 请求走私 {#http-request-smuggling}

请求走私选项卡测试服务器如何处理含义不明确的 `Content-Length` 和 `Transfer-Encoding` 标头，以检测前端 / 后端失步。

### 背景 {#background}

当反向代理和后端服务器对一个请求在哪里结束、下一个请求在哪里开始的判断不一致时，请求 A 中被走私的前缀可能被添加到请求 B 前面。影响可能包括缓存投毒、身份验证绕过和任意请求注入。

### 失步变体 {#desync-variants}

| 变体 | 说明 |
|---|---|
| CL.TE | 前端使用 Content-Length；后端使用 Transfer-Encoding |
| TE.CL | 前端使用 Transfer-Encoding；后端使用 Content-Length |
| TE.TE | 两者都使用 Transfer-Encoding，但对混淆后的标头作出不同响应 |

### 运行请求走私探测 {#running-a-smuggling-probe}

1. 在请求走私选项卡中选择目标端点。
2. 选择要测试的失步变体。
3. 点击**运行请求走私探测**。工具会发送特制请求并测量响应。
4. 序列中第二个请求超时或出现意外响应，表明可能存在失步。
5. 创建安全发现之前请手动确认；与探测无关的网络状况导致超时时，也可能出现误报。

## 相关页面 {#related-pages}

* [重放](../replay.md)
* [拦截](../intercept.md)
* [安全发现](../findings.md)
