請求走私:讓 Agent 按 HTTP 消息邊界做走私探測

前言

在 CDN、WAF 與源站並存的架構裏,問題往往不是「某個參數能不能注入」,而是前後兩級對同一條 TCP 流裏請求結束位置理解不一致。手工拼 CL.TE、TE.CL 的 raw HTTP 很費時間,還要對照 RFC 7230 的 framing 規則;把通用聊天模型直接丟上去,又容易和 CRLF 注入、參數型漏洞混在一起。

下面介紹 SkillHub 上的社區 Skill「請求走私」(@user_3c6cb52e/request-smuggling-gpev)。它用標準 SKILL.md 把 HTTP 請求走私(request smuggling / desync)的探測思路、報文模板和決策樹寫進 Agent 上下文,便於在授權範圍內做結構化排查。

這是什麼

「請求走私」是 SkillHub 社區來源(community)的安全類 Skill,座標 @user_3c6cb52e/request-smuggling-gpev,當前版本 1.0.0,分類 it-ops-security,發佈者爲 user_3c6cb52e(SkillHub 頁面標註作者爲 ҉Breeze🌔)。官方簡介爲:請求走私專用技能,幫助 AI Agent 高效完成相關任務。

Skill 元數據標明 MIT 許可,並聲明可在 Claude Code、Codex、Hermes Agent、OpenClaw、QClaw、WorkBuddy 等框架中使用;標籤 requires_api_key=false,安裝後無需額外 API Key。Skill 正文強調:這是消息邊界分歧(message boundary disagreement),不是簡單的「頭注入」——當 CDN/反向代理與源站對請求結束位置判斷不一致時,應加載本 Skill。

核心功能

以下內容均來自已安裝的 SKILL.md(v1.0.0),按能力分節說明。

走私類型與探測模板

  1. CL.TE:前端信任 Content-Length,後端信任 Transfer-Encoding: chunked。提供首探報文:短 Content-Length 配合 0 結束塊,使前端認爲請求已結束,後端把後續字節當作下一條請求前綴。
  2. TE.CL:前端解析 chunked,後端只讀 Content-Length。提供在 chunk 中嵌入第二條請求(如 GET /admin)的完整示例,並說明需按實際字節數重算 chunk 長度(十六進制長度行)。
  3. TE.TE:前後端都處理 Transfer-Encoding,但對有效值或解析規則不一致。列出 8 種 Transfer-Encoding 混淆變體(空格、重複頭、製表符、折行等)用於探測解析差異。

HTTP/2 與客戶端側

  • H2 → H1 降級:說明僞頭映射、禁止頭轉發、重複頭合併等與走私相關的測試方向。
  • 客戶端去同步(client-side desync):說明瀏覽器 fetch 在特定棧上的隊列效應,並給出 illustrative 的 no-cors + 原始 body 含 GET 的 PoC 形狀(成功往往表現爲側信道或日誌異常,而非直接讀響應)。

與相鄰漏洞的路由

Skill 內寫明與以下主題的邊界:Apache HttpClient 特定版本可關聯 ghost-bits-cast-attack;參數型注入應走 injection 路由;響應頭拆分走 CRLF;緩存鍵混淆走 web-cache-deception。確認爲 HTTP 消息邊界 問題後應留在本 Skill,避免誤路由。

工具與決策樹

推薦工具表包括 Burp Suite HTTP Request Smuggler、GitHub 上的 defparam/smuggler、dhmosfunk/simple-http-smuggler-generator。附帶從「路徑上是否有反向代理/CDN」到 CL.TE / TE.CL / TE.TE / H2 分支的檢測決策樹 ASCII 圖。

高級參考

正文末尾指向同目錄下的 H2_SMUGGLING_VARIANTS.md(H2.CL、H2.TE、CL.0、Fat GET、緩存投毒鏈、CDN 產品行爲矩陣等)。當前 SkillHub 安裝包中僅包含 SKILL.md 與 _meta.json,該擴展文檔若未隨包下發,需以你本地安裝結果爲準。

安裝與啓用

先做 CLI 檢查,再按座標安裝到當前 Agent 的 skills 目錄(裝錯目錄 Agent 不會加載)。

1. 檢查 SkillHub CLI

command -v skillhub && skillhub --version

未安裝時可按 SkillHub 安裝說明 執行完整安裝或僅 CLI 安裝。

2. 安裝本 Skill

官方頁面給出的方式是:根據 https://skillhub.cn/install/skillhub.md 安裝 @user_3c6cb52e/request-smuggling-gpev。CLI 搜索結果顯示的安裝命令爲:

skillhub install request-smuggling-gpev --namespace user_3c6cb52e --dir <你的 Agent skills 目錄>

常用目錄示例(來自 SkillHub 安裝文檔):

  • Cursor:~/.cursor/skills/
  • Claude Code:~/.claude/skills/
  • Codex:~/.codex/skills/ 或項目下的 .agents/skills/

安裝完成後重啓或刷新 Agent,使 skills 目錄生效。SkillHub 頁面統計(抓取時):評分 100000,下載 1116,安裝 0——安裝數會隨環境變化,以頁面實時數據爲準。

典型用法

在 Agent 對話中,當你懷疑「前後端對 CL/TE 優先級不一致」或「H2 降級後出現異常拼接」時,讓 Agent 加載本 Skill,並按 Skill 中的首探步驟發送授權範圍內的探測。

CL.TE 首探(Skill 原文假設與字節計數說明):

POST / HTTP/1.1
Host: target.example
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
Transfer-Encoding: chunked

0

SMUGGLED

前端按 Content-Length: 13 只讀取 0\r\n\r\nSMUGGLED 共 13 字節;後端按 chunked 在 0 塊結束後,將 SMUGGLED 及之後字節視爲下一條請求的起始。

TE.CL 嵌入第二條請求(修改路徑或頭後須重算 chunk 長度;示例中 35 表示 53 字節 chunk body):

POST / HTTP/1.1
Host: target.example
Content-Type: application/x-www-form-urlencoded
Content-Length: 4
Transfer-Encoding: chunked

35
GET /admin HTTP/1.1
Host: target.example
Foo: x

0

經過上面的步驟若出現時間差、隊列污染或緩存異常等信號,再按 Skill 第 8 節的決策樹收窄到 CL.TE、TE.CL 或 TE.TE 變體,並配合 Burp Smuggler 等工具做二次確認。

適用場景與注意

適合誰:在 it-ops-security 場景下做授權滲透、紅隊演練或架構安全評估的工程師;需要 Agent 穩定輸出 raw HTTP 模板、區分走私與 CRLF/參數注入的人。

限制與坑:

  • Skill 明確要求僅在授權範圍內測試;併發走私可能污染連接池、破壞緩存或影響其他租戶,優先隔離環境或低流量窗口。
  • 瀏覽器側 PoC 受同源策略、CORS 等約束,不能指望直接讀回 smuggled 響應。
  • 包內引用的 H2_SMUGGLING_VARIANTS.md 與若干關聯 Skill(如 ghost-bits-cast-attack)未必隨本座標一併安裝,需要單獨安裝或自行補齊。
  • Repository / homepage 元數據指向 https://github.com/1991513ccie-png,與 SkillHub 分發渠道獨立;版本與內容以 SkillHub 1.0.0 包爲準。

結尾

「請求走私」把 HTTP 消息邊界分歧、CL/TE/TE.TE 探測、H2 降級與工具鏈建議收斂成一份 Agent 可執行的 playbook,適合在已有反向代理拓撲時做系統化 desync 排查。官方 SkillHub 頁面:https://www.skillhub.cn/skills/user_3c6cb52e/request-smuggling-gpev;API 座標頁:https://api.skillhub.cn/user_3c6cb52e/request-smuggling-gpev。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜