---
url: https://docs.ogmabox.com/zh-Hant/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}

當反向 Proxy 與後端伺服器對一個請求在哪裡結束、下一個請求在哪裡開始的判斷不一致時，請求 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)
