一 CDN 是什么
CDN,即内容分发网络(Content Delivery Network) ,是构建在现有网络基础之上的智能虚拟网络。它依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户能就近获取所需内容。
举个例子,你在网上浏览一个图片很多的网页,如果没有 CDN,图片数据可能需要从很远的服务器传输过来,加载速度就会很慢。但有了 CDN,这些图片会被缓存到离你较近的边缘服务器上,当你请求这个网页时,能更快地获取图片,网页加载速度大幅提升。
工作流程:当用户向浏览器输入要访问的网址后,浏览器会向本地 DNS 服务器发起域名解析请求。本地 DNS 服务器若发现该域名使用了 CDN 服务,就会将解析请求转发给 CDN 的智能 DNS 服务器。智能 DNS 服务器会根据用户的地理位置、网络状况以及各 CDN 节点的负载情况等因素,计算出最佳的 CDN 节点,并将该节点的 IP 地址返回给用户。用户的浏览器根据返回的 IP 地址,向对应的 CDN 节点发起内容请求。如果该节点缓存了用户所需的内容,就会直接将内容返回给用户;若没有缓存,则 CDN 节点会向源服务器请求内容,获取后一方面缓存到本地,以备后续请求使用,另一方面将内容返回给用户。
CDN 的作用主要体现在以下几个方面:
提升访问速度:将资源缓存到离用户最近的节点,减少网络传输延迟,极大提高页面加载速度。如访问一些大型电商网站时,CDN 能让商品图片、描述等信息快速呈现。
减轻源站压力:分担了大量的流量请求,降低了源服务器的负载。例如热门新闻网站在突发热点事件时,大量用户同时访问,CDN 可使源站服务器不至于因流量过大而崩溃。
增强可用性和稳定性:即便源站出现故障,CDN 的缓存仍能为用户提供部分内容,保障服务的连续性。像一些游戏服务器在维护时,玩家仍可通过 CDN 获取部分游戏资源。
优化带宽使用:通过就近访问,减少了跨区域的数据传输,优化了带宽成本。这对于跨国企业的全球业务访问尤为重要。
具备防御网络攻击能力:CDN 节点的分布式架构能有效抵御 DDoS 攻击,保护源站安全。许多知名网站都借助 CDN 的这一特性,保障自身在遭受攻击时仍能正常运营。
在渗透测试、网络安全评估以及某些特定的技术研究场景中,绕过 CDN 查找真实 IP 是非常必要的。因为在这些情况下,若仅知道 CDN 节点的 IP,而无法获取目标服务器的真实 IP,就难以对目标服务器进行深入的分析、测试以及精准的安全防护策略制定 。例如,安全研究人员在对某网站进行全面的安全评估时,如果无法绕过 CDN 找到真实 IP,就无法对源服务器进行全面的漏洞扫描和安全检测,可能会遗漏一些潜在的安全风险。
在进行绕过 CDN 查找真实 IP 的操作之前,我们需要先判断目标网站是否使用了 CDN。以下为大家介绍两种简单有效的判断方法。
利用多地 Ping 服务,如站长工具 Ping 检测(http://ping.chinaz.com/ )、爱站网 Ping 检测(https://ping.aizhan.com/ )等,从不同地区的服务器向目标网站发送 Ping 请求 。由于 CDN 会将内容缓存到各地的边缘节点,若目标网站使用了 CDN,那么从不同地区 Ping 该网站时,解析出的 IP 地址通常会不唯一。例如,当我们使用站长工具 Ping 检测对某知名电商网站进行检测时,可能会得到多个不同的 IP 地址,这就表明该网站使用了 CDN。反之,如果返回的 IP 地址始终是同一个,那么该网站很可能未使用 CDN 。
Nslookup 是一种常用的域名查询工具,在 Windows 系统中无需额外下载即可使用 。通过在命令提示符中输入 “nslookup 目标域名”,我们可以查询该域名解析的 IP 地址。若解析结果中出现多个不同的 IP 地址,那么大概率该网站使用了 CDN。例如,执行 “nslookup www.baidu.com”,如果返回多个不同的 IP 地址,这就说明百度使用了 CDN 服务 。因为 CDN 的智能 DNS 服务器会根据不同的情况,将域名解析到多个不同的 CDN 节点 IP 上,以实现负载均衡和内容加速。
许多网站在使用 CDN 之前,会将域名直接解析到真实 IP 上。通过查询域名的历史解析记录,我们就有可能找到网站未使用 CDN 时的真实 IP。像
iphistory(https://viewdns.info/iphistory/ )、
DNS 查询(https://dnsdb.io/zh-cn/ )、
微步在线(https://x.threatbook.cn/ )、
域名查询(https://site.ip138.com/ )、
DNS 历史查询(https://securitytrails.com/ )
等网站,都提供了历史 DNS 记录查询功能。以 securitytrails 为例,在其搜索框中输入目标域名,即可查看该域名的历史解析记录,从中找到曾经解析过的真实 IP 。
有些网站在部署 CDN 时,可能仅对主域名进行了配置,而部分子域名并未使用 CDN 服务。因此,通过查找子域名并判断其是否使用 CDN,我们可以找到真实 IP。具体方法如下:
搜索引擎查询:利用 Google、百度、Bing 等传统搜索引擎,通过特定的搜索语法查找子域名。例如,在 Google 中输入
“site:baidu.com inurl:baidu.com”,
就可以搜索出百度的部分子域名。
在线查询工具:诸如
http://tool.chinaz.com/subdomain 、
http://i.links.cn/subdomain 、
http://subdomain.chaxun.la 、
http://searchdns.netcraft.com/ 、
https://www.virustotal.com/
等在线工具,能帮助我们快速查找子域名。
子域名爆破工具:
Layer 子域名挖掘机、
wydomain(https://github.com/ring04h/wydomains )、
subDomainsBrute(https://github.com/lijiejie/Sublist3r )、
Sublist3r
(https://github.com/aboul3la/Sublist3r )
等工具,通过字典爆破的方式,能挖掘出更多的子域名。
一些网站在提供邮箱注册、邮箱找回密码、RSS 邮件订阅等功能时,会使用真实服务器发送邮件。我们可以通过注册账号、请求找回密码等操作,让网站给自己发送邮件,然后查看邮件头信息,从中提取出真实 IP。例如,在收到的邮件中,查看 “Received” 字段或 “Return-Path” 字段,有可能找到网站的真实 IP 。
钟馗之眼(https://www.zoomeye.org )、
Shodan(https://www.shodan.io )、
Fofa(https://fofa.so )
等网络空间安全引擎,通过对全网设备的扫描和信息收集,能为我们提供丰富的网络资产信息。在这些引擎中,通过输入目标网站的关键字或域名进行搜索,有可能找到被收录的真实 IP。例如,在 Fofa 中输入 “domain="目标域名"”,就可以查找与该域名相关的 IP 地址信息。
SSL 证书中包含了域名、子域名和电子邮件地址等信息,且证书颁发机构会将证书发布到公共日志中。我们可以利用 SSL 证书搜索引擎,如 Censys(https://censys.io/ipv4 ),通过搜索目标网站的域名,获取与之相关的 SSL 证书信息,进而从证书中查找真实 IP。在 Censys 搜索框中输入 “parsed.names: 目标域名 and tags.raw: trusted”,就能筛选出有效的证书,并查看使用该证书的 IPv4 主机列表,从中找到可能的真实 IP 。
部分 CDN 厂商主要针对国内线路进行优化,而在国外的线路部署较少。因此,我们可以利用国外的 DNS 服务器进行域名解析,通过国外主机访问目标网站,有较大概率获取到真实 IP。我们可以使用
https://asm.ca.com/zh_cn/ping.php 、
http://host-tracker.com/ 、
http://www.webpagetest.org/ 、
https://dnscheck.pingdom.com/
等国外多 PING 测试工具,从不同的国外节点对目标域名进行解析和访问,观察解析结果中是否存在真实 IP 。
借助 Zmap
(https://github.com/zmap/zmap )、
masscan
(https://github.com/robertdavidgraham/masscan )
等工具,可以对整个互联网进行扫描。Zmap 号称能在 45 分钟内扫遍全网,masscan 更是最快可在六分钟内完成互联网端口扫描。通过对扫描结果进行关键字查找,如查找目标网站的特征字符串、特定端口开放情况等,我们可以筛选出与目标网站相关的 IP 地址,从中找到真实 IP 。
在 CDN 的配置过程中,如果存在一些配置细节问题,就可能导致 CDN 防护被绕过,从而暴露真实 IP。例如:
域名解析配置不当:为了方便用户访问,一些网站会将www.test.com和test.com解析到同一个站点,但如果 CDN 只配置了www.test.com,那么通过访问test.com就可以绕过 CDN,直接访问到真实 IP 。
协议配置不当:若站点同时支持 http 和 https 访问,而 CDN 只配置了 https 协议,此时访问 http 就有可能绕过 CDN,获取到真实 IP 。
一些网站可能会存在 phpinfo、github 泄露等含有服务器信息的探针类文件。通过访问这些文件,我们可以获取到服务器的相关信息,其中可能包含真实 IP。例如,访问 “目标网站 /phpinfo.php”,在 phpinfo 页面中查找 “Server API”、“Local IP” 等相关信息,有可能找到网站的真实 IP 。
某些网站出于成本或其他考虑,可能未对根域或部分子域部署 CDN。我们可以通过对根域和各个子域进行逐一排查,判断是否存在未使用 CDN 的情况。如果发现某个根域或子域的解析 IP 与 CDN 节点 IP 不同,那么这个 IP 很可能就是真实 IP。例如,使用 ping 命令对根域和各个子域进行测试,观察解析出的 IP 地址是否一致 。
当网站的 Web 服务和 Email 服务运行在同一台服务器上时,邮件服务器的 IP 地址可能就是网站的真实 IP。我们可以通过查询网站的 MX 记录(邮件交换记录),获取邮件服务器的信息,然后对邮件服务器进行进一步分析。在命令提示符中输入 “nslookup -type=mx 目标域名”,即可查询到目标网站的 MX 记录,从中找到邮件服务器的域名,再通过对该域名进行解析,获取其对应的 IP 地址 。
FOFA 是一款强大的网络空间搜索引擎,我们可以通过在 FOFA 中搜索网站标题关键字,来查找与之相关的 IP 地址。例如,已知目标网站的标题中包含特定的关键词,在 FOFA 中输入 “title="关键词"”,进行搜索后,就能得到一系列符合条件的 IP 地址和域名信息。通过对这些信息进行筛选和分析,有可能找到目标网站的真实 IP 。
Censys 除了可以通过域名搜索 SSL 证书外,还可以通过 SSL 证书的 HASH 值进行搜索。我们可以先获取目标网站 SSL 证书的 HASH 值,然后在 Censys 中输入相关搜索语句,如 “ssl.cert.sha256_fingerprint:"证书 HASH 值"”,即可查找使用该证书的 IP 地址。这种方式能够帮助我们从海量的网络设备中,精准定位到与目标网站 SSL 证书相关的服务器,从而获取真实 IP 。
通过对目标网站的子域名进行分析,找出多个子域名对应的 IP 地址,并观察这些 IP 地址是否属于同一 C 段。如果发现多个子域名的 IP 地址集中在某一 C 段,且部分子域名未使用 CDN,那么可以对该 C 段的服务器进行全面扫描和分析。使用 Nmap 等工具对该 C 段的服务器进行端口扫描和服务探测,结合目标网站的特征,判断是否存在真实 IP。例如,如果发现某一 IP 地址开放了与目标网站相同的服务端口,且服务特征相似,那么这个 IP 很可能就是真实 IP 。
如果目标网站存在 XSS(跨站脚本攻击)、CSRF(跨站请求伪造)、文件上传等漏洞,我们可以利用这些漏洞来绕过 CDN 获取真实 IP。以 XSS 漏洞为例,通过在目标网站注入恶意脚本,当受害者访问该网站时,恶意脚本可以获取受害者的 IP 地址,并将其发送到我们指定的服务器。由于受害者与目标网站的源服务器直接通信,因此获取到的 IP 地址可能就是真实 IP 。
通过社会工程学手段,如钓鱼邮件、电话诈骗等方式,尝试获取 CDN 控制台的账号密码或相关信息。一旦获取到 CDN 控制台的访问权限,我们就可以在控制台中查看源服务器的真实 IP 地址。例如,向网站管理员发送一封伪装成 CDN 服务提供商的钓鱼邮件,诱导管理员点击邮件中的链接,输入 CDN 控制台的账号密码,从而获取相关信息 。
借助一些平台,如 Censys,通过比较 HTTP 标头来查找原始服务器 IP。每个服务器的 HTTP 标头都包含了丰富的信息,如服务器软件版本、操作系统类型等。我们可以通过分析目标网站的 HTTP 标头特征,在 Censys 等平台上设置相应的搜索条件,查找具有相同 HTTP 标头特征的服务器,从而找到可能的真实 IP。例如,在 Censys 中输入
“80.http.get.headers.server:
目标服务器软件名称”,进行搜索后,筛选出符合条件的服务器 IP 地址 。
仔细分析网站返回的内容,也可能发现真实 IP 的线索。例如,网站的 favicon(网站图标)通常具有唯一的 hash 值,我们可以通过计算目标网站 favicon 的 hash 值,然后在搜索引擎中搜索具有相同 hash 值的 IP 地址。使用 Python 脚本可以方便地计算 favicon 的 hash 值,代码如下:
import mmh3
import requests
request = requests.get('http://www.xx.com/favicon.ico')
favicon = request.content.encode('base')
hash = mmh3.hash(favicon)
print 'http.favicon.hash:'+ str(hash)
通过这种方式,有可能找到与目标网站使用相同 favicon 的服务器,进而获取真实 IP 。
持续关注目标网站的动态,因为 CDN 的配置可能会发生变更。在 CDN 配置变更过程中,可能会出现短暂的真实 IP 暴露情况。我们可以定期使用 ping 命令、nslookup 命令等工具对目标网站进行检测,观察解析出的 IP 地址是否发生变化。一旦发现 IP 地址与之前的 CDN 节点 IP 不同,就需要进一步分析该 IP 是否为真实 IP 。
通过扫描不同节点的端口,获取其 banner 信息,对比不同节点的 banner 信息,找出与目标网站服务特征一致的服务器,从而确定真实 IP 所在服务器。使用 Nmap 工具对不同节点进行扫描,获取其开放端口的 banner 信息。例如,执行 “nmap -sV -p 80,443 目标 IP”,可以扫描目标 IP 的 80 和 443 端口,并获取相应的服务版本等 banner 信息。将获取到的各个节点的 banner 信息与目标网站的已知服务特征进行对比,如果发现某个节点的 banner 信息与目标网站的服务特征高度匹配,那么该节点的 IP 很可能就是真实 IP 。
绕过 CDN 查找真实 IP 的方法多种多样,每种方法都有其独特的原理和适用场景 。在实际的网络安全工作中,这些方法为安全研究人员和运维人员提供了有力的工具,帮助他们更好地了解目标网络架构,发现潜在的安全隐患,从而制定更加有效的安全防护策略。同时,对于网站管理员来说,了解这些绕过方法也至关重要,这有助于他们及时发现并弥补 CDN 配置中的漏洞,加强对网站的安全防护 。
需要强调的是,以上所有方法的使用都必须遵循法律法规,仅可用于合法的安全测试、研究以及在获得授权的情况下进行。未经授权试图获取他人网站的真实 IP 并进行恶意攻击,属于违法行为,将会面临严重的法律后果。网络空间需要我们共同维护,只有在合法合规的框架内进行技术探索和实践,才能真正推动网络安全技术的进步,保障网络空间的安全与稳定 。