渗透测试 | 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头使重置链接指向恶意站点。

典型流程:

  1. 用户提交用户名/邮箱请求密码重置
  2. 服务器生成高熵token并与用户关联
  3. 发送包含重置链接的邮件(如https://[Host头值]/reset?token=xxx
  4. 若Host头可控,攻击者可构造恶意域名获取token

4.2 资源访问控制

某些系统根据Host头限制资源访问,修改Host头可能绕过访问控制。

4.3 Web缓存投毒

启用缓存功能的系统可能因Host头被篡改导致缓存污染。

4.4 基于路由的SSRF

系统根据Host头进行内部路由时,可能构造SSRF攻击。

5. 攻击演示

修改Host头方法:

  1. 使用Burp Suite等代理工具拦截请求
  2. 直接修改Host头值为攻击者控制的域名
  3. 观察应用是否仍能正常响应

典型攻击步骤(以密码重置为例):

  1. 找到应用中的密码重置功能
  2. 拦截重置请求并修改Host头
  3. 检查服务器是否使用修改后的Host头构建重置链接
  4. 如果成功,受害者点击的链接将指向攻击者服务器

6. 防御措施

6.1 服务器端防御

  • 不要信任用户提供的Host头
  • 显式配置允许的域名白名单
  • 对Host头值进行严格验证和过滤
  • 避免使用Host头构建敏感URL

6.2 安全开发实践

  • 对于密码重置等敏感操作,使用配置的固定域名而非Host头
  • 实施完整的URL校验机制
  • 对输出的URL进行规范化处理

7. 测试方法

7.1 基本测试

  1. 修改Host头为任意值,观察应用行为
  2. 尝试XSS等payload:Host: example.com"><script>alert(1)</script>
  3. 尝试路径遍历:Host: ../../evil.com

7.2 高级测试

  1. 检查是否通过Host头进行内部路由
  2. 测试缓存投毒可能性
  3. 验证是否用于SSRF攻击

8. 相关资源

PortSwigger实验室提供了专门的HTTP Host头攻击实验场景:
https://portswigger.net/web-security/all-labs#http-request-smuggling

9. 总结

HTTP Host头攻击是一种常被忽视但危害严重的漏洞,特别在密码重置、用户注册等场景下可能导致账户接管。开发人员应避免直接使用Host头构建敏感操作链接,安全团队应将其纳入常规安全测试范围。

HTTP Host头攻击详解 1. HTTP Host头概述 HTTP Host头是HTTP/1.1协议中必需的请求头,用于指定客户端想要访问的域名。例如访问百度的请求会包含如下Host头: 关键概念: 域名是用户在浏览器中输入的要访问的地址 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头构建敏感操作链接,安全团队应将其纳入常规安全测试范围。