高级漏洞篇之HTTP Host头攻击专题
字数 1770 2025-08-10 16:34:36

HTTP Host头攻击全面解析与防御指南

1. HTTP Host头基础概念

1.1 Host头定义与作用

  • HTTP/1.1开始强制要求的请求头
  • 指定客户端要访问的域名或IP
  • 示例:
    GET /web-security HTTP/1.1
    Host: portswigger.net
    

1.2 Host头的应用场景

  1. 虚拟主机

    • 将一台物理服务器虚拟成多台服务器
    • 常见于SaaS服务中
    • 用户通常察觉不到多个应用共享同一IP
  2. 中转路由流量

    • 不同应用部署在不同物理服务器
    • 通过负载均衡或反向代理技术路由流量
    • 常见于CDN应用场景

2. HTTP Host头攻击原理

2.1 攻击产生原因

  1. 服务器端过度信任

    • 默认用户不会修改Host头
    • 缺乏足够验证或转义处理
  2. 基础设施配置问题

    • 第三方组件默认支持某些覆盖Host的头
    • 管理员不了解这些头的存在导致过滤不严

2.2 攻击类型

  1. Web缓存投毒
  2. 特定功能点的商业逻辑漏洞
  3. 基于路由的SSRF
  4. 经典服务器端漏洞(如SQL注入)

3. HTTP Host头攻击测试方法

3.1 基本测试步骤

  1. 修改Host为任意域名/IP,观察响应变化
  2. 检查验证点缺陷:
    • 仅验证域名不验证端口
    • 仅验证是否以允许子域结尾

3.2 构造特殊请求

  1. 注入多个Host头

    GET /example HTTP/1.1
    Host: vulnerable-website.com
    Host: bad-stuff-here
    
  2. 使用绝对URL

    GET https://vulnerable-website.com/ HTTP/1.1
    Host: bad-stuff-here
    
  3. 添加换行/空格

    GET /example HTTP/1.1
    Host: bad-stuff-here
    Host: vulnerable-website.com
    
  4. 使用可覆盖Host的请求头

    GET /example HTTP/1.1
    Host: vulnerable-website.com
    X-Forwarded-Host: bad-stuff-here
    

    其他类似头:X-Host、X-Forwarded-Server、X-HTTP-Host-Override、Forwarded

4. HTTP Host头攻击利用方式

4.1 密码重置投毒

攻击流程:

  1. 用户提交密码重置请求
  2. 系统将用户名/邮箱与Token绑定
  3. 用户收到含Token的重置链接
  4. 用户点击链接修改密码后Token销毁

攻击构造:

  1. 修改密码重置请求中的Host为目标域
  2. 受害者收到指向恶意域的链接
  3. 攻击者获取Token
  4. 攻击者使用Token重置密码

靶场示例:

  1. 基础密码重置投毒

    • 修改Host为攻击者控制的邮件服务器域名
    • 从访问日志获取重置Token
    • 构造重置链接完成攻击
  2. 通过悬挂标记的密码重置投毒

    • 利用端口号验证缺陷
    • 将payload附加在端口号后
    • 通过访问日志获取系统分配的密码

4.2 Web缓存投毒

  • 利用Host头注入恶意内容
  • 使受害者接收投毒的缓存响应

靶场示例:

  • 添加额外Host头覆盖原Host
  • 伪造恶意JS文件
  • 污染Web缓存影响访问者

4.3 访问受限功能绕过

  • 修改Host头伪装为内部用户
  • 绕过本地访问限制

靶场示例:

  • 通过robots.txt发现管理页面
  • 修改Host为localhost或127.0.0.1
  • 成功访问受限管理功能

4.4 基于路由的SSRF

  • 利用负载均衡/反向代理的路由特性
  • 通过修改Host将请求转发到内部网络

靶场示例1:

  1. 测试向外部发请求的能力
  2. 爆破内部admin主机地址(192.168.0.0/24)
  3. 发现admin位于192.168.0.3
  4. 构造删除用户请求

靶场示例2:

  1. 直接修改Host被禁止
  2. 使用绝对URL绕过限制
  3. 爆破发现后台位于192.168.0.26
  4. 构造删除请求

4.5 连接状态攻击

  • 服务器仅验证同一连接的第一个请求
  • 后续请求假设Host与第一个相同

靶场示例:

  1. 禁用HTTP/2,使用HTTP/1.1
  2. 创建标签组发送序列化请求
  3. 第一个请求使用合法Host
  4. 第二个请求修改Host访问内部管理
  5. 构造删除请求

4.6 错误格式请求行SSRF

  • 利用特殊格式请求行:
    GET @private-intranet/example HTTP/1.1
    
  • 可能被解释为使用用户名访问内部网站

5. 防御措施

  1. 限制使用绝对地址

    • 禁止或严格验证绝对URL请求
  2. 严格验证Host头

    • 实施完整的Host验证
    • 包括域名和端口
  3. 限制覆盖Host头

    • 禁用或严格过滤X-Forwarded-Host等头
  4. 设置白名单域

    • 仅允许访问预先批准的域名
  5. 保护内部虚拟主机

    • 加强内部主机的访问控制
    • 防止通过Host头爆破发现
  6. 连接处理安全

    • 不依赖连接状态假设
    • 对每个请求进行完整验证
  7. 请求行验证

    • 拒绝格式异常的请求行
    • 防止特殊格式利用

6. 总结

HTTP Host头攻击利用服务器对Host头的信任不足或验证缺陷,通过多种技术手段实现从密码重置投毒到SSRF等多种攻击。防御需要从应用程序和基础设施两个层面入手,实施严格的验证和过滤机制,特别要注意第三方组件可能引入的潜在风险。

HTTP Host头攻击全面解析与防御指南 1. HTTP Host头基础概念 1.1 Host头定义与作用 HTTP/1.1开始强制要求的请求头 指定客户端要访问的域名或IP 示例: 1.2 Host头的应用场景 虚拟主机 : 将一台物理服务器虚拟成多台服务器 常见于SaaS服务中 用户通常察觉不到多个应用共享同一IP 中转路由流量 : 不同应用部署在不同物理服务器 通过负载均衡或反向代理技术路由流量 常见于CDN应用场景 2. HTTP Host头攻击原理 2.1 攻击产生原因 服务器端过度信任 : 默认用户不会修改Host头 缺乏足够验证或转义处理 基础设施配置问题 : 第三方组件默认支持某些覆盖Host的头 管理员不了解这些头的存在导致过滤不严 2.2 攻击类型 Web缓存投毒 特定功能点的商业逻辑漏洞 基于路由的SSRF 经典服务器端漏洞(如SQL注入) 3. HTTP Host头攻击测试方法 3.1 基本测试步骤 修改Host为任意域名/IP,观察响应变化 检查验证点缺陷: 仅验证域名不验证端口 仅验证是否以允许子域结尾 3.2 构造特殊请求 注入多个Host头 : 使用绝对URL : 添加换行/空格 : 使用可覆盖Host的请求头 : 其他类似头:X-Host、X-Forwarded-Server、X-HTTP-Host-Override、Forwarded 4. HTTP Host头攻击利用方式 4.1 密码重置投毒 攻击流程: 用户提交密码重置请求 系统将用户名/邮箱与Token绑定 用户收到含Token的重置链接 用户点击链接修改密码后Token销毁 攻击构造: 修改密码重置请求中的Host为目标域 受害者收到指向恶意域的链接 攻击者获取Token 攻击者使用Token重置密码 靶场示例: 基础密码重置投毒 : 修改Host为攻击者控制的邮件服务器域名 从访问日志获取重置Token 构造重置链接完成攻击 通过悬挂标记的密码重置投毒 : 利用端口号验证缺陷 将payload附加在端口号后 通过访问日志获取系统分配的密码 4.2 Web缓存投毒 利用Host头注入恶意内容 使受害者接收投毒的缓存响应 靶场示例: 添加额外Host头覆盖原Host 伪造恶意JS文件 污染Web缓存影响访问者 4.3 访问受限功能绕过 修改Host头伪装为内部用户 绕过本地访问限制 靶场示例: 通过robots.txt发现管理页面 修改Host为localhost或127.0.0.1 成功访问受限管理功能 4.4 基于路由的SSRF 利用负载均衡/反向代理的路由特性 通过修改Host将请求转发到内部网络 靶场示例1: 测试向外部发请求的能力 爆破内部admin主机地址(192.168.0.0/24) 发现admin位于192.168.0.3 构造删除用户请求 靶场示例2: 直接修改Host被禁止 使用绝对URL绕过限制 爆破发现后台位于192.168.0.26 构造删除请求 4.5 连接状态攻击 服务器仅验证同一连接的第一个请求 后续请求假设Host与第一个相同 靶场示例: 禁用HTTP/2,使用HTTP/1.1 创建标签组发送序列化请求 第一个请求使用合法Host 第二个请求修改Host访问内部管理 构造删除请求 4.6 错误格式请求行SSRF 利用特殊格式请求行: 可能被解释为使用用户名访问内部网站 5. 防御措施 限制使用绝对地址 : 禁止或严格验证绝对URL请求 严格验证Host头 : 实施完整的Host验证 包括域名和端口 限制覆盖Host头 : 禁用或严格过滤X-Forwarded-Host等头 设置白名单域 : 仅允许访问预先批准的域名 保护内部虚拟主机 : 加强内部主机的访问控制 防止通过Host头爆破发现 连接处理安全 : 不依赖连接状态假设 对每个请求进行完整验证 请求行验证 : 拒绝格式异常的请求行 防止特殊格式利用 6. 总结 HTTP Host头攻击利用服务器对Host头的信任不足或验证缺陷,通过多种技术手段实现从密码重置投毒到SSRF等多种攻击。防御需要从应用程序和基础设施两个层面入手,实施严格的验证和过滤机制,特别要注意第三方组件可能引入的潜在风险。