host碰撞
字数 1035 2025-08-12 11:34:13

Hosts碰撞技术详解与实战指南

0x00 基本概念

Hosts碰撞是一种用于突破网络边界限制的技术,主要应用于以下场景:

  • 搜集了大量IP资产,端口开放WEB服务但访问返回403/404/400错误
  • 目录扫描无法获取有效信息
  • 目标系统存在仅限内网访问的域名

技术原理:当直接访问IP返回4xx错误,但指定Host头为特定域名时访问正常,即可判断存在Hosts碰撞可能。这是由于服务器配置了域名绑定(如Nginx的default_server或Apache的ServerName),只有通过特定域名才能访问服务。

0x01 技术背景

HTTP/1.1开始,Host头成为必需请求头,格式如下:

GET /web-security HTTP/1.1
Host: example.net

当请求经过代理转发时,Host值可能在到达后端前被修改,导致Host头攻击可能。

0x02 利用流程

1. 信息收集阶段

收集指向目标内网IP的域名

  • 使用工具如OneForAll(https://github.com/shmilylty/OneForAll)收集子域名
  • 筛选出指向内网IP的域名
  • 可补充常见内网办公系统子域名(如oa.internal、mail.corp等)

收集目标IP资产

  • 使用Goby等工具探测Web服务
  • 记录开放Web服务的IP地址

2. 碰撞测试

使用Hosts_scan工具(https://github.com/fofapro/Hosts_scan):

  • 将域名列表放入hosts.txt
  • 将IP列表放入ip.txt
  • 运行工具,通过对比数据包大小和标题识别匹配成功的Host头与IP

替代方法

  • 对特定IP的Host头进行Fuzz测试
  • 在Burp Proxy中配置Host头替换规则
  • 通过浏览器设置Burp代理访问目标IP

0x03 环境搭建与演示

实验环境配置

使用Docker搭建测试环境:

docker pull vultarget/host_collision
docker run -it -p 3333:8080 --rm vultarget/host_collision

Nginx配置解析

反向代理服务器配置

server {
    listen 8080 default_server;
    server_name _;
    return 400;
}

server {
    listen 8080;
    server_name test.com;
    location / {
        proxy_pass http://127.0.0.1:80;
        proxy_set_header Host $host:$server_port;
        root html;
        index index.html index.htm;
    }
}
  • 第一个server:无Host头或无效Host时返回400
  • 第二个server:Host为test.com时转发到127.0.0.1:80

业务服务器配置

server {
    listen 80;
    server_name localhost;
    location / {
        root /usr/share/nginx/html;
        index index.html index.htm;
    }
}

复现过程

  1. 不带Host访问:

    • 返回400错误
  2. 设置Host: test.com:

    • 成功访问隐藏业务

0x04 防御建议

  1. 不将服务IP直接暴露在公网
  2. 限制仅能通过VPN访问内部系统
  3. 配置严格的Host头验证机制
  4. 对未授权Host请求实施更严格的访问控制

参考资源

  1. Host头攻击与防御
  2. FreeBuf相关文章
  3. HackDig技术分析
Hosts碰撞技术详解与实战指南 0x00 基本概念 Hosts碰撞是一种用于突破网络边界限制的技术,主要应用于以下场景: 搜集了大量IP资产,端口开放WEB服务但访问返回403/404/400错误 目录扫描无法获取有效信息 目标系统存在仅限内网访问的域名 技术原理 :当直接访问IP返回4xx错误,但指定Host头为特定域名时访问正常,即可判断存在Hosts碰撞可能。这是由于服务器配置了域名绑定(如Nginx的default_ server或Apache的ServerName),只有通过特定域名才能访问服务。 0x01 技术背景 HTTP/1.1开始,Host头成为必需请求头,格式如下: 当请求经过代理转发时,Host值可能在到达后端前被修改,导致Host头攻击可能。 0x02 利用流程 1. 信息收集阶段 收集指向目标内网IP的域名 : 使用工具如OneForAll(https://github.com/shmilylty/OneForAll)收集子域名 筛选出指向内网IP的域名 可补充常见内网办公系统子域名(如oa.internal、mail.corp等) 收集目标IP资产 : 使用Goby等工具探测Web服务 记录开放Web服务的IP地址 2. 碰撞测试 使用Hosts_ scan工具(https://github.com/fofapro/Hosts_ scan): 将域名列表放入hosts.txt 将IP列表放入ip.txt 运行工具,通过对比数据包大小和标题识别匹配成功的Host头与IP 替代方法 : 对特定IP的Host头进行Fuzz测试 在Burp Proxy中配置Host头替换规则 通过浏览器设置Burp代理访问目标IP 0x03 环境搭建与演示 实验环境配置 使用Docker搭建测试环境: Nginx配置解析 反向代理服务器配置 : 第一个server:无Host头或无效Host时返回400 第二个server:Host为test.com时转发到127.0.0.1:80 业务服务器配置 : 复现过程 不带Host访问: 返回400错误 设置Host: test.com: 成功访问隐藏业务 0x04 防御建议 不将服务IP直接暴露在公网 限制仅能通过VPN访问内部系统 配置严格的Host头验证机制 对未授权Host请求实施更严格的访问控制 参考资源 Host头攻击与防御 FreeBuf相关文章 HackDig技术分析