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

VSole2023-04-03 14:05:55

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. 等待老天爷的宠幸~~~~

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

多试试总会成功的 :)

host域名服务器
本作品采用《CC 协议》,转载必须注明作者和本文链接
1业务通过 DNS 解析到外网,后面删除了 A 记录2测试业务0x04 什么样的 ip 能进行 host 碰撞?这里我看网上很多人写文章都是写 ip 状态码为 40X 的时候,在进行 host 碰撞但是我想说,这不一定正确!!!实际上,我认为应该改为任何一个 ip 都有 host 碰撞的价值!!!将外网域名全部 ping 一下获取一下 ip,并将收集到的目标 ip 段加外网域名 ip 段保存为一个 ipList.txt 备用
域名是某个主域的二级域名或者多级域名,在防御措施严密情况下无法直接拿下主域,那么就可以采用迂回战术拿下子域名,然后无限靠近主域。例如:www.xxxxx.com主域不存在漏洞,并且防护措施严密,而二级域名 edu.xxxxx.com存在漏洞,并且防护措施松散,那么就可以采用迂回战术拿下子域名,然后逐步靠近主域。
DHCP于1993年10月成为标准协议,其前身是BOOTP协议。DHCP使网络管理员能从中心结点监控和分配IP地址。当某台计算机移到网络中的其它位置时,能自动收到新的IP地址。
Web安全常见漏洞修复建议
通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析。地址1.3 DNS 的功能每个 IP 地址都可以有一个主机名,主机名由一个或多个字符串组成,字符串之间用小数点隔开。主机名到 IP 地址映射的两种方式静态映射/etc/hosts文件在每台设备上都有主机到IP的映射关系,只供此设备使用动态映射/etc/resolv.conf文件指通过DNS服务器配置主机到IP的映射关系#?
类似的文章以前也写过两篇,记得以前的文章写的是,微软的操作系统为了帮助广大网友快速解决网络故障,使用了自动化的检测脚本。对于微软这种巨无霸企业,靶机通常由若干个大Cluster组成,即使其中一台靶机掉线,但作为一个整体应该是一直在线的,所以靶机的问题应该可以排除。经过上文的分析,DNS造成的问题可能性最大,可以换一个可靠的域名服务器一试。
ping 能够以毫秒为单位显示发送请求到返回应答之间的时间量。共发送了四个测试数据包,正确接收到四个数据包。但如果收到 0 个回送应答,那么表示子网掩码不正确或网卡配置错误或电缆系统有问题。最好与对某台 “设置良好” 主机的 ping 结果进行对比。
DHCP是基于UDP协议工作的服务,该服务工作于UDP的67和68号端口。其中,UDP 67号端口作为DHCP客户端广播请求,UDP 68号端口作为DHCP服务器回应广播请求。我们可以借助Nmap的broadcast-dhcp-discover.nse和dhcp-discover.nse脚本来实施DHCP服务扫描。下面介绍使用这两个脚本实施DHCP服务扫描的方法。
NetCat,在网络工具中有“瑞士军刀”美誉,其有Windows和Linux的版本。因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具,可通过TCP或UDP协议传输读写数据。
VSole
网络安全专家