HTTP Host头攻击漏洞与防护(进阶篇)
字数 1282 2025-11-28 00:47:27
HTTP Host头攻击漏洞与防护(进阶篇)
一、漏洞描述
HTTP Host头攻击是指攻击者通过篡改HTTP请求中的Host头,绕过安全机制,实现密码重置邮件劫持、缓存投毒、SSRF等攻击。在进阶场景中,应用可能依赖Host头生成链接、校验域名或处理多租户逻辑,若未严格验证Host头的合法性,可能导致严重业务逻辑漏洞。
二、漏洞原理与攻击场景
-
Host头的作用
- Host头在HTTP/1.1中必需,用于区分同一IP下的多个域名。
- 应用可能通过
Host头动态生成链接(如密码重置链接)、校验请求来源域名或切换多租户环境。
-
常见攻击场景
- 密码重置劫持:应用使用Host头生成重置链接,攻击者篡改Host头指向恶意域名,用户点击链接后凭证泄露。
- 缓存投毒:反向缓存服务器以Host头作为缓存键,攻击者注入恶意内容污染缓存。
- 业务逻辑绕过:多租户系统中通过Host头识别租户,篡改Host头可能越权访问其他租户数据。
三、漏洞验证与利用步骤
-
探测Host头依赖
- 拦截请求,修改Host头为任意值(如
evil.com),观察响应是否包含篡改后的域名(如生成的链接变为http://evil.com/reset?token=xxx)。 - 测试空Host头、端口篡改(如
example.com:evilport)、特殊字符(如换行符)等。
- 拦截请求,修改Host头为任意值(如
-
利用案例:密码重置劫持
- 步骤1:用户请求密码重置,应用发送含重置令牌的邮件,邮件链接格式为
http://{Host}/reset?token=xxx。 - 步骤2:攻击者拦截请求,将Host头改为
attacker.com,应用生成恶意链接http://attacker.com/reset?token=xxx。 - 步骤3:用户收到邮件并点击链接,令牌被发送至攻击者服务器。
- 步骤1:用户请求密码重置,应用发送含重置令牌的邮件,邮件链接格式为
-
进阶绕过技巧
- X-Forwarded-Host头滥用:若应用优先信任X-Forwarded-Host等代理头,可绕过Host头校验。
- 请求走私配合:通过HTTP请求走私注入恶意Host头,污染其他用户请求。
四、防护方案
-
禁止使用Host头生成链接
- 在代码中固定域名(通过配置文件或环境变量),避免动态依赖Host头。
-
严格校验Host头合法性
- 建立白名单域名列表,拒绝非预期Host头(如通过中间件校验):
server { if ($host !~* ^(example.com|api.example.com)$ ) { return 444; # 关闭连接 } }
- 建立白名单域名列表,拒绝非预期Host头(如通过中间件校验):
-
多层级代理场景处理
- 使用
SERVER_NAME(服务器配置)而非Host头处理业务逻辑。 - 若需支持代理,校验
X-Forwarded-Host仅允许可信IP(如负载均衡器)设置。
- 使用
-
防御深度化
- 密码重置链接增加二次确认(如要求输入当前密码)。
- 对敏感操作启用双因子认证(2FA)。
五、测试与验证
- 使用工具(如Burp Scanner)自动化检测Host头漏洞。
- 手动测试边界情况:空值、超长域名、数字IP、端口篡改等。
- 代码审计重点搜索关键词:
request.getHeader("Host")、$_SERVER['HTTP_HOST']。
通过以上进阶防护,可显著降低因Host头滥用导致的安全风险。