有时我们需要对网站真实IP地址进行探测或者绕过CDN限制访问网站,这时就需要使用一些绕过CDN的技术。在此之前,先了解什么是CDN
注:本文仅供学习和研究使用,请勿用于非法用途。未经授权不可进行渗透测试。
CDN
CDN是内容分发网络(Content Delivery Network)的缩写。它是由一系列分布在全球不同地理位置的服务器网络组成的。CDN的主要目标是提高网站的性能和可用性。CDN通过将内容缓存到分布在全球各地的边缘节点上,使用户能够从离他们更近的服务器获取内容,从而减少了内容传输的延迟和带宽消耗。
流程如下:
判断CDN
如何判断一个网站是否应用了CDN呢?下面介绍两种方法
多地ping
CDN的工作原理是将网站的内容复制到位于全球各地的边缘节点上的服务器上。当用户请求访问网站时,CDN会自动根据用户的位置选择最近的服务器节点来响应请求。因此,通过多地ping测试得到多个不同的IP地址,这意味着网站的内容在不同的地理位置都有相应的服务器节点。
ping:keepupice.github.io
通过下图可以看到,ping后得到多个不同的IP地址,这说明GitHub应用了CDN
nslookup
nslookup (全称 name server lookup) ,是一个在命令行界面下的网络工具,在windows中无需下载即可使用,它有两种模式:交互 和 非交互。
一般来说,非交互模式适用于简单的单次查询,若需要多次查询,则交互模式更加适合。
nslookup判断网站是否应用CDN的原理同上。
下面介绍nslookup的使用说明
1、语法:nslookup命令的基本语法如下:
nslookup [options] [name | -] [server]
其中,name
表示要查询的域名或IP地址;server
表示要查询的DNS服务器地址,默认情况下会使用本地DNS服务器。如果将name
设置为空,则nslookup会进入交互模式,允许逐步输入要查询的信息。
常用的nslookup选项包括:
-query
:指定要查询的DNS记录类型,默认为A记录,即IPV4。AAA表示查询IPV6-type
:与-query
选项类似,也用于指定要查询的DNS记录类型。-debug
:启用调试模式,输出更详细的信息。-timeout
:指定超时时间,单位为秒。-port
:指定要使用的DNS服务器端口号,默认为53。
举个例子,要同时强制使用IPv4、指定超时时间为5秒进行nslookup查询,可以使用以下命令:
nslookup -query=A www.baidu.com
2、非交互模式下
进入非交互模式:nslookup + 查询的域名或者IP地址,回车。
举例如下:
查询内容的讲解如下:
- 服务器: UnKnown:表示本次查询使用的DNS服务器名称是未知的。
- Address: 192.168.149.37:表示本次查询使用的DNS服务器的IP地址。
- 非权威应答:这意味着本次查询结果不是来自权威DNS服务器,而是来自缓存或其他非权威DNS服务器的响应。
- 名称: baidu.com:表示查询的域名是baidu.com。
- Addresses: 39.156.66.10和110.242.68.66:这是查询到的baidu.com的IP地址,可以看到baidu.com有两个IP地址。
3、交互模式下:
进入交互模式:在命令行界面输入nslookup,回车,即可进行多次查询。
举例如下:
我们进行了两次查询,每次查询返回多个IP地址,说明百度与谷歌均使用了CDN。
名称: www.a.shifen.com:这是查询得到的实际主机名,它是百度网站www.baidu.com的别名(Alias)。
Addresses: 240e:ff:e020:9ae:0:ff:b014:8e8b、240e:ff:e020:966:0:ff:b042:f296、183.2.172.185、183.2.172.42:这是查询到的www.a.shifen.com的IP地址,包括IPv6和IPv4地址。
4、查看帮助
Windows下有两种,一种是直接输入nslookup/?
,还有一种是在交互模式下输入help
或者?
,交互模式下的帮助会更加详细。
绕过CDN
CDN通过将网站内容分发到多个节点上,使用户可以从离自己最近的节点访问网站,从而提高了网站的访问速度。然而,有些时候我们需要对网站真实IP地址进行探测或者绕过CDN限制访问网站,这时就需要使用一些绕过CDN的技术。
1、子域名辅助查询
在CDN技术中,CDN节点会代替真实服务器处理用户的请求,并将响应返回给用户。因此,如果我们能够找到一个不经过CDN节点直接请求到真实服务器的方法,就可以绕过CDN。其中一种方法就是使用子域名辅助查询。
CDN通常会将网站的主域名和子域名分别分配到不同的节点上。通过查询某些子域名的DNS解析记录,我们可能可以找到真实服务器的IP地址。
举个例子:
假设一个网站的主域名是example.com,而其静态文件(如图片、CSS、JavaScript等)被放在cdn.example.com这个子域名下。通常情况下,CDN会将主域名example.com和子域名cdn.example.com分别分配到不同的节点上。
现在我们想要找到真实服务器的IP地址,可以通过查询cdn.example.com的DNS解析记录来获得。DNS解析记录会告诉我们cdn.example.com对应的IP地址,而这个IP地址很可能就是真实服务器的地址,而不是经过CDN节点的地址。
当我们获得了真实服务器的IP地址后,就可以直接请求这个IP地址来访问网站的静态文件,从而绕过了CDN节点的处理。
比如说,有fzfu.com经查询后返回的IP为:
现在我们对其子域名xyh.fzfu.com进行查询:
可以看到,查询子域名返回的IP与主域名是不一样的,所以该IP有可能是真实服务器的地址。
2、历史DNS解析记录
另一种绕过CDN的方法是使用历史DNS解析记录。如果我们能够找到网站之前使用过的IP地址,就可以尝试直接访问这些IP地址,从而绕过CDN。有些工具可以帮助我们查找网站过去的DNS解析记录,比如Censys、Shodan和网站:
3、国外主机解析
最后一种绕过CDN的方法是使用国外主机解析。由于CDN技术通常是基于地理位置的,因此不同国家或者地区的用户可能会被分配到不同的CDN节点上。如果我们能够使用国外的主机来对网站进行访问,就有可能绕过CDN限制。