0x00 前言
免责声明
本文仅用于网络安全知识学习,以及对本人拥有或获得明确授权的网站、服务器进行安全自查。
未经授权,请勿对他人的服务器、网站或网络资产进行探测和测试。任何技术都应在合法、合规的范围内使用。
基本信息
在 Web 安全测试中,我们通常会通过域名收集、DNS 查询等方式整理目标资产。
但有一个容易被忽略的问题:
一个域名停止解析,并不意味着它对应的网站已经从服务器上消失。
如果服务器仍然保留着该域名对应的站点配置,那么在满足网络可达条件时,仍可能通过指定 IP 和 Host 信息访问到对应站点。
这就是 Host 碰撞所利用的基本原理,示例如图:
/


0x01 什么是 Host 碰撞?
Host 碰撞(Host Header Collision),可以理解为利用 HTTP 请求中的 Host 信息,匹配服务器上不同虚拟主机或反向代理规则,从而发现默认访问方式下无法直接访问的站点。
在一台服务器上,可能同时部署着多个网站。
例如:
www.example.com:对外提供服务的正式网站。test.example.com:测试环境。dev.example.com:开发环境。admin.example.com:管理后台。old.example.com:已经停止使用的旧站点。
这些站点可能共用同一个 IP 地址,但通过不同的域名进行区分。
即使其中某个域名已经停止 DNS 解析,只要服务器还保留相应的站点绑定和转发配置,就可能存在被访问的风险。
因此,Host 碰撞关注的并不是 DNS 本身,而是:
当请求到达服务器后,服务器究竟根据什么信息决定返回哪个站点?
0x02 Host 碰撞的潜在危害
Host 碰撞本身并不等于漏洞,真正的风险在于服务器错误地暴露了本不应该公开的业务。
常见场景包括:
1. 内部业务意外暴露
一些企业会在同一台服务器或同一套反向代理架构中部署内部管理系统。
如果访问控制和站点路由配置不合理,原本只供内部使用的服务可能被外部访问。
2. 测试环境暴露
开发和测试环境通常包含尚未正式发布的功能、调试接口或测试数据。
这些环境如果没有独立的访问控制,就可能成为额外的安全风险。
3. 废弃站点仍然可以访问
部分业务停止运营后,只删除了 DNS 解析记录,却没有清理服务器上的虚拟主机配置。
结果就是:域名已经无法正常解析,但站点仍然存在于服务器中。
4. 隐藏管理入口暴露
一些管理后台并不希望被公开访问,但仅仅依靠域名不公开,并不能构成可靠的安全措施。
如果没有身份认证、网络访问限制等保护措施,就可能导致管理入口暴露。
需要注意:
隐藏域名不等于安全,停止 DNS 解析也不等于关闭服务。
0x03 技术原理
要理解 Host 碰撞,首先需要了解 DNS、HTTP Host 和虚拟主机之间的关系。
1. DNS 解析:找到服务器
当我们访问:
https://www.example.com
客户端首先需要通过 DNS 查询域名对应的 IP 地址。
假设解析结果为:
192.0.2.10
客户端便知道应该向哪个 IP 地址建立连接。
这里需要明确:
DNS 的作用是帮助客户端找到服务器,它并不直接决定服务器最终返回哪个网站。
2. HTTP Host:告诉服务器访问哪个站点
一台 Web 服务器可能部署多个网站。
如果这些网站共用一个 IP 和端口,服务器就需要一种机制区分用户想访问哪个网站。
HTTP/1.1 请求中,Host 请求头承担了这个作用。
例如:
GET / HTTP/1.1
Host: www.example.com服务器收到请求后,可以根据 Host 的值匹配对应的虚拟主机配置,并返回相应网站的内容。
因此,同一个 IP 地址可能根据不同的 Host 值返回不同的站点。
3. 虚拟主机:一个 IP 承载多个网站
虚拟主机(Virtual Host)是 Web 服务器常见的部署方式。
例如:
服务器 IP:192.0.2.10
www.example.com ──┐
test.example.com ──┼──> 同一台 Web 服务器
dev.example.com ──┘服务器通过域名匹配对应的网站配置。
Nginx、Apache 等 Web 服务器都支持这种机制。
反向代理也经常利用 Host 信息,将请求转发到不同的后端服务。
因此,Host 碰撞既可能涉及 Web 服务器的虚拟主机配置,也可能涉及反向代理的路由规则。
4. HTTPS:还需要关注 SNI
这里还有一个容易被忽略的细节:HTTPS。
在 HTTP 明文通信中,服务器可以直接读取 Host 请求头。
但在 HTTPS 中,客户端需要先完成 TLS 握手,然后才能发送加密的 HTTP 请求。
为了让服务器在 TLS 握手阶段就知道客户端希望访问哪个域名,TLS 引入了 SNI(Server Name Indication,服务器名称指示)扩展。
简单理解:
SNI:在 TLS 握手阶段帮助服务器选择对应的证书和 TLS 配置。
Host:在 HTTP 请求阶段告诉服务器客户端希望访问哪个站点。
两者通常对应同一个域名,但作用并不相同。
所以,HTTPS 环境下不能简单地认为修改 Host 就一定能访问对应站点,还需要考虑 TLS 握手、证书匹配和服务器配置。
0x04 检测原理与方法
Host 碰撞检测的核心,是在已获授权的前提下,验证服务器是否仍然保留某个域名对应的站点配置。
这里以自有测试环境为例。
假设:
测试域名:hidden.example.com
服务器 IP:192.0.2.10
服务端口:80该域名已经停止 DNS 解析,但服务器仍然保留对应的虚拟主机配置。
1. 正常访问
直接访问域名时,客户端需要先进行 DNS 解析。
如果域名不存在有效解析记录,就无法通过正常的域名访问方式建立连接。
例如:
curl http://hidden.example.com可能返回:
curl: (6) Could not resolve host这说明客户端无法通过 DNS 找到对应地址。
但这并不能证明服务器上的站点已经删除。
2. 指定解析地址进行验证
对于自己管理或获得授权的测试环境,可以使用 curl 的 --resolve 参数,将指定域名临时映射到已知服务器 IP。
示例:
curl --resolve hidden.birdy02.com:80:38.147.170.156 http://hidden.birdy02.com这个参数的作用是:
指定访问的域名。
指定使用的端口。
指定实际连接的服务器 IP。
保留 URL 中的域名,使请求仍然携带对应的 Host 信息。
它不会修改系统 DNS 配置,也不会永久改变域名解析记录。

3. 如何理解检测结果?
检测时不能仅凭 HTTP 返回状态码判断是否存在隐藏站点。
建议结合以下信息进行综合判断:
尤其要注意:返回 200 OK 并不意味着发现了隐藏站点。
服务器也可能返回默认页面、统一错误页面,或者其他与目标域名无关的内容。
因此,检测结果需要结合站点特征进行确认。
0x05 防御建议:如何避免隐藏站点意外暴露?
对于网站维护人员来说,Host 碰撞更重要的价值在于帮助发现配置问题。
建议从以下几个方面进行检查。
1. 清理无效的虚拟主机配置
对于已经停止使用的域名,应及时清理对应的站点配置、反向代理规则和后端服务绑定。
不要只删除 DNS 解析记录,却让旧站点继续运行。
2. 配置默认虚拟主机
对于没有匹配到合法域名的请求,服务器不应该随意返回其他业务站点。
建议配置默认虚拟主机,对未知 Host 请求返回拒绝响应或统一错误页面。
3. 对 Host 进行白名单校验
应用程序和反向代理应明确允许访问的域名范围。
不能无条件信任客户端提交的 Host 信息,尤其要避免将其直接用于生成跳转地址、密码重置链接等敏感内容。
4. 隔离内部和测试环境
开发环境、测试环境和生产环境应尽可能进行网络隔离。
对于管理后台和内部业务,建议增加身份认证、访问控制和必要的网络限制。
5. 定期检查资产与配置
DNS 记录、域名资产和服务器配置应该保持一致。
对于已经下线的业务,需要同步清理:
DNS 解析记录。
Web 虚拟主机配置。
反向代理路由。
后端服务。
TLS 证书和相关配置。
只有完成整个生命周期的清理,才能真正降低旧资产暴露的风险。
0x06 总结
Host 碰撞利用的是 Web 服务根据 Host 信息选择站点的机制。
它提醒我们:DNS 解析记录只是访问链路的一部分,域名停止解析,并不意味着服务器上的站点已经消失。
从安全角度看,Host 碰撞并不是一种复杂的攻击技术,它真正揭示的是资产管理和服务配置中的信任问题。
对于测试人员来说,它提供了一种检查虚拟主机和反向代理配置的思路;对于运维人员来说,它则提醒我们及时清理无效站点、限制未知 Host,并做好内部业务隔离。
安全不只是防止外部攻击,更要避免那些已经被遗忘的服务,成为新的风险入口。
0x07 About 作者
本文根据个人学习和实践经验整理,主要介绍 Host 碰撞的基本原理、检测思路及防御方法。
如有技术细节错误或不完善之处,欢迎交流指正。
学习安全技术的目的,是发现问题、理解风险,并帮助系统变得更加安全。