渗透测试 | HTTP报头攻击
字数 1447 2025-08-10 08:28:00
HTTP Host头攻击详解
1. HTTP Host头概述
HTTP Host头是HTTP/1.1协议中必需的请求头,用于指定客户端想要访问的域名。例如访问百度的请求会包含如下Host头:
Host: www.baidu.com
关键概念:
- 域名是用户在浏览器中输入的要访问的地址
- Host头是HTTP数据包中的一个字段值
- 从HTTP/1.1开始成为必需字段
2. Host头的主要用途
2.1 虚拟主机服务
由于IPv4地址耗尽,多个应用可能共享同一个公网IP,服务器依赖Host头来判断具体访问哪个业务。
2.2 代理转发
当请求通过代理或CDN时,代理会根据Host头将请求转发到正确的后端组件。
3. Host头攻击原理
Host头攻击利用网站不安全处理Host头的漏洞。如果服务器隐式信任Host头且未正确验证或转义,攻击者可注入恶意负载操纵服务器行为。
攻击前提:
- 修改Host头后仍能正常访问应用
- 后端业务逻辑依赖Host头值且未做充分过滤
4. Host头攻击场景
4.1 密码重置/用户注册
许多网站在发送重置链接时直接从Host头获取域名值构建URL。攻击者可修改Host头使重置链接指向恶意站点。
典型流程:
- 用户提交用户名/邮箱请求密码重置
- 服务器生成高熵token并与用户关联
- 发送包含重置链接的邮件(如
https://[Host头值]/reset?token=xxx) - 若Host头可控,攻击者可构造恶意域名获取token
4.2 资源访问控制
某些系统根据Host头限制资源访问,修改Host头可能绕过访问控制。
4.3 Web缓存投毒
启用缓存功能的系统可能因Host头被篡改导致缓存污染。
4.4 基于路由的SSRF
系统根据Host头进行内部路由时,可能构造SSRF攻击。
5. 攻击演示
修改Host头方法:
- 使用Burp Suite等代理工具拦截请求
- 直接修改Host头值为攻击者控制的域名
- 观察应用是否仍能正常响应
典型攻击步骤(以密码重置为例):
- 找到应用中的密码重置功能
- 拦截重置请求并修改Host头
- 检查服务器是否使用修改后的Host头构建重置链接
- 如果成功,受害者点击的链接将指向攻击者服务器
6. 防御措施
6.1 服务器端防御
- 不要信任用户提供的Host头
- 显式配置允许的域名白名单
- 对Host头值进行严格验证和过滤
- 避免使用Host头构建敏感URL
6.2 安全开发实践
- 对于密码重置等敏感操作,使用配置的固定域名而非Host头
- 实施完整的URL校验机制
- 对输出的URL进行规范化处理
7. 测试方法
7.1 基本测试
- 修改Host头为任意值,观察应用行为
- 尝试XSS等payload:
Host: example.com"><script>alert(1)</script> - 尝试路径遍历:
Host: ../../evil.com
7.2 高级测试
- 检查是否通过Host头进行内部路由
- 测试缓存投毒可能性
- 验证是否用于SSRF攻击
8. 相关资源
PortSwigger实验室提供了专门的HTTP Host头攻击实验场景:
https://portswigger.net/web-security/all-labs#http-request-smuggling
9. 总结
HTTP Host头攻击是一种常被忽视但危害严重的漏洞,特别在密码重置、用户注册等场景下可能导致账户接管。开发人员应避免直接使用Host头构建敏感操作链接,安全团队应将其纳入常规安全测试范围。