0%

绕过CDN寻找真实的IP

摘要

现有的很多网站为了提高用户访问的效率和安全性,会采用CDN(内容分发网络)来加速。CDN解决的是如何将数据快速可靠从源站传递到用户的问题。用户获取数据时,不需要直接从源站获取,通过CDN对于数据的分发,用户可以从一个较优的服务器获取数据,从而达到快速访问,并减少源站负载压力的目的。同时CDN都有很强的防护措施,正面很难突破,因此可以尝试绕过CDN找到真实的网站IP,直接通过IP访问真实服务器寻找各种漏洞以实现攻击。

什么是CDN

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

CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。

CDN解析过程

无CDN情况下解析过程

0vbc5z7xg5.png

  • 用户浏览器输入域名
  • 浏览器请求DNS服务器解析IP地址返回给用户
  • 浏览器访问该IP请求服务器内容返回给浏览器

有CDN情况下解析过程

2j58f84p0n.png

  • 用户浏览器输入域名
  • 浏览器请求DNS服务器解析域名。由于有CDN,因此DNS服务器会将域名的最终解析权交由CDN专用的DNS服务器来完成
  • CDN的DNS服务器会返回CDN的负载均衡设备的IP地址
  • 用户向该IP发起请求,CDN负载均衡会选择合适的缓存服务器将数据返回给用户

想要绕过CDN首先得判断网站是否存在CDN

判断网站是否有CDN

多地ping

如果存在CDN的话,DNS解析出的IP地址为CDN缓存服务器的地址,因此可能存在多个IP

ping.jpg
http://ping.chinaz.com/

nslookup

返回的域名解析有多个IP地址,可能存在CDN

nslookup.jpg

网站指纹

  • 浏览器插件:Wappalyzer

wapp.jpg

使用CDN查询工具

planet.jpg

IP判断

如果域名解析的ip地址的归属地与公司所在地不同,而且IP归属地为云服务或者CDN厂商的地址,说明有可能有CDN。

ip.jpg

绕过CDN查找真实IP

域名历史解析记录

查看IP与域名绑定的历史记录,有可能会存在使用CDN前的记录信息

1
2
3
4
https://dnsdb.io/zh-cn/
https://x.threatbook.cn/
http://toolbar.netcraft.com/site_report?url=
http://tools.bugscaner.com/historydns.html

weibu.jpg

查询子域名

很多站长也许只会对主站或者流量大的子站点加 CDN,很多小站点又跟主站在同一台服务器或者同一个C段内,此时就可以通过子域名查询对应的 IP 来辅助查找网站的真实IP。

利用网络空间搜索引擎查找

这种方法有时候可以找到真实的网站IP,但有时候解析出的IP地址是CDN的地址,有一定的误差,注意仔细甄别。

shodan.png

censys.png

利用HTTP标头查找

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

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

利用国外主机解析域名

国内很多 CDN 厂商因为各种原因只做了国内的线路,而针对国外的线路可能几乎没有,此时我们使用国外的主机直接访问可能就能获取到真实IP。

利用SSL证书寻找真实IP

证书颁发机构(CA)必须将他们发布的每个SSL/TLS证书发布到公共日志中,SSL/TLS证书通常包含域名、子域名和电子邮件地址。因此SSL/TLS证书成为了攻击者的切入点,可以通过网络空间搜索引擎查找。

通过网站漏洞查找

  • 目标敏感文件泄露,例如:phpinfo之类的探针、GitHub信息泄露等。
  • XSS盲打,命令执行反弹shell,SSRF等。
  • 无论是用社工还是其他手段,拿到了目标网站管理员在CDN的账号,从而在从CDN的配置中找到网站的真实IP。

利用工具查找

防范措施

之所以可以绕过CDN来实现攻击,主要是由于网站服务器支持通过IP地址直接访问,因此需要配置只允许域名进行访问就可以防范被绕过。

Nginx配置:

1
2
3
4
5
6
7
8
9
10
#添加一个server,在原server里绑定域名
server {
listen 80 default;
server_name _;
return 403;
}
server {
listen 80;
server_name www.demo.com;
.........

Apache配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#在httpd.conf最后面加上

<VirtualHost 此处填写IP>
ServerName 此处填写IP
<Location />
Order Allow,Deny
Deny from all
</Location>
</VirtualHost>

<VirtualHost 此处填写IP>
DocumentRoot /var/www/html
ServerName 此处填写域名
</VirtualHost>