目录
知识点
1、CDN知识-工作原理及阻碍
CDN:CDN是内容分发网络,使用户就近获取所需内容,降低网络堵塞,提高用户访问响应速度和命中率,CDN的关键技术是内容存储和分发技术。
通俗理解CDN:简单来说可以理解为A与C相隔很远,A访问C时速度肯定会较慢,那么如果在A和C中间添加一个B,而在B里面存在C信息的缓存,那么A只要访问距离自己B就可以较快的访问到C的数据。
CDN阻碍:在进行渗透测试时有可能测试的只是一个cdn节点服务器,无法获取真实服务器的数据。
2、 CDN配置-域名&区域&类型
加速域名:当某IP地址下的某个域名被加速,那么当用户访问时该域名时,它就是被加速访问的,存在cdn缓存中。
业务类型:服务器中被加速的资源。三种加速类型:页面加速、大文件下载加速,视频点播加速。也可以进行全站加速。
加速区域:指定特定的区域进行加速,加速效果只在区域内有效。
3、前置知识
1.传统访问:用户访问域名–>解析服务器IP–>访问目标主机
2.普通CDN:用户访问域名–>CDN节点–>真实服务器IP–>访问目标主机
3.带WAF的CDN:用户访问域名–>CDN节点(WAF)–>真实服务器IP–>访问目标主机
4、CDN绕过-十种方法
1、子域名:某些企业业务线较多,有些站点的主站或者部分域名使用了CDN加速,但是一些子域名并未使用加速服务,那么就可以通过子域名获取目标的真实IP。
2、利用网站漏洞:利用网站的漏洞让目标服务器去访问我们自己设置的资源,因为是目标主动出来访问,所以很大概率获取的是真实IP。
3、历史DNS记录:在目标域名还没有使用DNS的时候,有可能通过历史记录会查询到真实IP。
4、CDN本身入手:得到控制面板的账号密码,从而获取IP就容易许多。
5、邮件服务查询:站点一般都存在发送邮件的功能,一般邮件都是在内部,也有经过CDN解析,可能在邮件的源码里就包含服务器的真实IP。
6、国外请求:如果域名配置DNS加速区域时,没有配置国外或存在没配置的区域,那么可以在国外或者没配置的区域里访问域名,这样不会受到CDN加速服务的干扰同时可以访问到真实的IP。
7、探测扫描:利用fuckcdn工具
8、需要找 xiaix.me 网站的真实 IP,我们首先从 apnic 获取 IP 段,然后使用 Zmap 的 banner-grab 扫描出来 80 端口开放的主机进行 banner 抓取,最后在 http-req 中的 Host 写 xiaix.me。
9、网络空间引擎搜索法:常见的有以前的钟馗之眼,shodan,fofa。以fofa为例,只需输入:title:“网站的title关键字”或者body:“网站的body特征”就可以找出fofa收录的有这些关键字的ip域名,很多时候能获取网站的真实ip。
10、访问phpinfo.php:当服务器存在某种漏洞时,例如:文件上传,XSS等,可以利用漏洞去访问phpinfo.php文件,在下面会发现IP地址。通过百度查看IP地址是否是本地局域网,如果是区域网则证明目标有多个网卡获取的是内网IP,如果不是则成功发现真实IP。因为是通过内部文件发现的IP,所以属于反向链接。(该方法适用于没有内网网卡的服务器)
5、CDN绑定HOSTS
绑定之后在对页面进行安全测试就能预防CDN,这样就可以正常进行渗透测试
Windows:C:\Windows\System32\drivers\etc\hosts
Linux: /etc/hosts
案例演示
案例1-利用网站漏洞:
该方法利用的网站的ssrf漏洞,利用服务器存在的ssrf漏洞去访问我们设置好的资源,因为是服务器内部向外部访问,所以获取IP为真实IP。
SSRF漏洞简单介绍:ssrf(服务器端请求伪造)是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。攻击目标通常是从外网无妨访问到内部系统的服务器。正是因为是由服务器发起的,所以它能够请求到与它相连而与外网隔离的内部系统。ssrf漏洞可以利用服务器去加载网上的图片,那么该案例就可以利用ssrf漏洞去访问我们自己的服务器。
该网页目前就是存在ssrf漏洞
在我们自己的服务器上利用python开启一个http服务并且绑定自己的8000端口
在页面中尝试利用ssrf漏洞访问我们自己的服务器IP
当点击提交时,在我们的服务器就会接收到目标IP地址。因为是目标服务器主动访问我们,那么就不存在CDN。
案例2-子域名
该案例使用的是一个真实的网站sp910.com
利用超级ping来查询该网页是否存在cdn(超级ping:https://ping.chinaz.com)
通过ping出的信息可以看到同一个域名不同地区的IP地址并不一样,所以可以证明该网页存在cdn
在设置cdn时,如果加速域名设置了www.xxx.com,那么只会有该域名进行加速。如果设置的为*.xxx.com,那么所有xxx.com的域名无论开头是什么都会进行加速。
同时可以猜想一下,当访问百度时www.baidu.com与baidu.com是同一个页面,证明baidu.com是www.baidu.com的子域名。
在该实验中也可以尝试相同的方法访问子域名,那么就可以使用超级ping去ping sp910.com这个子域名可以发现所有的IP都相同,那么证明它的子域名不存在cdn同时获取了真实IP。
案例3-接口国外访问
该实验的测试IP为 www.xuexila.com,依旧进行超级ping,查看是否存在cdn
通过ping出的结果发现确实存在cdn
那么可以利用国外访问,使用一个偏远的国家地址对域名进行访问由此发现可以获取真实IP
国外访问地址:https://tools.ipip.net/cdn.php
案例4-邮件服务查询
该案例使用的www.mozhe.cn平台
原理:利用墨者的找回面功能向我们发送邮件,因为邮件目标服务器主动向我们发送的,所以不存在CDN节点。
首先利用墨者的忘记密码功能给我们发送邮件
登录邮箱点击右面的下拉菜单并点击显示原文
在原文中获取真实IP
案例5-FuckCDN
工具下载: https://github.com/Tai7sy/fuckcdn
先配置fuckcdn-master中的set.ini文件,配置域名和关键字(可以简单理解为页面代码中存在的关键字)
在ip.txt文件中配置ip地址的范围,通过百度搜索域名查询和备案信息 查询属于哪个平台,在通过平台查询IP范围(实在不知道可以直接0.0.0.0 255.255.255.255)
打开fuckcdn.exe并在Scan url出写入域名
通过本机的cmd获取本地访问该域名的ip地址并写入工具中,端口为80
开始运行工具,出现The config works well时代表配置成功
点击弹窗的确定开始运行
当出现All tasks that have ended时代表所有工作已经完成,运行结束
然后我们会发现多出一个result_ip.txt文件,里面存放着ip地址
总结:
本次cdn绕过的讲解结束,因为案例有限,所以无法把每种方法都进行一次演示,在这里也给大家推荐两个参考页面,希望我的文章和网页可以帮助到大家。如果有哪里讲的不对的地方,希望各位大佬可以多多指导。
参考页面: