HOST 碰撞漏洞原理+无缝集成一把梭哈
字数 2109 2025-08-29 08:30:06

HOST碰撞漏洞原理与利用完全指南

一、反向代理基础

1.1 反向代理概念

反向代理是一种服务器配置,它代理客户端的请求并将其转发到一个或多个后端服务器。在这种模式下:

  • 客户端不知道实际的后端服务器地址
  • 所有请求由反向代理服务器接收并转发
  • 处理结果通过反向代理返回给客户端

访问流程对比

  • 无反向代理:客户端 → 请求 → 服务器 → 响应 → 客户端
  • 有反向代理:客户端 → 请求 → 反向代理 → 服务器 → 响应 → 反向代理 → 客户端

关键区别:有反向代理时不能直接通过IP访问服务器,域名DNS解析后也不是真实IP。

1.2 主机与Host关系

单个Web服务器可以托管多个网站/应用,这些网站可能:

  • 拥有不同域名
  • 共享同一个IP地址
  • 服务器通过HTTP请求中的Host头部字段确定要访问的网站

服务器配置示例

Nginx

  • 配置文件:/etc/nginx/nginx.conf/etc/nginx/sites-available/default
  • 使用server_name指令绑定多个域名

Apache

  • 配置文件:/etc/httpd/httpd.conf/etc/apache2/sites-available/000-default.conf
  • VirtualHost配置块中使用ServerNameServerAlias指令绑定域名

二、DNS解析机制

DNS(Domain Name System)实现域名与IP地址的相互映射,解析步骤:

  1. 浏览器缓存检查
  2. 本地hosts文件检查(HOST碰撞的修改点)
  3. 本地区域域名服务器(LDNS)
  4. 上级域名服务器(递归查询)

三、HOST碰撞漏洞原理

3.1 漏洞场景

场景一

  • 网站对外主域名:www.test.com
  • 内网存在多个业务系统绑定内网域名(如manage.test.com)
  • 公网DNS无法解析内网域名
  • 访问条件:
    • 知道内网域名和对应IP
    • 本地hosts文件写入绑定关系
  • 导致"隐形资产"问题

场景二

  1. 正常配置:外部域名(oa.admin.com)解析到反向代理IP(210.110.110.110)
  2. 域名删除:管理员删除oa.admin.com的DNS解析
  3. 反向代理未删除:配置仍保留
  4. 攻击者:
    • 收集信息猜测域名和IP
    • 修改本地hosts文件绕过DNS解析
    • 访问本应禁用的内部系统

场景三

  • admin.example.com未公开但与www.example.com共享IP
  • 通过reverse IP lookup发现该域名
  • 直接访问目标IP并修改Host头
  • 成功访问后台管理系统

3.2 漏洞复现

实验环境

  • 虚拟机安装Nginx作为反向代理
  • 本机运行Tomcat服务(192.168.3.101:8081)
  • 虚拟机IP(192.168.44.133),域名www.test1.com

Nginx配置

server {
    listen 80;
    server_name _;  # 匹配任意域名
    return 400;     # IP访问返回400
}

server {
    listen 80;
    server_name www.test1.com;  # 匹配特定域名
    location / {
        proxy_pass http://192.168.3.101:8081;  # 转发到Tomcat
    }
}

访问测试

  1. 访问192.168.44.133 → 返回400
  2. 访问www.test1.com(无DNS解析)→ 访问不到
  3. 直接访问IP并修改Host头为www.test1.com → 成功访问Tomcat

四、漏洞利用方法

4.1 信息收集

需要收集:

  • 可疑IP或域名
  • 域名解析指向内网IP的情况
  • IP访问时的响应特征:
    • 4xx状态码(400/403/404)
    • 5xx错误
    • 200状态但无响应

4.2 利用工具

工具一:HostCollision

项目地址:https://github.com/pmiaowu/HostCollision

目录结构

HostCollision
├── HostCollision.jar (主程序)
├── config.yml (配置文件)
├── dataSource
│   ├── ipList.txt (目标IP,一行一个)
│   └── hostList.txt (目标Host,一行一个)

使用步骤

  1. 修改ipList.txt和hostList.txt
  2. 运行程序
  3. 结果生成在根目录的"年-月-日_8位随机数.csv/txt"文件中

自定义修改

  • 可修改代码固定输出文件名(如改为result.csv)
  • 处理结果时建议先删除旧文件再生成新文件

工具二:Hosts_scan

项目地址:https://github.com/fofapro/Hosts_scan

特点:

  • Python编写
  • 较长时间未更新

4.3 集成开发建议

后端逻辑

  1. 文件处理:运行前删除旧结果文件
  2. 运行工具进行HOST碰撞
  3. 监控新文件生成作为完成标志
  4. 使用正则处理结果数据

前端展示

  • 实时刷新状态
  • 优化结果显示便于复制
  • 显示处理进度

五、防御措施

  1. 反向代理配置

    • 严格限制允许的Host头
    • 无效Host请求返回统一错误页面
  2. DNS管理

    • 及时清理不再使用的DNS记录
    • 监控异常的DNS查询
  3. 访问控制

    • 内网服务实施网络层访问控制
    • 关键系统使用双向认证
  4. 监控审计

    • 记录带有非常见Host头的请求
    • 定期审计服务器配置
  5. 安全意识

    • 避免在公网暴露内网域名
    • 及时回收测试/临时环境的配置

六、总结

HOST碰撞漏洞利用的是服务器配置与DNS管理之间的不一致性,通过手动指定Host头绕过访问限制。防御关键在于严格的配置管理和多层访问控制。自动化工具可以大大提高漏洞检测效率,但使用时应注意结果处理和误报过滤。

HOST碰撞漏洞原理与利用完全指南 一、反向代理基础 1.1 反向代理概念 反向代理是一种服务器配置,它代理客户端的请求并将其转发到一个或多个后端服务器。在这种模式下: 客户端不知道实际的后端服务器地址 所有请求由反向代理服务器接收并转发 处理结果通过反向代理返回给客户端 访问流程对比 : 无反向代理 :客户端 → 请求 → 服务器 → 响应 → 客户端 有反向代理 :客户端 → 请求 → 反向代理 → 服务器 → 响应 → 反向代理 → 客户端 关键区别:有反向代理时不能直接通过IP访问服务器,域名DNS解析后也不是真实IP。 1.2 主机与Host关系 单个Web服务器可以托管多个网站/应用,这些网站可能: 拥有不同域名 共享同一个IP地址 服务器通过HTTP请求中的Host头部字段确定要访问的网站 服务器配置示例 : Nginx : 配置文件: /etc/nginx/nginx.conf 或 /etc/nginx/sites-available/default 使用 server_name 指令绑定多个域名 Apache : 配置文件: /etc/httpd/httpd.conf 或 /etc/apache2/sites-available/000-default.conf 在 VirtualHost 配置块中使用 ServerName 和 ServerAlias 指令绑定域名 二、DNS解析机制 DNS(Domain Name System)实现域名与IP地址的相互映射,解析步骤: 浏览器缓存检查 本地hosts文件检查(HOST碰撞的修改点) 本地区域域名服务器(LDNS) 上级域名服务器(递归查询) 三、HOST碰撞漏洞原理 3.1 漏洞场景 场景一 : 网站对外主域名:www.test.com 内网存在多个业务系统绑定内网域名(如manage.test.com) 公网DNS无法解析内网域名 访问条件: 知道内网域名和对应IP 本地hosts文件写入绑定关系 导致"隐形资产"问题 场景二 : 正常配置:外部域名(oa.admin.com)解析到反向代理IP(210.110.110.110) 域名删除:管理员删除oa.admin.com的DNS解析 反向代理未删除:配置仍保留 攻击者: 收集信息猜测域名和IP 修改本地hosts文件绕过DNS解析 访问本应禁用的内部系统 场景三 : admin.example.com未公开但与www.example.com共享IP 通过reverse IP lookup发现该域名 直接访问目标IP并修改Host头 成功访问后台管理系统 3.2 漏洞复现 实验环境 : 虚拟机安装Nginx作为反向代理 本机运行Tomcat服务(192.168.3.101:8081) 虚拟机IP(192.168.44.133),域名www.test1.com Nginx配置 : 访问测试 : 访问192.168.44.133 → 返回400 访问www.test1.com(无DNS解析)→ 访问不到 直接访问IP并修改Host头为www.test1.com → 成功访问Tomcat 四、漏洞利用方法 4.1 信息收集 需要收集: 可疑IP或域名 域名解析指向内网IP的情况 IP访问时的响应特征: 4xx状态码(400/403/404) 5xx错误 200状态但无响应 4.2 利用工具 工具一:HostCollision 项目地址:https://github.com/pmiaowu/HostCollision 目录结构 : 使用步骤 : 修改ipList.txt和hostList.txt 运行程序 结果生成在根目录的"年-月-日_ 8位随机数.csv/txt"文件中 自定义修改 : 可修改代码固定输出文件名(如改为result.csv) 处理结果时建议先删除旧文件再生成新文件 工具二:Hosts_ scan 项目地址:https://github.com/fofapro/Hosts_ scan 特点: Python编写 较长时间未更新 4.3 集成开发建议 后端逻辑 : 文件处理:运行前删除旧结果文件 运行工具进行HOST碰撞 监控新文件生成作为完成标志 使用正则处理结果数据 前端展示 : 实时刷新状态 优化结果显示便于复制 显示处理进度 五、防御措施 反向代理配置 : 严格限制允许的Host头 无效Host请求返回统一错误页面 DNS管理 : 及时清理不再使用的DNS记录 监控异常的DNS查询 访问控制 : 内网服务实施网络层访问控制 关键系统使用双向认证 监控审计 : 记录带有非常见Host头的请求 定期审计服务器配置 安全意识 : 避免在公网暴露内网域名 及时回收测试/临时环境的配置 六、总结 HOST碰撞漏洞利用的是服务器配置与DNS管理之间的不一致性,通过手动指定Host头绕过访问限制。防御关键在于严格的配置管理和多层访问控制。自动化工具可以大大提高漏洞检测效率,但使用时应注意结果处理和误报过滤。