高级漏洞篇之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头的应用场景
-
虚拟主机:
- 将一台物理服务器虚拟成多台服务器
- 常见于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头:
GET /example HTTP/1.1 Host: vulnerable-website.com Host: bad-stuff-here -
使用绝对URL:
GET https://vulnerable-website.com/ HTTP/1.1 Host: bad-stuff-here -
添加换行/空格:
GET /example HTTP/1.1 Host: bad-stuff-here Host: vulnerable-website.com -
使用可覆盖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 密码重置投毒
攻击流程:
- 用户提交密码重置请求
- 系统将用户名/邮箱与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
- 利用特殊格式请求行:
GET @private-intranet/example HTTP/1.1 - 可能被解释为使用用户名访问内部网站
5. 防御措施
-
限制使用绝对地址:
- 禁止或严格验证绝对URL请求
-
严格验证Host头:
- 实施完整的Host验证
- 包括域名和端口
-
限制覆盖Host头:
- 禁用或严格过滤X-Forwarded-Host等头
-
设置白名单域:
- 仅允许访问预先批准的域名
-
保护内部虚拟主机:
- 加强内部主机的访问控制
- 防止通过Host头爆破发现
-
连接处理安全:
- 不依赖连接状态假设
- 对每个请求进行完整验证
-
请求行验证:
- 拒绝格式异常的请求行
- 防止特殊格式利用
6. 总结
HTTP Host头攻击利用服务器对Host头的信任不足或验证缺陷,通过多种技术手段实现从密码重置投毒到SSRF等多种攻击。防御需要从应用程序和基础设施两个层面入手,实施严格的验证和过滤机制,特别要注意第三方组件可能引入的潜在风险。