免责声明


由于传播、利用本公众号绿洲安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号绿洲安全及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
转自:https://www.yuque.com/pmiaowu/bomi9w/tbuaca0x01 前言
在实战中,我们总会对一个企业进行资产收集,在这个过程中会收集到许多资产,有域名有ip
但有的时候打开的域名指向的是一个内网ip 非常无奈 :(
而打开的ip状态码更是直接显示400,403,404禁止我们访问
还有一种状态码显示200但是输入啥都没啥变化的
同时对它们进行目录扫描,也是常常没有结果
那么这种情况下, HOST碰撞技术就可以尝试使用了
0x02 host碰撞原理
当数据包的host头替换为某个域名时在访问该反代服务器的ip, 如果nginx/Apache的反向代理的host配置没删除,就会把请求转发到内网对应的host业务服务器上, 接着返回该业务的信息, 实现本该隐藏的业务访问
简单点就是: 当数据包的host头替换为某个域名时在访问时该反代服务器的ip, 如果页面发生了变化,返回了对应的资源, 即可判断为存在host碰撞
0x03 host碰撞什么时候存在?
- 业务通过DNS解析到外网,后面删除了A记录(但是nginx/Apache的反向代理还没删除)
- 测试业务(不对外开放的业务,只流传于开发或是测试使用)
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.49ip: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.comuser.testmiao.commail.testmiao.comsso.testmiao.comportal.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.xxxhost: vms.testmiao.com
打开文件: C:\Windows\System32\Drivers\etc\hosts


0x06.4.1 方法二 - 使用burp


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

0x07 总结
1. 收集一些内网常见的重要域名例如:oa.testmiao.comuser.testmiao.commail.testmiao.comsso.testmiao.comportal.testmiao.com2. 尽量多可能的收集目标所有可对外访问的ip3. 尽量多可能的收集目标的域名4. 下载 HostCollision5. 等待老天爷的宠幸~~~~
要是前面的文章还看不是很懂的话,可以看看这张网站访问流程的图会更加清晰
