请求走私:让 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。

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

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

小夜