一、漏洞介绍
1.1 基本介绍
Host碰撞漏洞的特征是当直接访问IP地址时,会收到4xx错误提示,但当我们在访问时指定正确的域名作为Host头部字段时,却可以正常获取页面内容。这种情况可能会被攻击者利用来绕过访问控制,例如通过公网访问一些未经授权的资源等。
1.2 漏洞原理
Host碰撞漏洞的原理在于,当多个域名共享同一个IP地址时,服务器会根据接收到的HTTP请求中的"Host"头部字段来确定要访问的网站。如果服务器没有正确验证"Host"头部字段的值,攻击者可以通过修改该字段来访问其他虚拟主机上的资源。例如在服务器软件如Nginx、Apache等的配置中,可以通过配置文件进行域名绑定,像Nginx的default_server,或者Apache的httpd.conf配置中的ServerName。有时候直接访问IP地址是无法成功访问资源的,必须通过绑定的域名才能成功获取页面内容。
1.3 常见场景
-
域名服务下线或者转内网以后,只对域名进行了解绑,没有对nginx的配置做清理
-
某个Nginx同时绑定了内网和外网域名
1.4 快速验证
方式一:
`curl --resolve www.test.com:80:8.200.131.57 http://www.test.com`
这段 curl 命令的意思是,在访问 http://www.test.com 的时候,将该域名的解析地址指定为 8.200.131.57,端口为 80。这个命令的作用是在进行 HTTP 请求时,显式地指定了域名解析地址,而不是依赖于系统的 DNS 解析。
方式二:
直接编写/etc/hosts文件,强制指定host域名对应的解析IP地址,浏览器访问该域名
方式三:
import requests url = 'http://8.200.131.57' headers = {'Host': 'www.test.com'} response = requests.get(url, headers=headers) print(response.text)
在 Python 中模拟该命令,使用 requests 库,并在请求头中指定 Host 字段
二、实际案例
2.1 nginx配置
server { listen 8080 default_server; server_name _; return 400; } server { listen 8080; server_name test.com; location / { proxy_pass http://127.0.0.1:80; proxy_redirect off; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; root html; index index.html index.htm; } access_log logs/test.com.log; }
第一个server表示 host为空时,会返回400 第二个server表示 nginx会根据传入的host进行服务转发,访问test.com访问的业务为 127.0.0.1:80 上的服务
2.2 访问效果
- 不带host访问,返回400
- 添加host: test.com:3333 访问,可正常查看
三、检测工具
3.1 工具介绍
项目地址 | 开发语言 | Star数 |
---|---|---|
https://github.com/cckuailong/hostscan | Go | 523 |
https://github.com/pmiaowu/HostCollision | Java | 549 |
https://github.com/fofapro/Hosts_scan | Python | 1100 |
3.2 代码分析
Github上类似的检测工具非常之多,Go、Python、Java各语言开发的也都覆盖了,基本上也都支持多线程检测,检测原理基本上也都一致。以下用Star数最高的,Python语言开发的进行分析。其检测代码只有20来行,主要是提前子啊host.txt 配置相应的域名, ip.txt 填写相应的IP数据,使用requests发送HTTP请求,请求地址是IP资产,请求headers中,添加Host,填写对应的域名
#!/usr/bin/python # -*- coding: UTF-8 -*- #Author:R3start #这是一个用于IP和域名碰撞匹配访问的小工具 import requests import re lists=[] files = open('hosts_ok.txt','w+') #读取IP地址 print("====================================开 始 匹 配====================================") for iplist in open("ip.txt"): ip = iplist.strip('\n') #读取host地址 http_s = ['http://','https://'] for h in http_s : for hostlist in open("host.txt",'r'): host = hostlist.strip('\n') headers = {'Host':host,'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'} try: r = requests.session() requests.packages.urllib3.disable_warnings() rhost = r.get(h + ip,verify=False,headers=headers,timeout=5) rhost.encoding='utf-8' title = re.search('<title>(.*)</title>', rhost.text).group(1) #获取标题 info = '%s -- %s 协议:%s 数据包大小:%d 标题:%s' % (ip,host,h,len(rhost.text),title) lists.append(info) files.write(info + "\n") print(info) except Exception : error = ip + " --- " + host + " --- 访问失败!~" print(error) print("====================================匹 配 成 功 的 列 表====================================") for i in lists: print(i)
黑客&网络安全如何学习
今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。
1.学习路线图
攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。
内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。
(都打包成一块的了,不能一一展开,总共300多集)
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
3.技术文档和电子书
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
4.工具包、面试题和源码
“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。
还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。
这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。
参考解析:深信服官网、奇安信官网、Freebuf、csdn等
内容特点:条理清晰,含图像化表示更加易懂。
内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取