CDN绕过
介绍
基本概念
Content Delivery Network(内容分发网络)
CDN是利用缓存技术,解决如何将数据快速可靠从源站传递到用户的问题。用户获取数据时,不需要直接从源站获取,通过CDN分发,用户可以从一个较优的服务器获取数据,从而达到快速访问,并减少源站负载压力的目的(负载均衡)
大致过程
假设网站使用CDN加速,当一个客户端请求该网站域名时,处理流程如下:
- 用户在浏览器输入域名,先向DNS服务器发送请求
- DNS服务器将域名解析权交(通过CNAME)给CDN专用DNS服务器
- 客户端根据返回的ip访问CDN负载均衡设备
- 负载均衡设备根据当前的负载情况和用户所需内容,返回合适的ip
- 客户端最后根据ip访问对应的CDN缓存服务器
优点
- 提高访问速度,保证不同网络中的用户都能得到良好的访问质量。
- 减少远程访问的带宽、分担网络流量、减轻原站点WEB服务器负载等功能。
- 可以有效地预防黑客入侵以及降低各种D.D.o.S攻击对网站的影响。
… …
适用范围
一般来说以资讯、内容等为主的网站,具有一定访问体量的网站
- 静态内容加速(static内容,如:html、js、css、image)
- 视音频、大文件下载,分发加速:腾讯、优酷、爱奇艺等视频
- 视频直播加速:熊猫TV、斗鱼、淘宝直播
- 移动应用加速:移动app内图片、页面、短视频、UGC等内容,小程序等
验证是否存在CDN
方法1 – 多处ping
很简单,使用各种多地 ping 的服务,查看对应 IP 地址是否唯一,如果不唯一多半是使用了CDN, 多地 Ping 网站有:
方法2 – nslookup
使用 nslookup 进行检测,原理同上,如果返回域名解析对应多个 IP 地址多半是使用了 CDN。
有 CDN 的示例:
> www.baidu.com
服务器: gw.gcableconfig.local
Address: 192.168.1.1
非权威应答:
名称: www.a.shifen.com
Addresses: 182.61.200.7
182.61.200.6
Aliases: www.baidu.com
无 CDN 的示例:
> johnfrod.top
服务器: gw.gcableconfig.local
Address: 192.168.1.1
非权威应答:
名称: johnfrod.top
Address: 81.71.121.131
方法3 – 使用工具
使用各种工具帮助检测目标网站是否使用了 CDN,可以参见如下网站:
绕过 CDN 查找网站真实 IP
查询历史DNS记录
站点在使用CDN服务之前,它的真实IP地址可能被DNS服务器所记录到,此时我们就可以通过DNS历史记录找到目标真实IP
查询子域名
毕竟 CDN 还是不便宜的,所以很多站长可能只会对主站或者流量大的子站点做了 CDN,而很多小站子站点又跟主站在同一台服务器或者同一个C段内,此时就可以通过查询子域名对应的 IP 来辅助查找网站的真实IP。
利用网站漏洞
通过Web漏洞让目标服务器主动来连接我们,这样我们就知道其真实IP了,可用的比如XSS盲打,命令执行反弹shell,SSRF等等。
服务器合法服务主动连接我们
让服务器主动连接我们告诉我们它的IP,不过使用的是合法的服务,如RSS邮件订阅,很多网站都自带 sendmail,会发邮件给我们,此时查看邮件源码里面就会包含服务器的真实 IP 了。
使用国外主机解析域名
国内很多 CDN 厂商因为各种原因只做了国内的线路,而针对国外的线路可能几乎没有,此时我们使用国外的主机直接访问可能就能获取到真实IP。
工具:IPIP
目标敏感文件泄露
也许目标服务器上存在一些泄露的敏感文件中会告诉我们网站的IP,另外就是如 phpinfo之类的探针了。
查询Https证书
这个网址会将互联网所有的ip进行扫面和连接,以及证书探测。若目标站点有https证书,并且默认虚拟主机配了https证书,我们就可以找所有目标站点是该https证书的站点。
查询语法:
443.https.tls.certificate.parsed.extensions.subject_alt_name.dns_names:www.xxx.com
网络空间引擎搜索法
zoomeye、fofa、shodan
通过这些公开的安全搜索引擎爬取得历史快照,主要得一些特征总结如下:
特有的http头部(如server类型、版本、cookie等信息)、
特定keyword(如title、css、js、url等)、
特定的IP段搜索(如fofa支持C段搜索),
有些时候爬取的时候不一定含有上面那些特征,但是我们仍然需要仔细排查。
根据网站favicon哈希值搜索IP
python2脚本
import mmh3
import requests
response = requests.get('https://example.com/favicon.ico')
favicon = response.content.encode('base64')
hash = mmh3.hash(favicon)
print 'http.favicon.hash:'+str(hash)
去fofa或者shodan上搜索该哈希值
查询格式:
- fofa:
icon_hash="xxx"
- shodan:
http.favicon.hash:xxx
HTML源代码检索查找IP
根据网站页面HTML中特有的字符串去搜索引擎中搜索,如目标页面中由HTML标签为<title>
的字段比较特殊,那么可以去FOFA中搜索:
title="xxxxxxxxxxxxxxx"
搜索到的结果会显示IP,访问该IP,若能够正常访问则为真正IP,如果打不开则为CDN或虚拟主机服务器