CDN(Content Delivery Network,内容分发网络)的目的是通过在现有的网络架构中增加一层新的Cache(缓存)层,将网站的内容发布到最接近用户的网络“边缘”的节点,使用户可以就近取得所需的内容,提高用户访问网站的响应速度,从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因导致的用户访问网站的响应速度慢的问题。
具体访问流程如下。
(1)用户输入访问的域名,操作系统向LOCAL DNS查询域名的IP地址。
(2)LOCAL DNS向ROOT DNS查询域名的授权服务器(这里假设LOCAL DNS缓存过期)。
(3)ROOT DNS将域名授权的DNS记录回应给LOCAL DNS。
(4)LOCAL DNS得到域名授权的DNS记录后,继续向域名授权DNS查询目标域名的IP地址。
(5)域名授权DNS查询到域名的IP地址后,回应给LOCAL DNS。
(6)LOCAL DNS将得到的域名IP地址回应给用户端。
(7)用户得到域名IP地址后,访问网站服务器。
(8)网站服务器应答请求,将内容返回给用户端。
使用了CDN的网站访问过程如图1-27所示。
(1)用户输入访问的域名,操作系统向LOCAL DNS查询域名的IP地址。
(2)LOCAL DNS向ROOT DNS查询域名的授权服务器(这里假设LOCAL DNS缓存过期)。
(3)ROOT DNS将域名授权的DNS记录回应给LOCAL DNS。
(4)LOCAL DNS得到域名授权的DNS记录后,继续向域名授权DNS查询目标域名的IP地址。
(5)域名授权DNS查询到域名记录后(一般是CNAME),回应给LOCAL DNS。
(6)LOCAL DNS得到域名记录后,向智能调度DNS查询域名的IP地址。
(7)智能调度DNS根据一定的算法和策略(如静态拓扑、容量等),将最适合的CDN节点IP地址回应给LOCAL DNS。
(8)LOCAL DNS将得到的域名IP地址回应给用户端。
(9)用户得到域名IP地址后,访问网站服务器。
(10)CDN节点服务器应答请求,将内容返回给用户端(缓存服务器在本地进行保存,以备以后使用,同时,把获取的数据返回给用户端,完成数据服务过程)。
通常,会通过Ping目标主域,观察域名的解析情况,以此判断其是否使用了CDN,如图1-28所示。
可以看到,在Ping主域名时,请求自动转到了“lst.dtwscachev424.ourwebcdn.com”这个CDN代理上,说明此网站使用CDN服务。
还可以利用一些在线网站进行全国多地区Ping检测操作,然后对比每个地区Ping出的IP地址结果,查看这些IP地址是否一致,如果都是一样的,则极有可能不存在CDN。如果IP地址大多不太一样或者规律性很强,则可以尝试查询这些IP地址的归属地,判断是否存在CDN。这里通过17CE网站对百度主域名进行多地Ping检测,如图1-29所示。
17CE网站使用多地Ping技术,设立不同的监测点收集响应IP地址。如果在多个监测点显示同一个IP地址,那么此IP地址就最有可能为该站的真实IP地址。
常用的多地Ping检测的CDN网站如下。
17CE
Myssl
站长工具
CDNPlanet
在确认了目标确实用了CDN后,就需要绕过CDN寻找目标的真实IP地址,下面介绍一些常规的方法。
(1)内部邮箱源。公司内部的邮件系统通常部署在企业内部,没有经过CDN的解析,通过目标网站用户注册或者RSS订阅功能,查看邮件、寻找邮件头中的邮件服务器域名IP地址,Ping这个邮件服务器的域名,就可以获得目标的真实IP地址(注意,必须是目标自己的邮件服务器,第三方或公共邮件服务器是没有用的)。
(2)扫描网站测试文件,如.phpinfo、.test等,从而找到目标的真实IP地址。
(3)分站域名。因为很多网站主站的访问量比较大,所以主站都是“挂”CDN的。分站可能没有“挂”CDN,可以通过Ping二级域名获取分站IP地址,可能会出现分站和主站不是同一个IP地址但在同一个C段下面的情况,从而判断出目标的真实IP地址段。
(4)国外访问。国内的CDN往往只对国内用户的访问加速,而国外的CDN就不一定了。因此,通过国外在线代理网站“App Synthetic Monitor”访问,可能会得到真实IP地址,如图1-30所示。
(5)查询域名的解析记录。如果目标网站之前并没有使用过CDN,则可以通过网站Netcraft查询域名的IP地址历史记录,大致分析出目标的真实IP地址段。
(6)如果目标网站有自己的App,则可以尝试利用Fiddler或Burp Suite抓取App的请求,从里面找到目标的真实IP地址。
(7)绕过“Cloudflare CDN”查找真实IP地址。现在很多网站都使用Cloudflare提供的CDN服务,在确定了目标网站使用CDN后,可以先尝试通过网站“CloudflareWatch”对目标网站进行真实IP地址查询,结果如图1-31所示。
图中列出了域名直连的IP地址,并且给出了“lookup”的历史解析(Previous lookups for this domain)的IP地址。读者可以将以上几种手段结合起来使用,最终筛选出需要查询的域名的真实IP地址。
找到目标的真实IP地址后,如何验证其真实性呢?
(1)如果是Web网站,那么最简单的验证方法是直接尝试用IP地址访问,看看响应的页面是不是和访问域名返回的一样。
(2)在目标段比较大的情况下,借助类似Masscan、Nmap等端口扫描工具批量扫描对应IP地址段中所有开了80、443、8080端口的IP地址,然后逐个尝试IP地址访问,观察响应结果是否为目标网站。如果目标绑定了域名,那么直接访问是访问不到的。这时,需要在Burp Suite中修改header头Host:192.xxx.xxx.xxx,或使用其他方法指定Host进行访问。