首先讲一下什么是CDN。CDN是一种内容分发服务器,就是在不同地方部署这样的服务器来加速源服务器内容分发的速度(CDN服务器会缓存并存储内容,如网页、图片、视频、JavaScript 文件等),提高用户体验。
比如我访问某一个域名,DNS会解析到最近的一个CDN服务器的ip地址,这个服务器通常是离客户机最近的CDN服务器。
这样一来,当你ping这个域名时,返回的就不是源服务器地址,而是CDN服务器的地址,接下来的渗透测试手段就无法进行。因此,CDN绕过技术就非常重要。
0x01 判断域名是否开启CDN服务
使用超级ping判断域名是否开启CDN服务。超级ping的原理就是使用分布地点不同的服务器对要测试的域名进行访问,看看返回的ip值是否相等,如果出现不相等,那么可以确定这个域名开启了CDN服务。这里贴两个超级Ping的网站
网站测速|网站速度测试|网速测试|电信|联通|网通|全国|监控|CDN|PING|DNS 一起测试|17CE.COM
这里有一个要注意的点,CDN服务大部分都是购买云厂商的(就连大厂基本上也是用自己的云CDN产品),而这些厂商配置CDN的步骤基本可以分为以下3步:1.加速域名-需要启用加速的域名 2:加速区域-需要启用加速的地区 3:加速类型-需要启用加速的资源
0x02 简单尝试
根据上述的CDN配置的步骤,很容易发现这其中有几个漏洞。
如果你拿到的是一个目标地址是一个主域名,并且假设:服务器对应的域名中,只开启了对主域名进行CDN加速(一般也会是这种情况)。那么这个时候我们就可以ping这个域名的子域名。如果运气好,返回的子域名的ip和你ping主域名的ip不一样,那么很大概率ping子域名返回的ip就是目标服务器的ip。为了验证,我们可以把目标域名绑定ping子域名返回的ip地址,再ping一次,能ping通,那么得到的子域名ip百分之九十九就是目标真实域名。
这里也可能会有一些意外情况,比如 1.子域名解析配置的是另一台服务器 2.他对每个子域名都做了CDN加速,你绑定后ping不通 3.绑定子域名ip后ping通了,但实际上是这台服务器同时对主域名和子域名进行CDN加速,这个ip依旧是CDN服务器ip,这就是上面99概率的意外情况。接下来介绍一些另外的方法。
0x02 SSRF漏洞&RCE漏洞&遗留文件
漏洞利用
SSRF漏洞是一种让攻击者可以使目标服务器发起恶意请求的漏洞,通常发生在服务器端能够主动向外部或内部资源发起请求(如 HTTP 请求、DNS 查询、TCP 连接等)的情况下。 RCE漏洞,攻击者可以通过该漏洞在目标系统上执行任意代码。这种漏洞允许攻击者通过网络远程执行恶意代码。这两种漏洞在本例中原理相似。
我们可以先开启我们黑客服务器的某个端口进行监听,然后利用漏洞让目标服务器对我们开启的端口发起请求,就能监听到请求是从哪里发出的,就找到了真实的目标ip。举个例子:
遗留文件
扫描目标路径下的文件,看看有没有类似phpinfo的文件。访问这个文件能看到目标真实的ip地址
0x03 邮件系统绕过
首先我们明确两点,邮件系统一般是不会做CDN加速的,这与邮件之间的传输协议与邮件的主要目的有关。部署架设的邮件服务器如果向外部用户发送邮件的话,那么邮件头部的源码中会包含此邮件服务器的真实IP地址。
所以我们可以尝试让目标域名产业旗下的邮件系统给我们发送邮件,这样就能得到真实ip。注意,目标域名的资产架构中必须要有自己的域名系统,如果说使用的是第三方邮件系统,比如QQ邮箱,发送过来的邮件头文件中的ip地址就是QQ邮箱服务器的ip。
让对方主动发邮件过来的方式有很多,比如说用用邮箱注册、密码找回、产品推送、执行某业务后邮件通知等。
我们也可以采取另一种办法,自己建立一个邮箱系统,这里特别注意不能用第三方的邮件系统(比如qq邮箱 网易邮箱)。我们用这个邮箱系统发邮件给部署在目标服务器上的邮箱系统,这里的收件人要随便乱写一个,保证他不存在,因为我们要接收到一个发送失败的通知的原文件,这个文件里包含目标服务器的ip。使用第三方的邮件系统,只能得到失败的的通知。
但我们不得不考虑一个问题,如果对方存在一个中间的邮件系统,对方发送邮件时先发送到中间的邮件服务器,再转发给我,我依旧得不到目标的ip。我该怎么办?
0x04 全网扫描&fuckcdn
确定部署了CDN,我们可以先查看这个CDN是来自哪个厂商的
因为一般是哪个厂商的云服务器,就部署这个厂商的CDN服务。我们接着通过ip查询工具(纯真ip地址数据库)查询到这个厂商云服务器ip的范围
找到相关的范围后(先进行一些信息收集,缩小范围)将范围的数据填写到fuckcdn目录下ip.txt中,并修改目录下set.ini文件中的url为目标域名,以及网站中的str关键词。找到fuckcdn.exe运行后得到result_ip.txt文件,即得到结果。
能这么做的原因是因为云厂商的 云服务器 IP 范围通常与 CDN 服务器 的 IP 范围是分开的。