Lamber's Blog

绕过CDN寻找网站真实IP

字数统计: 2.4k阅读时长: 8 min
2021/09/17

一. 什么是CDN, 为什么要绕过CDN

什么是CDN以及CDN加速?

CDN全称是(Content Delivery Network), 即内容分发网络. CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。

CDN对网站有什么好处?

首先,开启CDN后的网站,会根据用户所在地的不同访问CDN的节点服务器,并不直接访问源服务器,这样可以减少网站服务器宽带资源,降低服务器压力。这也就是大家都在ping百度,但是不同地区得到的反馈ip不一样的原因。

其次,由于CDN节点的阻挡防护,可以更好的保护员服务器的安全。具体来说,CDN其实是充当了一个替身的角色,无论服务器是渗透还是DD0S攻击,攻击的目标都将是CDN节点,这样一来便间接的保护了网站本身。

为什么我们需要绕过CDN?

对于我们渗透测试者来说,我们在信息收集中重要的一步就是要得到目标服务器主机的真实IP地址,但如果目标服务器部署了CDN服务,那么往往我们直接访问得到的IP只是CDN节点服务器的IP,而不是真实的源服务器的IP地址,这是就需要我们想办法绕过CDN获取源服务器IP。

二. 验证是否存在CDN

1. 多地Ping查询

使用不同区域ping,查看ping的ip结果是否唯一。若不唯一,则目标网站可能存在CDN。

多地ping网站:

2. nslookup

原理同上, 如果返回域名解析对应多个IP地址多半是使用了CDN.

有CDN的示例

无CDN的示例:

3. 使用工具直接查询

参考如下网站

三. 绕过CDN查找真实IP

1. 查询子域名

由于CDN本身也不便宜, 再加上某些企业业务线众多, 所以很多站长可能只会对主站或者流量大的子站点做了 CDN, 而很多小站子站点又跟主站在同一台服务器或者同一个C段内, 此时就可以通过查询子域名对应的 IP 来辅助查找网站的真实IP.
查询子域名的方法就很多了:

  1. 各种子域名扫描器: subDomainsBrute、Sublist3r等
  2. Google hack
  3. 还有某些网站可以进行查询。例如:
    https://dnsdb.io/zh-cn/
    https://x.threatbook.cn/

2. 利用网站漏洞查询

  1. 敏感文件泄漏, 比如: phpinfo之类的探针, Github信息泄漏, Apache status和Jboss status敏感信息泄露, 网页源代码泄露, svn信息泄露信、github信息泄露等。
  2. 若存在web漏洞,服务器主动与我们发起请求连接,我们也能获取目标站点真实ip。例如: XSS盲打、SSRF、命令执行反弹shell等。
  3. 无论是用社工还是其他手段, 拿到了目标网站管理员在CDN的帐号, 从CDN的配置中找到网站的真实IP

3. 查询历史DNS记录

查询ip与域名绑定的历史记录,可能会发现使用CDN之前的记录。相关查询网站有:

4. 利用网站返回的内容寻找真实原始IP

如果原始服务器IP也返回了网站的内容,那么可以在网上搜索大量的相关数据。

浏览网站源代码,寻找独特的代码片段。在JavaScript中使用具有访问或标识符参数的第三方服务(例如Google Analytics,reCAPTCHA)是攻击者经常使用的方法。

以下是从HackTheBox网站获取的Google Analytics跟踪代码示例:

ga(’create’,’UA-93577176-1’,’auto’);
可以使用80.http.get.body:参数通过body/source过滤Censys数据,不幸的是,正常的搜索字段有局限性,但你可以在Censys请求研究访问权限,该权限允许你通过Google BigQuery进行更强大的查询。

Shodan是一种类似于Censys的服务,也提供了http.html搜索参数。
搜索示例:https://www.shodan.io/search?query=http.html%3AUA-32023260-1

5. Mx记录或邮件

很多站点都有发送邮件sendmail的功能, 如RSS邮件订阅等. 而且一般的邮件系统很多都是在内部, 没有经过CDN的解析. 查看邮件源码里面就会包含服务器的真实IP.

6. 使用国外主机解析域名

国内很多 CDN 厂商因为各种原因只做了国内的线路, 而针对国外的线路可能几乎没有, 通过国外的一些冷门的DNS或IP去请求目标, 通过国外代理访问就能查看真实IP了, 或者通过国外的DNS解析,可能就能得到真实的IP查询网站:

7. 利用Zgrab绕CDN找真实IP

通过信息收集,缩小扫描范围,确定一个相对小的IP和端口范围(中国?AS号?B段?等)
通过http指纹特征和keyword等做综合判断。可使用工具如下:

zgrab是基于zmap无状态扫描的应用层扫描器,可以自定义数据包,以及ip、domain之间的关联。可用于快速指纹识别爆破等场景。
可参考这篇文章:利用Zgrab绕CDN找真实IP - Levy Hsu

8. 用 Zmap 扫全网

直接Zmap硬扫
可参考这篇文章:简单获取CDN背后网站的真实IP - 安全客 - 有思想的安全新媒体
假如需要找 xiaix.me 网站的真实 IP, 我们首先从 apnic 获取 IP 段, 然后使用 Zmap 的 banner-grab 扫描出来 80 端口开放的主机进行 banner 抓取, 最后在 http-req 中的 Host 写 xiaix.me。

9. 网络空间引擎搜索法

比如 zoomeye、fofa、shodan
通过这些公开的安全搜索引擎爬取得历史快照,主要得一些特征总结如下:

  • 特有的http头部(如server类型、版本、cookie等信息)、
  • 特定keyword(如title、css、js、url等)、
  • 特定的IP段搜索(如fofa支持C段搜索),

有些时候爬取的时候不一定含有上面那些特征,但是我们仍然需要仔细排查。
以fofa为例,只需输入:title:"网站的title关键字" 或者 body:"网站的body特征" 就可以找出fofa收录的有这些关键字的ip域名,很多时候能获取网站的真实ip

10. 利用SSL证书寻找真实原始IP

此方法来自于去年CplusHua表哥在Freebuf公开课《HTTP盲攻击的几种思路》中分享的:
查询网站:

  • https://censys.io/
    这个网址会将互联网所有的ip进行扫面和连接,以及证书探测。若目标站点有https证书,并且默认虚拟主机配了https证书,我们就可以找所有目标站点是该https证书的站点。
    443.https.tls.certificate.parsed.extensions.subject_alt_name.dns_names:www.xxx.com

11. F5 LTM 负载均衡解码获取真实内网ip

参考文章: 透过F5获取服务器真实内网IP - ThreatHunter
当服务器使用F5 LTM做负载均衡时, 通过对set-cookie关键字的解码真实ip也可被获取, 例如:Set-Cookie: BIGipServerpool_8.29_8030=487098378.24095.0000, 先把第一小节的十进制数即487098378取出来, 然后将其转为十六进制数1d08880a, 接着从后至前,以此取四位数出来, 也就是0a.88.08.1d, 最后依次把他们转为十进制数10.136.8.29, 也就是最后的真实ip。

12. 利用HTTP标头寻找真实原始IP

借助SecurityTrails这样的平台,任何人都可以在茫茫的大数据搜索到自己的目标,甚至可以通过比较HTTP标头来查找到原始服务器。

特别是当用户拥有一个非常特别的服务器名称与软件名称时,攻击者找到你就变得更容易。

如果要搜索的数据相当多,如上所述,攻击者可以在Censys上组合搜索参数。假设你正在与1500个Web服务器共享你的服务器HTTP标头,这些服务器都发送的是相同的标头参数和值的组合。而且你还使用新的PHP框架发送唯一的HTTP标头(例如:X-Generated-Via:XYZ框架),目前约有400名网站管理员使用了该框架。而最终由三个服务器组成的交集,只需手动操作就可以找到了IP,整个过程只需要几秒钟。

例如,Censys上用于匹配服务器标头的搜索参数是80.http.get.headers.server :,查找由CloudFlare提供服务的网站的参数如下:
80.http.get.headers.server:cloudflare

CATALOG
  1. 1. 一. 什么是CDN, 为什么要绕过CDN
    1. 1.1. 什么是CDN以及CDN加速?
    2. 1.2. CDN对网站有什么好处?
    3. 1.3. 为什么我们需要绕过CDN?
  2. 2. 二. 验证是否存在CDN
    1. 2.1. 1. 多地Ping查询
    2. 2.2. 2. nslookup
    3. 2.3. 3. 使用工具直接查询
  3. 3. 三. 绕过CDN查找真实IP
    1. 3.1. 1. 查询子域名
    2. 3.2. 2. 利用网站漏洞查询
    3. 3.3. 3. 查询历史DNS记录
    4. 3.4. 4. 利用网站返回的内容寻找真实原始IP
    5. 3.5. 5. Mx记录或邮件
    6. 3.6. 6. 使用国外主机解析域名
    7. 3.7. 7. 利用Zgrab绕CDN找真实IP
    8. 3.8. 8. 用 Zmap 扫全网
    9. 3.9. 9. 网络空间引擎搜索法
    10. 3.10. 10. 利用SSL证书寻找真实原始IP
    11. 3.11. 11. F5 LTM 负载均衡解码获取真实内网ip
    12. 3.12. 12. 利用HTTP标头寻找真实原始IP