通过HOST碰撞发现更多资产和漏洞

admin 2025年5月27日16:36:48评论29 views字数 6900阅读23分0秒阅读模式

0x01 前言

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

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

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

末尾可领取挖洞资料文件

0x02 漏洞详情

什么是反向代理

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

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

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

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

通过HOST碰撞发现更多资产和漏洞

举个例子比如我们作为客户端去访问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碰撞发现更多资产和漏洞

可以使用这些工具,填入收集到的信息,就可以检测HOST碰撞了:

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

修复HOST碰撞

1. 检查DNS配置

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

  • 查看
    /etc/hosts

    文件:

    cat /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

下图为“后端服务器”

通过HOST碰撞发现更多资产和漏洞

下图为反向代理服务器的效果,大概由于ssl证书、以及我的域名未备案的原因导致了无法完整显示页面,这里不重要,只是展示一个效果而已,有个标题证明代理成功即可。

通过HOST碰撞发现更多资产和漏洞

直接用ip访问80端口就不行,就会返回404,因为上面的配置。

通过HOST碰撞发现更多资产和漏洞

直接通过IP访问不行,也就是我们有时候在渗透时,会存在一些IP形式的url,访问会发现返回502、403、404、nginx默认页面、centos默认页面等,这种多半就是代理服务器,它有可能规定了只能使用域名访问,不能直接通过ip访问,这种我们就必须要把这种奇怪的ip保存下来,下面会有用。

还有一种情况就是我们访问一个由域名组成的url,结果啥也没有。但是这个url不能来着这么无缘无故,其实导致这个的原因就是域名被“废弃”,未解析到任何IP,其中就又存在一种可能,就是使用者一开始把这个域名解析到了代理服务器,不过之后又可能某种原因,废除了这域名。既然之前解析到过代理服务器并且代理服务器使用过,代理服务器的代理配置就极有可能没有被删除。在上面的基础上,我们就做个实验,模拟上述情况,展示其利用方式。

1、删除域名DNS解析代理服务器

通过HOST碰撞发现更多资产和漏洞

2、静候其失效,就相当于废除了该域名。好了!成功返回502,说明该域名没有解析到任何一个IP

通过HOST碰撞发现更多资产和漏洞

我们重新访问代理服务器的80端口,并抓包,把请求头host修改为之前代理服务器配置的域名,发包

通过HOST碰撞发现更多资产和漏洞

行咯!发现单独使用ip或者域名访问啥也没有,结果两者适当结合一下,却能访问一些不能直接访问的页面。

通过HOST碰撞发现更多资产和漏洞

导致这个的原因就是上述提到的“代理服务器上的配置未删除”

也就是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

工具功能查看:

通过HOST碰撞发现更多资产和漏洞

把上述得到的ip.txt、domain.txt扔在该工具目录下

运行以下命令:

java -jar HostCollision.jar -ifp ip.txt -hfp domain.txt
通过HOST碰撞发现更多资产和漏洞

然后得到碰撞成功的列表,我们正常测试站点时肯定不能一直手动切换host,于是下面就推荐两个方法

1、burp(match and replace rules)

方便我们直接抓包测试。

2、浏览器插件:ModHeader

这个我更为推荐,因为有时候不知道怎么回事,burp的那个匹配替换功能会失效,但是用了插件就可以很好的解决这个问题,它可以自动锁定我们自定义的请求头。

点击Mod,并选择request header

通过HOST碰撞发现更多资产和漏洞
通过HOST碰撞发现更多资产和漏洞
通过HOST碰撞发现更多资产和漏洞

然后填写我们的host及其值即可,就可以不管了,直接刷新网页就行了。

通过HOST碰撞发现更多资产和漏洞

但是这个设置会影响其他网页的正常访问,所以设置只在我们当前测试站点使用,右键扩展图标,然后如下图勾选即可。

通过HOST碰撞发现更多资产和漏洞

即可正常测试了。

0x04 总结

HOST碰撞是一种因反向代理配置不当而产生的信息收集技术,攻击者可通过将废弃域名与代理服务器IP组合构造请求,从而访问隐藏的后端服务。它常用于发现被隐藏或已废弃但仍存在配置残留的资产,在渗透测试与红队中价值极高。喜欢的师傅可以点赞转发支持一下谢谢!

0x05

原文始发于微信公众号(渗透安全HackTwo):通过HOST碰撞发现更多资产和漏洞|挖洞技巧

 

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月27日16:36:48
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   通过HOST碰撞发现更多资产和漏洞http://cn-sec.com/archives/3952560.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息