前言
本章来聊聊host碰撞出现的原因。
环境搭建
依然使用的是kali自带的nginx,配置办法参考上一期。
nginx反向代理
将之前反向代理的ip更改为域名
从前面那期的nginx反向代理的中的反向代理https://www.baidu.com举例。
我们将server_name从ip替换为自己的域名,域名不一定要存在
test.conf 配置文件如下
server {
listen 9997 ssl default_server;
listen [::]:9997 ssl default_server;
#ssl on;
ssl_certificate /usr/local/ssl/nginx.crt;
ssl_certificate_key /usr/local/ssl/nginx.key;
server_name _;
return 400;
}
server {
listen 9997 ssl;
server_name test.cc.com;
ssl_certificate /usr/local/ssl/nginx.crt; #证书公钥
ssl_certificate_key /usr/local/ssl/nginx.key; #证书私钥
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!3DES:!aNULL:!eNULL;
ssl_prefer_server_ciphers on;
proxy_ssl_server_name on;
# 下面这段location配置是关键
location / {
sub_filter www.baidu.com test.cc.com;
sub_filter_once off;
proxy_ssl_session_reuse off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Referer https://www.baidu.com;
proxy_set_header Host www.baidu.com;
proxy_pass https://www.baidu.com;
proxy_set_header Accept-Encoding "";
}
}
看到直接访问9997端口返回400;
ping test.cc.com显示域名不存在
burpsuite抓取数据包,修改host的ip为域名
可以看到,成功访问到了反向代理的https://www.baidu.com
小结
以上就是host碰撞出现的原因。
运维人员将DNS域名解析IP取消,但没有及时清理nginx的配置文件,导致攻击者可以通过修改HOST值的方式进行碰撞。
在实战当中,我们可以先收集存在的域名和子域名,批量查询他们对应的ip,排除掉cdn后,将ip放在一个字典中。找到真实ip后,也可以尝试跑c段。
nginx中可能存在的子域名配置,fofa和hunter中的曾经存在但现在访问不到的子域名,或者子域名字典,或者在存在的子域名前缀加上"test"或"-test"等参数。
一个ip字典,一个域名字典,通过host碰撞工具查找。
我常用的碰撞工具:https://github.com/pmiaowu/HostCollision
修复方式
将nginx配置文件中的相关域名配置删除,然后nginx重新加载配置文件即可。
原文始发于微信公众号(进击的HACK):nginx | nginx配置未清理导致host碰撞
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论