在渗透信息收集时,可能会搜集到很多ip但可能返回的是错误的状态码400、403、404等等,可能是因为采用了nginx反向代理禁用了ip直接访问。这种情况就可以使用Host碰撞找到隐藏业务。需要根据已知的信息配置响应的域名字典进行Host碰撞。
因为本机之前已经存在nginx,tomcat,为了方便在windows的系统下进行演示,Linux同理。
首先找到我们的tomcat目录,在其bin目录下点击startup.bat启动,如果启动闪退可能端口被占用,需要修改conf目录的server.xml文件。
本机ip:192.168.3.17 端口:8003
访问地址:http://localhost:8003 或者 http://192.168.3.17:8003会跳到以下界面
nginx下载好后在windows直接点击exe启动,会发现nginx存在了两个进程
直接访问http://localhost ,成功进入以下界面
测试成功后,杀掉这两个nginx进程,如果一个删不掉先删另一个,然后修改conf目录下的nginx.conf配置文件。将之前默认的server删掉,新增两个server
说一下这两个server的意思,
第一个server:
使用了显示的default_server,如果没加default_server第一个定义的server会自动作为default_server,用来处理没有匹配到server_name的请求,这种方式直接禁止了ip的直接访问
第二个server:
使用www.tpaertest.com域名进行访问,会将请求转发到92.168.3.17的8003端口,也就是我们的tomcat。
server {
listen 80 default_server;
server_name _;
return 400;
}
server {
listen 80;
server_name www.tpaertest.com;
location / {
proxy_pass http://192.168.3.17:8003;
proxy_redirect off;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
root html;
index index.html index.html;
}
access_log logs/test.com.log;
}
启动nginx(之前一定杀掉进程)
尝试直接访问ip http://192.168.3.17/
尝试www.tpaertest.com域名访问,首先这个域名是不存在的,需要进行配置。
当用户在浏览器中输入一个需要访问的网址时,浏览器会查看自身是否有缓存,没有系统则会检查自己的Hosts文件中是否有这个域名和IP的映射关系。如果有,则直接访问这个IP地址指定的网络位置,如果没有,再向的DNS服务器提出域名解析请求。也就是说Hosts的IP解析优先级比DNS要高。
hosts文件在C:\Windows\system32\drivers\etc\hosts路径下,需要进行添加域名。也可以在github git下来SwitchHosts进行域名的设置,原理是一样的。
配置后使用域名可以成功访问
我们现在使用ip是访问不了的,使用域名是可以访问的。接下来使用ip通过host碰撞成功访问到tomcat页面,首先用burp拦截到访问http://192.168.3.17的请求包,发送到Repeater重发器可以看见返回的结果是之前设置好的400
更改host为www.tpaertest.com ,重新发送请求成功访问到tomcat页面
www.tpaertest.com 是内网本地hosts设置的域名,那么我们在配置中更改为一个外网真实域名www.tpaer.com会怎么样呢。是会访问到tomcat这个页面,还是会访问真实域名的页面。
修改第二个server,重新启动nginx
server {
listen 80;
server_name www.tpaer.com;
location / {
proxy_pass http://192.168.3.17:8003;
proxy_redirect off;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
root html;
index index.html index.html;
}
access_log logs/test.com.log;
}
还是用刚才的包,把host改为www.tpaer.com ,返回的是tomcat页面也就是我们在nginx中设置好的。这次响应的时间明显有了1秒左右的停顿,多出来的时间应该就是DNS服务器解析域名的时间。
在我们收集到ip地址后,访问ip返回404,403,400等错误的状态码,就可以尝试使用host碰撞搜集到隐藏的业务。
我们可以直接对Host进行fuzz爆破,或者使用脚本。
这里找到了大佬写好的python脚本地址:
https://github.com/fofapro/Hosts_scan
host.txt,ip.txt可以写入字典,最后会输出成功的hosts_ok.txt
host.txt
www.tpaer.com
blog.tpaer.com
admin.tpertest.com
www.tpaertest.com
ip.txt
127.0.0.1
192.168.3.17
运行脚本,和预期一样成功host碰撞2条数据