通过HOST碰撞发现更多资产和漏洞|挖洞技巧

通过HOST碰撞发现更多资产和漏洞|挖洞技巧

X1lyS/Yf3te 渗透安全HackTwo 2025-04-13 16:01

0x01 前言 

HOST碰撞的概念已提出很久了,但是网上的部分文章感觉都解释得不太详细,可能是作者水平比较高的缘故哈哈,自行省略了很多细节没谈。于是想写一篇新手师傅也能看懂的HOST碰撞的文章,解释清楚HOST碰撞到底原理是啥,怎么利用?怎么修复?

参考文章:https://xz.aliyun.com/news/16167、https://xz.aliyun.com/news/16048

现在只对常读和星标的公众号才展示大图推送,建议大家把渗透安全HackTwo“设为星标”,否则可能就看不到了啦!

末尾可领取挖洞资料文件

0x02 漏洞详情

什么是反向代理

解释HOST碰撞之前,先要理解反向代理的概念,这一点很重要。

反向代理
是一种服务器配置,它代理客户端的请求并将其转发到一个或多个后端服务器。在这种模式下,客户端不知道实际的后端服务器地址,所有的请求都由反向代理服务器接收并转发给后端服务器处理,然后将结果返回给客户端。

与传统的正向代理(客户端请求通过代理访问外部资源)不同,反向代理的角色是隐藏后端服务器的存在,客户端只与代理服务器交互。反向代理通常用于负载均衡、提升安全性、缓存静态内容等场景。

有点懵?没事,看图说话:(客户端请求->互联网->NGINX反向代理->服务器)

举个例子比如我们作为客户端去访问a.test.com,在目标服务器没有使用反向代理的情况下,请求是直接到达服务器1的,也就是我们的客户端是直接与服务器进行交互的,此时去查询a.test.com的ip,就为DNS中解析绑定的IP,也就是服务器1的真实ip:210.120.1.111,并且也能直接使用其ip地址访问到服务器1!但是考虑到安全性,负载均衡,缓存机制等等问题,大部分企业在架构web服务时往往不会像这样直接把服务器1的真实ip暴露出来,而是在所有后端服务器之前,再架设一台Nginx反向代理服务器!

在有反向代理服务器的情况下,我们再次请求a.test.com,那么请求就先经过Nginx反向代理服务器,经过反向代理服务器的绑定配置检查发现a.test.com对应210.120.111主机,于是把请求转发给210.120.111主机进行交互,210.120.111返回的响应,先返回给Nginx反向代理服务器,再由它返回给客户端,而如果直接使用服务器1的真实ip地址访问,则不会返回服务器1的内容,因为有Nginx反向代理的存在,它只允许我们使用正确的对应绑定的域名访问,也就是a.test.com,此时去查询其ip地址,就不再是210.120.111了,而是DNS解析绑定的210.120.1,也就是反向代理服务器的ip,而单独去访问这个210.120.1地址也看不到什么东西或者是一些默认界面(取决于怎么配置),于是就隐藏了后端服务的IP地址,让我们客户端或者攻击者请求a.test.com时不知道到底是哪一个服务器在与我们进行交互。

也就是,当客户端请求 a.test.com 时,DNS服务器会返回反向代理服务器的IP(例如 210.120.1)。反向代理服务器收到请求后,根据其配置文件中的规则(比如基于域名)将请求转发到正确的后端服务器(例如 210.120.1.111)。

相信师傅们在渗透中就经常遇到这样的情况,Apache默认界面,Nginx默认界面,404,403,400,空白界面等等;还有多个不同的域名去查询它们的ip地址居然都是相同的,但是访问这个ip地址又什么都没有……这些都很可能是使用了反向代理的情况

HOST碰撞的原理

明白了反向代理,HOST碰撞就很好懂了。HOST碰撞其实就是反向代理配置不当导致的:

比如我想给服务器1配置反向代理,使得外部只能通过a.test.com访问服务器1的地址210.120.1.111,而使用其真实ip访问是异常状态,则无法解析,我需要做这几步操作,第一,我首先得把a.test.com域名解析到210.120.1.1 IP地址,也就是反向代理的地址,让DNS服务器能解析a.test.com域名到反向代理服务器,然后第二步才是反向代理的配置,在反向代理服务器上,把a.test.com域名与210.120.1.111地址进行绑定,从而使得访问a.test.com时,反向代理能把请求正确地转发到210.120.1.111地址

示例配置代码:/etc/nginx/nginx.conf 在反向代理服务器210.120.1.1上配置

server {
    listen 80;
    server_name a.test.com;  # 设置域名,确保 DNS 已将 a.test.com 指向你的服务器
    location / {
        proxy_pass http://210.120.1.111;  # 设置反向代理目标地址(IP地址)
        proxy_set_header Host $host;  # 保留原始请求头的 Host(确保目标服务器能识别到正确的域名)
        proxy_set_header X-Real-IP $remote_addr;  # 设置真实客户端 IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 传递客户端 IP 链
        proxy_set_header X-Forwarded-Proto $scheme;  # 传递协议(http 或 https)
    }
    # 可选:处理HTTPS的反向代理
    # listen 443 ssl;
    # ssl_certificate /path/to/certificate.crt;
    # ssl_certificate_key /path/to/private.key;
    # 其他 HTTPS 配置...
}

那么HOST碰撞怎么产生的呢?怎么利用它发现隐藏资产的呢?

其实是这样的:以下是HOST碰撞的其中一种情况!

比如,我先给域名oa.admin.com配置DNS解析到反向代理服务器210.110.110.110,然后在反向代理服务器上配置把oa.admin.com域名与内网的192.168.1.1的web服务器绑定,这样使得外部只能通过oa.admin.com域名访问内部的192.168.1.1web服务器,但是假设某一天,内部发现该web系统存在一个漏洞,于是不能让外部再通过这个oa.admin.com域名访问该内网系统了,需要进行维护,于是就把原本会使得oa.admin.com解析到210.110.110.110的DNS域名解析给删除掉了,这样外部就无法通过oa.admin.com域名访问192.168.1.1内部系统了对吗,对个damn,如果仅仅这样做,恰好导致了HOST碰撞!为什么呢?不要忘了,我们虽然删掉了oa.admin.com到210.110.110.110域名解析,但是反向代理服务器本身的域名绑定还没有删除!!!也就是反向代理的功能仍然可用,仍然可以把来自oa.admin.com域名的请求,转发给配置里的192.168.1.1web服务器,只不过仅仅是oa.admin.com无法解析到反向代理服务器而已了,那么攻击者只需要做好信息收集,假设已经知道了oa.admin.com域名,不知道反向代理的ip,那么使用收集到的信息不断的给oa.admin.com域名匹配ip地址,不断尝试,直到能访问到某个正常系统为止,再手动把oa.admin.com解析到匹配的ip地址去,不就行了嘛,因为即使删除掉了DNS解析,我们也能自己在本地host文件中,手动解析过去啊,只要反向代理的绑定配置还未被删除,就存在这个漏洞。这就是HOST碰撞。总结起来其实就是两两碰撞域名与ip,看能不能解析到原本不能正常访问到的系统

HOST碰撞利用

以上提到的情况只是HOST碰撞中的一种最常利用的情况,实际上这个概念还是比较宽泛的,不过其他情况都不太常见了于是不做讨论。

理解了原理,那么怎么利用呢?其实上面也说了,主要依赖信息收集!
– 第一步:收集反向代理服务器的ip

  • 第二步:收集解析异常的域名,能解析到内网中的域名

  • 第三步:手动把域名解析为某个ip,采用笛卡尔积碰撞,两两匹配,直到域名能访问出某个系统

那么重点就是收集这些可能的ip+域名了,怎么找呢?就是用信息收集的方法啊
– 可以边打边收集边筛选

  • 还可以写个脚本,批量地域名转换ip,并记录筛选出解析异常的域名。

  • 不嫌慢的话,也可以直接把收集到的全部域名+ip都拿去碰撞

筛选出解析异常的域名的小脚本:读取subdomain.txt,输出result.txt

可以使用这些工具,填入收集到的信息,就可以检测HOST碰撞了:
– HostCollision:
https://github.com/pmiaowu/HostCollision

  • Hosts_scan:
    https://github.com/fofapro/Hosts_scan

修复HOST碰撞

1. 检查DNS配置

确保DNS记录指向正确的IP地址。如果使用/etc/hosts
文件进行域名映射,确保文件中没有重复的条目。
– 查看

/etc/hosts

文件:

  • 删除或修正重复的域名映射。

2. 检查虚拟主机配置

如果在Web服务器(如Apache或Nginx)中使用了虚拟主机配置,确保配置文件中没有冲突。例如,在Nginx中,可能会看到类似以下的配置:

server {
    listen 80;
    server_name example.com;
    root /var/www/example;
}
server {
    listen 80;
    server_name example.com;  # 这里会造成冲突
    root /var/www/another_example;
}

确保每个server_name
是唯一的,或者如果像多个域名指向同一网站,使用通配符来避免冲突:

server {
    listen 80;
    server_name *.example.com;
    root /var/www/example;
}

5. 检查反向代理配置

如果使用反向代理服务器(例如Nginx或HAProxy),确保代理配置没有错误或冲突。例如,确保不同的后端服务没有使用相同的端口或路径。
0x03 漏洞利用1、准备一台有nginx的服务器2、准备一个域名,该域名DNS解析到我们的nginx服务器代理此处我们就不使用https了,只是做个小实验//安装并启动nginxsudo apt install nginxsudo systemctl start nginxsudo systemctl enable nginx//配置企业常用的反向代理配置:只能用域名访问代理服务器才能访问到内容,否则返回其他页面:包括404sudo vim /etc/nginx/sites-available/default修改上述文件内容为下述 server {    listen 80;  # 监听 HTTP 请求,也就是通过访问80端口即可访问到后端服务器    server_name xxx.com; # 替换为你的域名    if ($host != ‘xxx.xxx.com’) {        return 404;  # 如果不是预期域名,返回 404    }    # 反向代理到后端服务    location / {        proxy_pass https://xxx.xxx.xxx.5:5003/login;  # 替换为你的后端服务地址和端口        proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        proxy_http_version 1.1;        proxy_set_header Connection “upgrade”;    }    # 默认的 404 页面    error_page 404 /404.html;    location = /404.html {        root /var/www/html;  # 替换为你的静态文件目录    }    # 默认的 50x 页面    error_page 500 502 503 504 /50x.html;    location = /50x.html {        root /var/www/html;  # 替换为你的静态文件目录    }}然后访问域名www.xxx.com就会成功代理上后端服务器https://xxx.xxx.xxx.5:5003/login下图为“后端服务器”下图为反向代理服务器的效果,大概由于ssl证书、以及我的域名未备案的原因导致了无法完整显示页面,这里不重要,只是展示一个效果而已,有个标题证明代理成功即可。直接用ip访问80端口就不行,就会返回404,因为上面的配置。直接通过IP访问不行,也就是我们有时候在渗透时,会存在一些IP形式的url,访问会发现返回502、403、404、nginx默认页面、centos默认页面等,这种多半就是代理服务器,它有可能规定了只能使用域名访问,不能直接通过ip访问,这种我们就必须要把这种奇怪的ip保存下来,下面会有用。还有一种情况就是我们访问一个由域名组成的url,结果啥也没有。但是这个url不能来着这么无缘无故,其实导致这个的原因就是域名被“废弃”,未解析到任何IP,其中就又存在一种可能,就是使用者一开始把这个域名解析到了代理服务器,不过之后又可能某种原因,废除了这域名。既然之前解析到过代理服务器并且代理服务器使用过,代理服务器的代理配置就极有可能没有被删除。在上面的基础上,我们就做个实验,模拟上述情况,展示其利用方式。1、删除域名DNS解析代理服务器2、静候其失效,就相当于废除了该域名。好了!成功返回502,说明该域名没有解析到任何一个IP我们重新访问代理服务器的80端口,并抓包,把请求头host修改为之前代理服务器配置的域名,发包行咯!发现单独使用ip或者域名访问啥也没有,结果两者适当结合一下,却能访问一些不能直接访问的页面。导致这个的原因就是上述提到的“代理服务器上的配置未删除”也就是host碰撞这一技术诞生的根本原因。何为host碰撞?host碰撞就是通过IP(用作请求url)和域名(用作请求头中的Host)两者的搭配发包,访问到代理服务器,从而访问到可能被隐藏的后端服务器资产的一个信息收集技术。host碰撞的作用?在信息收集收集资产时,发现可能被废弃的代理服务器,从而发现隐藏的后端服务器。所以该操作可以直接在收集c段、ip、域名之后直接做。如何实现host碰撞?在我们资产收集后,肯定就会存在有些资产不能直接访问的情况,很有可能就是上述实验中的情况,需要host碰撞。而且这样的资产在一些大型的攻防演练、src中绝对不会少。所以我们在拿到比较全的 域名资产、ip资产的时候就可以测测活,记录下回显不是200的资产,并分装到ip.txt、domain.txt文件中,先解决一部分回显不正常的,然后在指纹识别的时候,可以看到一些标题如:Centos欢迎页面、nginx页面、其他欢迎页面这种没有实质内容的标题,我们也可以进一步把他们添加在之前收集的ip.txt、domain.txt文件中。然后直接上工具。HostCollision-2.2.9工具功能查看:把上述得到的ip.txt、domain.txt扔在该工具目录下运行以下命令:java -jar HostCollision.jar -ifp ip.txt -hfp domain.txt然后得到碰撞成功的列表,我们正常测试站点时肯定不能一直手动切换host,于是下面就推荐两个方法1、burp(match and replace rules)方便我们直接抓包测试。2、浏览器插件:ModHeader这个我更为推荐,因为有时候不知道怎么回事,burp的那个匹配替换功能会失效,但是用了插件就可以很好的解决这个问题,它可以自动锁定我们自定义的请求头。点击Mod,并选择request header然后填写我们的host及其值即可,就可以不管了,直接刷新网页就行了。但是这个设置会影响其他网页的正常访问,所以设置只在我们当前测试站点使用,右键扩展图标,然后如下图勾选即可。即可正常测试了。0x04 总结HOST碰撞是一种因反向代理配置不当而产生的信息收集技术,攻击者可通过将废弃域名与代理服务器IP组合构造请求,从而访问隐藏的后端服务。它常用于发现被隐藏或已废弃但仍存在配置残留的资产,在渗透测试与红队中价值极高。喜欢的师傅可以点赞转发支持一下谢谢!0x05 内部星球VIP介绍V1.4(福利)如果你想学习更多渗透SRC挖洞技术/攻防/免杀/应急溯源/赏金赚取/工作内推/欢迎加入我们内部星球可获得内部工具字典和享受内部资源。1.每周更新1day/0day漏洞刷分上分,目前已更新至3700+2.包含网上一些付费工具/BurpSuite漏洞检测插件/fuzz字典等等3.Fofa会员Ctfshow各种账号会员共享等等4.最新SRC挖掘/红队/代审视频资源等等5. …..6.详情直接点击下方链接进入了解,后台回复” 星球 “获取优惠先到先得!后续资源会更丰富在加入还是低价!(即将涨价)以上仅介绍部分内容还没完!点击下方地址全面了解👇🏻👉点击了解加入–>>2025内部VIP星球福利介绍V1.4版本-1day/0day漏洞库及内部资源更新
结尾

免责声明

获取方法

回复“app
” 获取  app渗透和app抓包教程

回复“渗透字典
” 获取 一些字典已重新划分处理(需要内部专属fuzz字典可加入星球获取,内部字典多年积累整理好用!持续整理中!)

回复“书籍
” 获取 网络安全相关经典书籍电子版pdf

最后必看

文章中的案例或工具仅面向合法授权的企业安全建设行为,如您需要测试内容的可用性,请自行搭建靶机环境,勿用于非法行为。如
用于其他用途,由使用者承担全部法律及连带责任,与作者和本公众号无关。
本项目所有收录的poc均为漏洞的理论判断,不存在漏洞利用过程,不会对目标发起真实攻击和漏洞利用。文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用。
如您在使用本工具或阅读文章的过程中存在任何非法行为,您需自行承担相应后果,我们将不承担任何法律及连带责任。本工具或文章或来源于网络,若有侵权请联系作者删除,请在24小时内删除,请勿用于商业行为,自行查验是否具有后门,切勿相信软件内的广告!

往期推荐

1. 内部VIP知识星球福利介绍V1.4版本0day推送

2.最新Nessus2025.01.06版本主机漏洞工具

3. 最新BurpSuite2024.11.2专业(稳定版)

4. 最新xray1.9.11高级版下载Windows/Linux

5. 最新HCL AppScan Standard 10.2.128273破解版下载

渗透安全HackTwo

微信号:关注公众号获取

后台回复星球加入:
知识星球

扫码关注 了解更多

喜欢的朋友可以点赞转发支持一下