第 102 章 运行时路由与 Host 头攻击
现代架构中"一个域名后面有无数服务":反向代理(Nginx/Caddy)、网关、CDN、vhost 路由、容器编排。谁能控制路由,谁就控制访问——Host 头、转发头、路径归一化是攻击的操纵杆。本章覆盖路由解析原理、Host 头攻击、路径混淆、以及多跳架构下的路由决策。
📍 知识点地图 | 主题:路由攻击 | 前置:第67章 | 后续:— | 核心概念:Host头、转发头、路径混淆、vhost
102.1 路由架构(先懂"谁决定去哪")
请求路径:
客户端 → CDN → 反向代理 → 应用网关 → 后端服务/容器
每层可能决策路由的输入:
Host 头(vhost 路由: 哪个域名 → 哪个站点)
Path(路径前缀 → 哪个服务)
转发头(X-Forwarded-*: 信任链)
Cookie/Session(粘性路由)
SNI(TLS 层路由)
102.2 Host 头攻击(最经典的路由攻击)
原理
后端用 Host 头决定:
□ 生成绝对 URL(链接/重定向)
□ 路由到虚拟主机
□ 密码重置邮件链接(第 69 章重置链)
□ 缓存键(缓存投毒!)
攻击: 修改 Host 头 → 影响后端行为
攻击变体
1. 密码重置投毒(最经典):
改 Host → 重置链接指向攻击者域名
POST /forgot-password
Host: evil.com
→ 受害者收到 evil.com 的重置链接 → 攻击者拿到 token
2. 缓存投毒:
Host 参与缓存键但未校验 → 污染缓存 → 其他用户收到恶意响应
3. 路由绕过:
某些代理按 Host 白名单路由 → 改 Host 到内部域名 → 访问内部服务
4. 绝对 URL 注入:
页面生成的链接用了 Host → XSS/钓鱼(Host 注入脚本)
检测与绕过
□ 修改 Host 观察响应(重定向/链接/路由变化)
□ 双重 Host 头(解析差异)
□ 绝对 URL 生成点(搜索 http:// 拼接)
□ 校验绕过: 加端口/子域/编码(@、#、%0d%0a)
102.3 转发头信任(X-Forwarded-For 等)
常见转发头:
X-Forwarded-For(客户端 IP)
X-Forwarded-Host(原始 Host)
X-Forwarded-Proto(协议)
X-Real-IP(Nginx)
攻击:
□ 伪造 XFF 绕过 IP 限制(白名单/限速)
□ 伪造 XFH 影响路由/绝对 URL
□ 伪造 X-Forwarded-Proto → 绕过 HTTPS 强制
前提: 后端"信任"这些头(未重写/未校验)
检测: 添加伪造头观察行为变化
102.4 路径归一化与路由混淆(Path Confusion)
代理与后端对路径的解析差异(第 67 章走私同源):
□ 编码差异: %2e%2e(..)、%252e、双编码
□ 分隔符: / vs \ vs ;
□ 参数解析: /api;/admin、/api%3badmin
□ 规范化: 重复斜杠、点路径
攻击:
□ 绕过路径前缀校验(/admin → /public/../admin)
□ 访问代理不路由的路径(后端直接暴露)
□ WAF 绕过(编码变体)
工具: 路径混淆字典(HackTricks/工具集)+ 手工对比代理直连差异
102.5 vhost 与容器路由(多站点/多容器)
vhost 路由: 同一 IP 多个站点(按 Host 分发)
攻击: 发现隐藏 vhost(第 57.4 虚拟主机枚举)→ 访问内部站点
容器/微服务路由:
路径前缀 → 不同服务(/api → API 服务, /admin → 管理服务)
攻击: 路径混淆到达未暴露服务
K8s 场景(第 54 章):
Ingress 路由 → Service → Pod
攻击: 路由配置错误/未保护 Service
102.6 路由攻击测试方法论
1. 架构识别:
□ 响应头(Server/代理特征)
□ CDN/代理指纹
□ 多跳行为(直连 vs 经代理差异)
2. Host 测试:
□ 修改 Host(重定向/绝对 URL/路由变化)
□ 伪造转发头(IP/Host/Proto)
3. 路径测试:
□ 编码/分隔符/归一化变体
□ 代理直连对比(发现解析差异)
4. 路由枚举:
□ 隐藏 vhost
□ 未暴露路径/服务
5. 影响评估:
□ 重置投毒/缓存投毒/路由绕过
102.7 检查清单
□ 代理/CDN/网关架构识别
□ Host 头攻击(重置投毒/缓存投毒/路由)
□ 转发头伪造(XFF/XFH/Proto)
□ 路径混淆(编码/分隔符/归一化)
□ 隐藏 vhost 枚举
□ 容器/微服务路由
□ 代理直连差异对比
□ 报告: 路由链+操纵点
动手练习
- 在本地搭 Nginx 多 vhost,用 Host 头切换访问不同站点,体验 vhost 路由。
- 练习"密码重置投毒":改 Host 头让重置链接指向攻击者域名(练习靶场)。
- 用路径混淆字典测试一个应用的代理直连差异(观察后端直接可达的路径)。
- 分析一个应用的转发头信任:伪造 XFF 测试 IP 限制是否可绕过。
深入阅读
- 仓库:
CTF-Sandbox-Orchestrator/competition-runtime-routing/(运行时路由 CTF 子技能) - 仓库:
CTF-Sandbox-Orchestrator/competition-runtime-routing/references/runtime-routing.md - 仓库:
CTF-Sandbox-Orchestrator/competition-request-normalization-smuggling/(路径归一化) - 仓库:
CTF-Sandbox-Orchestrator/competition-web-runtime/(Web 运行时) - 仓库:
skills/pentest-tools/references/web-attack-cheatsheet.md