http-host-header-attacks 是做什么的?
HTTP Host 头注入与路由滥用攻击手册。当应用信任 Host 头来生成 URL、路由请求或进行访问控制时使用——可实现密码重置投毒、Web 缓存投毒、通过路由触发的 SSRF 以及虚拟主机绕过。
概述
该技能聚焦于利用 HTTP Host 头处理缺陷的攻击技术。当后端应用根据 Host 头构建 URL、执行内部路由或执行基于主机的访问控制时,攻击者可操纵该头以导致以下后果:
- 密码重置投毒:通过操控 Host 头,在密码重置邮件中嵌入恶意链接。
- Web 缓存投毒:通过提供不同的 Host 头值,使缓存服务器存储对请求的欺骗性响应。
- 路由 SSRF:将请求重定向到内部或未经授权的后端服务。
- 虚拟主机绕过:绕过基于虚拟主机实施且校验不当的访问控制。
使用方式
该技能以 yaklang 脚本形式提供,可在 Yak 语言引擎 中运行。每个功能模块按名称划分,例如 EXPLOIT、POC 等。
环境要求
- 安装并配置 Yak 语言引擎。
- 目标应用必须依赖 Host 头进行 URL 生成、路由或访问控制。
运行示例
yak run password_reset_poisoning.yak
yak run cache_poisoning_by_host.yak
攻击场景
1. 密码重置投毒
描述:许多应用会在密码重置邮件中嵌入 Host 头。若应用信任 Host 头生成重置链接,攻击者可修改其为外部域,从而劫持重置流程。
请求示例:
POST /forgot-password HTTP/1.1
Host: attacker.com
Content-Type: application/x-www-form-urlencoded
[email protected]
成功条件:受害者收到的重置邮件中包含指向 attacker.com/reset?token=<token> 的链接。
2. Web 缓存投毒
描述:利用转发代理或缓存服务器与后端主机名解析方式的差异。通过构造带有特定 Host 头的请求,诱使缓存服务器存储针对该请求的恶意响应。
请求示例:
GET /assets/style.css HTTP/1.1
Host: cachepoisoned.attacker.com
成功条件:后续请求 Host: cachepoisoned.attacker.com 的 /assets/style.css 返回攻击者控制的响应。
3. 路由 SSRF
描述:某些内部路由机制依赖于 Host 头将请求路由到特定后端。攻击者可通过将 Host 头更改为内部服务名称,使请求发送到内部服务。
请求示例:
GET /admin HTTP/1.1
Host: internal-admin-service.local
成功条件:返回 200 状态码且响应中包含内部管理面板内容。
4. 虚拟主机绕过
描述:访问控制可能基于主机名。通过提供受信任的 Host 头,攻击者可绕过 ACL 规则。
请求示例:
GET /restricted HTTP/1.1
Host: admin-target.com
成功条件:返回 200 状态码且包含受限资源,而使用其他 Host 头时返回 403。
诊断与检测
- 发送带有任意 Host 头的请求,看响应中是否引用该头(例如在表单
action或链接中)。 - 检查 HTTP 响应中是否存在
Host回显(例如Host出现在Location头中)。 - 使用相同的资源路径但不同的 Host 头,测试 Web 缓存行为差异。
修复建议
- 使用
SERVER_NAME而非Host头生成 URL。 - 对
Host头执行输入验证(使用已知列表)。 - 确保缓存配置不依赖不可信的
Host值。 - 使用绝对 URL 生成链接,避免直接插入用户提供的 Host 值。