目录
Host碰撞原理
Host碰撞判断技巧
Host碰撞检测方法
Host碰撞实验步骤
从攻击者的视角来进行资产的梳理,采用全端口扫描+子域名收集的方式,识别所有的企业资产暴露面。但即使是这样,往往会因为配置错误或是未及时回收等原因,依然存在着一些隐形资产
Host碰撞原理
当数据包的host头替换为某个域名时在访问该反代服务器的ip,如果nginx/Apache的反向代理的host配置没删除,就会把请求转发到内网对应的host业务服务器上,接着返回该业务的信息,实现本该隐藏的业务访问
简单点就是:当数据包的host头替换为某个域名时在访问时该反代服务器的ip,如果页面发生了变化,返回了对应的资源,即可判断为存在host碰撞。
Host碰撞判断技巧
Host碰撞什么时候存在
业务通过DNS解析到外网,后面删除了A记录(但是nginx/Apache的反向代理还没删除)
测试业务(不对外开放的业务,只流传于开发或是测试使用)
什么样的IP能进行Host碰撞
观点:只要是个ip能够访问,那么它就有进行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
直接去请求了这个所谓的被收缩进内网的资源,然后返回
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
Host碰撞实验步骤
1、在Kali或者centos7上安装Docker并进行环境部署
service docker start //开启docker
docker pull vultarget/host_collision //拉取镜像
docker run -it -p 3333:8080 --rm vultarget/host_collision //启动后会进入卡顿说明正常
2、访问容器地址并回显状态码400的页面
http://127.0.0.1:3333/
3、在互联网上收集该目标的域名资产并使用以下Host碰撞脚本进行测试
下载压缩包
https://github.com/fofapro/Hosts_scan.git
4、然后拖进虚拟机解压
unzip Hosts_scan-master.zip
5、在火狐浏览器插件商店搜索modify,下载第一个
(谷歌浏览器的插件是Modheader)
添加Host~test.com
6、访问机器ip(要加端口)
7、修改Hosts_scan-master文件夹的ip.txt和host.txt文件,在ip.txt添加刚才拉取镜像开启镜像的那台机器的ip,在host.txt添加test.com
8、在Hosts_scan-master
目录下打开终端
python3 IP_hosts_scan_multithreading.py