干货 | HOST碰撞漏洞挖掘技巧

科技   2024-10-29 11:08   中国香港  

文章来源:转载来源语雀文档,非P喵呜作者本人投稿。如有侵权,请联系删除

0x01 前言


在实战中,我们总会对一个企业进行资产收集,在这个过程中会收集到许多资产,有域名有 ip
但有的时候打开的域名指向的是一个内网 ip 非常无奈 :(
而打开的 ip 状态码更是直接显示 400,403,404 禁止我们访问
还有一种状态码显示 200 但是输入啥都没啥变化的
同时对它们进行目录扫描,也是常常没有结果
那么这种情况下, HOST 碰撞技术就可以尝试使用了

0x02 host 碰撞原理


当数据包的 host 头替换为某个域名时在访问该反代服务器的 ip, 如果 nginx/Apache 的反向代理的 host 配置没删除,就会把请求转发到内网对应的 host 业务服务器上, 接着返回该业务的信息, 实现本该隐藏的业务访问

简单点就是: 当数据包的 host 头替换为某个域名时在访问时该反代服务器的 ip, 如果页面发生了变化,返回了对应的资源, 即可判断为存在 host 碰撞

0x03 host 碰撞什么时候存在?


1业务通过 DNS 解析到外网,后面删除了 A 记录(但是 nginx/Apache 的反向代理还没删除)
2测试业务(不对外开放的业务,只流传于开发或是测试使用)

0x04 什么样的 ip 能进行 host 碰撞?


这里我看网上很多人写文章都是写 ip 状态码为 40X 的时候,在进行 host 碰撞
但是我想说,这不一定正确!!!
实际上,我认为应该改为任何一个 ip 都有 host 碰撞的价值!!!
这个点的问题在于,现在很多较大的公司比较流行,资产统一把控,也就是自己所有的资产全部收缩进内网
然后整个 nginx 或是 Apache 服务器,想对外网开放某个资产的时候就通过这个反代服务器新添加个配置映射出去
这就导致了一个问题, 那就是如果配置不当了, 忘记删除这台 nginx 或是 Apache 服务器的域名指向了
那么我们通过修改 host 就可以重新访问这些以前在外网后面被收缩进内网的资产了

例如说:
现在外网有个 ip: 47.10.10.1(虚构的)
它的域名为: testmiao.com

现在它对映射规则配置不当了

然后打开状态码显示 200,出现的是一个站点,返回的数据为一段 json

对外映射的: a.testmiao.com
对外映射的: b.testmiao.com
内部 nginx/Apache 还映射的: oa.testmiao.com

那么这种情况下如果我们进行爆破式 host 碰撞
撞了一个 oa.testmiao.com 进去
那么 nginx 或是 Apache 服务器接收到这个 host: oa.testmiao.com
直接去请求了这个所谓的被收缩进内网的资源,然后返回

这种情况, 我对大公司进行测试时, 已经发现不下于三次
因此我认为只要是个 ip 能够访问,那么它就有进行 host 碰撞的价值
当然这个是我自己个人实战经验,读者们看个乐乎就好了 :)

0x05 host 碰撞检测方法-思路


网上大佬是遇到 40X,或是收集到了内网域名在进行 host 碰撞
这里我的检测方法对比网上那些大佬的比较泛~~

我的检测方法是:
第一步:
收集目标域名
PS: 内外网的域名都要
第二步:
收集目标 ip 段
第三步:
将外网域名保存为一个 hostList.txt 备用
第四步:
将外网域名全部 ping 一下获取一下 ip,并将收集到的目标 ip 段加外网域名 ip 段保存为一个 ipList.txt 备用
PS: 只要外网可访问的 ip 哦
第五步:
将收集到的 ipList.txt 与 hostList.txt 进行 host 碰撞检测
第六步:
将可以互相解析的 ip 提取出来
例如:
域名: aa.testmiao.com 解析的 ip: 42.169.88.55
域名: bb.testmiao.com 解析的 ip: 42.142.165.49

ip:42.169.88.55 修改 host 为:bb.testmiao.com
然后打开: bb.testmiao.com 显示的还是 bb.testmiao.com 的内容
这就说明有价值了 :)
第七步:
重点测试提取的 ip 进行 host 碰撞爆破
例如:
域名: aa.testmiao.com 解析的 ip: 42.169.88.55
自己构造常见的内网重要的域名
如:
oa.testmiao.com
user.testmiao.com
mail.testmiao.com
sso.testmiao.com
portal.testmiao.com

0x06 host 碰撞检测方法-实际


测试方法的话,我这里提供两种比较高效的测试方法

0x06.1 测试数据

测试数据:

// 拿来做碰撞的 ip
域名: https://sso.testmiao.com 解析的 ip: 42.xxx.xxx.xxx

// 拿来做碰撞的 host
域名: vms.testmiao.com 解析的 ip: 10.xxx.xxx.xxx
域名: a.testmiao.com 解析的 ip: 无法解析(猜的内网可能有这个域名)
域名: b.testmiao.com 解析的 ip: 无法解析(猜的内网可能有这个域名)
域名: c.testmiao.com 解析的 ip: 无法解析(猜的内网可能有这个域名)
域名: d.testmiao.com 解析的 ip: 无法解析(猜的内网可能有这个域名)
域名: scm.testmiao.com 解析的 ip: 118.xx.xxx.xxx

0x06.2 方法一 - 使用工具 HostCollision

下载地址: https://github.com/pmiaowu/HostCollision

下载完毕以后

第一步:
打开 HostCollision/dataSource 目录
将: ipList.txt 与 hostList.txt 分别填写进对应的数据(一行一个)
第二步:
打开 HostCollision 目录
执行命令: java -jar HostCollision.jar

执行完毕以后会在根目录生成一个 年-月-日_8 位随机数 csv/txt 文件
里面会保存碰撞成功的结果



0x06.3 方法二 - 使用 burp
但是这个方法,只能一个 ip 一个 ip 的测试,无法批量 host 爆破
第一步: 找一个你认为有漏洞 ip 我拿的测试数据的 42.xxx.xxx.xxx
第二步: 将找到的 host 保存成一个 hostList.txt 分别填写进对应的数据(一行一个)
第三步: 构造数据包如下图

有了这个包以后,发送到测试器里面进行 host 爆破







0x06.4 浏览器访问的方法


0x06.4.1 方法一 - 系统 hosts 文件修改
这里就教如何利用 windows 访问对应的站点

例如:
ip: 42.xxx.xxx.xxx
host: vms.testmiao.com

打开文件: C:\Windows\System32\Drivers\etc\hosts


0x06.4.1 方法二 - 使用 burp


如果还看不明白,这里也有中文版的可以看一眼


0x07 总结


1. 收集一些内网常见的重要域名
例如:
oa.testmiao.com
user.testmiao.com
mail.testmiao.com
sso.testmiao.com
portal.testmiao.com
2. 尽量多可能的收集目标所有可对外访问的 ip
3. 尽量多可能的收集目标的域名
4. 下载 HostCollision
5. 等待老天爷的宠幸~~~~

要是前面的文章还看不是很懂的话,可以看看这张网站访问流程的图会更加清晰

多试试总会成功的 :)

HACK之道
HACK之道,专注于红队攻防、实战技巧、CTF比赛、安全开发、安全运维、安全架构等精华技术文章及渗透教程、安全工具的分享。
 最新文章