CDN简介及浅谈绕过
CDN全称是内容分发网络。其目的是让用户能够更快速的得到请求的数据。简单来讲,CDN就是用来加速的,他能让用户就近访问数据,简单来说,就是选择离你最近的CDN节点,这样就能更快的获取到需要的数据。
CDN的两种接入方式:
1. 更换域名所使用的DNS服务为CDN提供商的DNS解析服务,并将域名解析到真实IP上。
2. 使用CNAME方式将域名接入CDN。
如何检测目标是否存在CDN?
方法一、超级ping :根据不同地区的服务器对目标系统的一个检测,查看目标返回的IP地址是否是同一个。同一个IP地址没用CDN技术,返回多个IP地址,用了CDN技术
例如:随便ping一个域名,根据返回的IP地址以及IP归属地判断是否启动CDN技术
返回IP地址以及归属地是如果是同一个的话,没有应用CDN技术
在线网站
http://ping.chinaz.com/
http://ping.aizhan.com/
http://itools.com/tool/just-ping
另外使用一些冷门国家(非洲国家,南美国家之类的)的ip去ping很大几率会没有CDN,从而获取到真实ip
在线网站
http://www.webkaka.com/ping.aspx
方法二:nslookup www.xxx.com
返回一个地址,没有启用CDN技术
返回多个地址,启用CDN技术
方法三:
利用工具或者一些网站查询:
https://www.CDNplanet.com/tools/CDNfinder/
http://www.ipip.net/ip.html
https://myssl.com/CDN_check.html
拿最后一个在线网站做个例子:
输入一个没有CDN的网站www.xxx.com
点击查看详情:
提示无法连接,此网站还能看到对应ip,说明该域名不存在CDN。
再检测www.baidu.com
很明显,是存在CDN的。
方法四:
利用Wappalyzer插件:
该插件能够分析目标网站所采用的平台构架、网站环境、服务器配置环境、JavaScript框架、编程语言等参数等
二、绕过CDN寻找真实ip
为什么需要寻找真实ip,这就是之前CDN的作用:它会根据你那个地区,分配一个对应地区的一个节点,能让你访问的更快,达到一个更快的效果。再有CDN的情况下,你直接ping那个网站,得到的IP,都是没用的。
绕过方法如下:
1. 相同国家的ip地址访问
因为CDN费用不便宜,针对某国国内的用户可能只在国内设置CDN,这时你用国外的ip去访问,可能就能查到它的真实IP。
还有一种可能就是,假设这个网站是美国的,其他国家访问此网站访问的都是CDN的IP,而通过美国ip访问时可能不设置CDN。
2. 子域名查询(机率较大)
如果网站有CDN的话,第一时间就会用全国ping去看,一般国内外都会设置CDN,可能概率比较小,相对来说子域名的话概率就比较大了,因为CDN比较贵,大部分都只会在主站设置CDN,此时可以用子域名查找(要主站跟子域名在同一个服务器上),很大概率会查到真实ip。
子域名工具如下:
subDomainbrute
https://github.com/lijiejie/subDomainsBrute
OneForAll
https://github.com/shmilylty/OneForAll
layer子域名挖掘机
在线子域名:
https://phpinfo.me/domain/
http://tool.chinaz.com/subdomain
http://scan.javasec.cn/
谷歌语法:"site:baidu.com -www"就能查看除www外的子域名。
3. 查询历史记录
查看IP与域名绑定的历史记录,说不定就能找到使用CDN前的记录。
查询CDN历史记录的网站:
https://x.threatbook.cn/
http://www.17ce.com
http://www.ab173.com/dns/dns_world.php
https://dnsdb.io/zh-cn/
http://viewdns.info/
https://who.is/
http://toolbar.netcraft.com/site_report?url=
https://tools.ipip.net/cdn.php
https://securitytrails.com/
https://whoisrequest.com/history/
https://dnsdumpster.com/
http://www.ip138.com/
https://www.virustotal.com/gui/home/url
https://research.domaintools.com/research/hosting-history/
https://community.riskiq.com/
https://ipchaxun.com/
http://www.crimeflare.com/cfssl.html
https://sitereport.netcraft.com/?url
https://github.com/vincentcox/bypass-firewalls-by-DNS-history
4. 空间搜索引擎
利用空间搜索引擎,查询目标网站,查看里面的特有http头或者一些关键字,也是有可能发现目标网站的真实IP。
常用空间搜索引擎:
https://fofa.so/
https://www.shodan.io/
https://www.zoomeye.org/
利用“FOFA网络空间安全搜索引擎”搜索目标网站源代码中的title标签内容即可得到真实IP地址。
查看源码获取title
title="***"
5. 敏感文件(探针或phpinfo.php)
有一些网站可能遗留一些敏感文件,比如phpinfo、探针 还有一些绝对路径
小皮搭建网站时会遗留phpinfo
尤其是国外的网站,会留phpinfo的,探针和phpinfo差不多 探针以p.php
有些程序员在网站搭建完后,有些东西它不删,留下php探针、phpinfo、甚至是phpmyadmin留下来了,phpinfo、php探针都会记录下来服务器真实的IP
常见例子:
p.php php.php phpinfo.php tz.php yahei.php等
谷歌语法:inurl:phpinfo.php intitle:"phpinfo()"
6. 去掉网站域名开头的www
现在大部分CDN厂商只要求把 www.xxx.com的cname到CDN主服务器上去,www.xxx.com和 http://xxx.com 是两条独立的解析记录,一般只会把带有www开头的,比如www.xxx.com 做CDN,根据这样的设置,我们只需要去掉www用超级ping即可发现真实ip。
如:
ping xxx.com
7. 工具
CloudFail是一种战术侦察工具,旨在收集有关受CloudFlare保护的目标的足够信息,希望能够发现服务器的位置。我们可以用Cloudfail工具进行查询;
工具下载地址:
https://github.com/m0rtem/CloudFail
使用方法:
python3 cloudfail.py --target www.xxx.com
python3 cloudfail.py -t www.xxx.com
HatCloud
下载链接
https://github.com/HatBashBR/HatCloud
CloudFlair
https://github.com/christophetd/CloudFlair
通过滥用DNS历史记录绕过防火墙
https://github.com/vincentcox/bypass-firewalls-by-DNS-history
8. 通过邮件获取
通常在订阅邮件、注册账号、找回密码、意见反馈,网站发来验证的邮件,查看邮件源代码,有可能有其真实ip。
此时通过一次性邮箱可以接收,另外在社工钓鱼时也有大用。
利用邮箱注册、邮箱密码找回、邮箱订阅等,通过网站给自己发信息邮件
在线一次性邮箱地址:
第一类:临时邮箱服务
你得到一个随机生成的临时Email地址,这个地址的有效期只有几分钟或者几个小时。
* 10 minute mail(有效期10分钟):http://www.10minutemail.com/
* Guerrilla mail(有效期15分钟):http://www.guerrillamail.com/
第二类: 开放式邮箱服务(推荐)
这一类网站提供的邮箱地址是长期有效的,而且往往允许你挑选任意的用户名。但是,邮箱没有密码保护,任何人都可以查看和使用,而且所有邮件在收到24小时后会自动删除。
* Mailinator:http://www.mailinator.com/
* My Trash Mail:http://www.mytrashmail.com/
第三类:https://anonymousemail.me/ 匿名邮箱可以发邮箱,以后apt要用,钓鱼可以用,在以后项目的时候,往往钓鱼能起到更好的效果。
9. 目标网站漏洞
Web漏洞:通过XSS、代码执行漏洞、SSRF、XXE、文件上传漏洞查找真实IP
信息泄露:Apache status、Jboss status、SVN、Github等敏感信息和网页源代码泄露
10. ddos(以量打量)
11. SSL服务器证书
SSL证书就是遵守SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。
查SSL证书:https://crt.sh/
还有使用Censys引擎:https://censys.io/ipv4
使用搜索语法: 443.https.tls.certificate.parsed.extensions.subject_alt_name.dns_names: www.xxx.com
12. 扫全网
在手工测试之后,还是没有找到真实IP,才使用脚本,物理电脑网卡带宽等配置要求高,不然电脑就死了,建议使用服务器带宽高的。
脚本地址:
https://github.com/boy-hack/w8fuckCDN
https://github.com/Tai7sy/fuckCDN 是一个扫全网的工具,所以带宽要求高,扫描时间特别久
Zmap:
https://github.com/zmap/zmap
Masscan:
https://github.com/robertdavidgraham/masscan
xcdn:
https://github.com/3xp10it/xcdn
13. 真实IP地址获取后绑定指向地址更改本地hosts解析指向文件
本机hosts路径:C:\Windows\System32\drivers\etc
输入你所查到的真实ip,对应解析,看是否能正常访问
14. F5 LTM解码法
当服务器使用F5 LTM做负载均衡时,通过对set-cookie关键字的解码真实ip也可被获取,
F5中的cookies格式如下:
BIGipServer <pool name> = <编码服务器IP>.<编码服务器端口> .0000
从中我们可以得知一下信息:
BIGipServer - 我们现在知道服务器在F5 BigIP设备后面。
<pool name> - F5上配置的池名称。
<编码服务器IP> - 进行编码的服务器的真实IP。
<编码服务器端口> - 进行编码的服务器的真实端口。
例如:Set-Cookie: BIGipServerpool= 2786502848.24095.0000,先把第一段10进制数即2786502848转为十六进制数a616a8c0(如果不够8位,在前面补0),接着分别取两位数,取四次,再倒着排序也就是c0.a8.16.a6,最后依次把他们转为十进制数192.168.67.154,也就是最后的真实ip
15. 社工
利用社工,得到CDN的账号密码,真实ip不就来了(都社工了,只社工真实ip?)
16. 利用老域名
在换新域名时,常常将 CDN 部署到新的域名上,而老域名由于没过期,可能未使用 CDN ,然后就可以直接获取服务器真实 ip
例如 xxx.org - xxx.com
域名更新时,可能老域名同时解析到真实服务器,但是没有部署 CDN
这个可以通过搜集域名备案的邮箱去反查,可能会有意外收获
17. 从App入手
APP是个必不可少的突破口,很多项目网站做的很好,但是APP缺没那么完善,使用burpsuit或者fiddler抓包找真实ip
18. 配置不当
在配置CDN的时候,需要指定域名、端口等信息,有时会因为疏忽,配置不完善导致绕过。
例如:http和https都可以访问,只配置了https协议,这是访问http即可绕过。
19. favicon_hash 匹配
利用http.favicon.hash 语法,来匹配 icon 的 hash 值。
工具地址:
https://github.com/Ridter/get_ip_by_ico/blob/master/get_ip_by_ico.py
CDN全称是内容分发网络。其目的是让用户能够更快速的得到请求的数据。简单来讲,CDN就是用来加速的,他能让用户就近访问数据,简单来说,就是选择离你最近的CDN节点,这样就能更快的获取到需要的数据。
CDN的两种接入方式:
1. 更换域名所使用的DNS服务为CDN提供商的DNS解析服务,并将域名解析到真实IP上。
2. 使用CNAME方式将域名接入CDN。
如何检测目标是否存在CDN?
方法一、超级ping :根据不同地区的服务器对目标系统的一个检测,查看目标返回的IP地址是否是同一个。同一个IP地址没用CDN技术,返回多个IP地址,用了CDN技术
例如:随便ping一个域名,根据返回的IP地址以及IP归属地判断是否启动CDN技术
返回IP地址以及归属地是如果是同一个的话,没有应用CDN技术
在线网站
http://ping.chinaz.com/
http://ping.aizhan.com/
http://itools.com/tool/just-ping
另外使用一些冷门国家(非洲国家,南美国家之类的)的ip去ping很大几率会没有CDN,从而获取到真实ip
在线网站
http://www.webkaka.com/ping.aspx
方法二:nslookup www.xxx.com
返回一个地址,没有启用CDN技术
返回多个地址,启用CDN技术
方法三:
利用工具或者一些网站查询:
https://www.CDNplanet.com/tools/CDNfinder/
http://www.ipip.net/ip.html
https://myssl.com/CDN_check.html
拿最后一个在线网站做个例子:
输入一个没有CDN的网站www.xxx.com
点击查看详情:
提示无法连接,此网站还能看到对应ip,说明该域名不存在CDN。
再检测www.baidu.com
很明显,是存在CDN的。
方法四:
利用Wappalyzer插件:
该插件能够分析目标网站所采用的平台构架、网站环境、服务器配置环境、JavaScript框架、编程语言等参数等
二、绕过CDN寻找真实ip
为什么需要寻找真实ip,这就是之前CDN的作用:它会根据你那个地区,分配一个对应地区的一个节点,能让你访问的更快,达到一个更快的效果。再有CDN的情况下,你直接ping那个网站,得到的IP,都是没用的。
绕过方法如下:
1. 相同国家的ip地址访问
因为CDN费用不便宜,针对某国国内的用户可能只在国内设置CDN,这时你用国外的ip去访问,可能就能查到它的真实IP。
还有一种可能就是,假设这个网站是美国的,其他国家访问此网站访问的都是CDN的IP,而通过美国ip访问时可能不设置CDN。
2. 子域名查询(机率较大)
如果网站有CDN的话,第一时间就会用全国ping去看,一般国内外都会设置CDN,可能概率比较小,相对来说子域名的话概率就比较大了,因为CDN比较贵,大部分都只会在主站设置CDN,此时可以用子域名查找(要主站跟子域名在同一个服务器上),很大概率会查到真实ip。
子域名工具如下:
subDomainbrute
https://github.com/lijiejie/subDomainsBrute
OneForAll
https://github.com/shmilylty/OneForAll
layer子域名挖掘机
在线子域名:
https://phpinfo.me/domain/
http://tool.chinaz.com/subdomain
http://scan.javasec.cn/
谷歌语法:"site:baidu.com -www"就能查看除www外的子域名。
3. 查询历史记录
查看IP与域名绑定的历史记录,说不定就能找到使用CDN前的记录。
查询CDN历史记录的网站:
https://x.threatbook.cn/
http://www.17ce.com
http://www.ab173.com/dns/dns_world.php
https://dnsdb.io/zh-cn/
http://viewdns.info/
https://who.is/
http://toolbar.netcraft.com/site_report?url=
https://tools.ipip.net/cdn.php
https://securitytrails.com/
https://whoisrequest.com/history/
https://dnsdumpster.com/
http://www.ip138.com/
https://www.virustotal.com/gui/home/url
https://research.domaintools.com/research/hosting-history/
https://community.riskiq.com/
https://ipchaxun.com/
http://www.crimeflare.com/cfssl.html
https://sitereport.netcraft.com/?url
https://github.com/vincentcox/bypass-firewalls-by-DNS-history
4. 空间搜索引擎
利用空间搜索引擎,查询目标网站,查看里面的特有http头或者一些关键字,也是有可能发现目标网站的真实IP。
常用空间搜索引擎:
https://fofa.so/
https://www.shodan.io/
https://www.zoomeye.org/
利用“FOFA网络空间安全搜索引擎”搜索目标网站源代码中的title标签内容即可得到真实IP地址。
查看源码获取title
title="***"
5. 敏感文件(探针或phpinfo.php)
有一些网站可能遗留一些敏感文件,比如phpinfo、探针 还有一些绝对路径
小皮搭建网站时会遗留phpinfo
尤其是国外的网站,会留phpinfo的,探针和phpinfo差不多 探针以p.php
有些程序员在网站搭建完后,有些东西它不删,留下php探针、phpinfo、甚至是phpmyadmin留下来了,phpinfo、php探针都会记录下来服务器真实的IP
常见例子:
p.php php.php phpinfo.php tz.php yahei.php等
谷歌语法:inurl:phpinfo.php intitle:"phpinfo()"
6. 去掉网站域名开头的www
现在大部分CDN厂商只要求把 www.xxx.com的cname到CDN主服务器上去,www.xxx.com和 http://xxx.com 是两条独立的解析记录,一般只会把带有www开头的,比如www.xxx.com 做CDN,根据这样的设置,我们只需要去掉www用超级ping即可发现真实ip。
如:
ping xxx.com
7. 工具
CloudFail是一种战术侦察工具,旨在收集有关受CloudFlare保护的目标的足够信息,希望能够发现服务器的位置。我们可以用Cloudfail工具进行查询;
工具下载地址:
https://github.com/m0rtem/CloudFail
使用方法:
python3 cloudfail.py --target www.xxx.com
python3 cloudfail.py -t www.xxx.com
HatCloud
下载链接
https://github.com/HatBashBR/HatCloud
CloudFlair
https://github.com/christophetd/CloudFlair
通过滥用DNS历史记录绕过防火墙
https://github.com/vincentcox/bypass-firewalls-by-DNS-history
8. 通过邮件获取
通常在订阅邮件、注册账号、找回密码、意见反馈,网站发来验证的邮件,查看邮件源代码,有可能有其真实ip。
此时通过一次性邮箱可以接收,另外在社工钓鱼时也有大用。
利用邮箱注册、邮箱密码找回、邮箱订阅等,通过网站给自己发信息邮件
在线一次性邮箱地址:
第一类:临时邮箱服务
你得到一个随机生成的临时Email地址,这个地址的有效期只有几分钟或者几个小时。
* 10 minute mail(有效期10分钟):http://www.10minutemail.com/
* Guerrilla mail(有效期15分钟):http://www.guerrillamail.com/
第二类: 开放式邮箱服务(推荐)
这一类网站提供的邮箱地址是长期有效的,而且往往允许你挑选任意的用户名。但是,邮箱没有密码保护,任何人都可以查看和使用,而且所有邮件在收到24小时后会自动删除。
* Mailinator:http://www.mailinator.com/
* My Trash Mail:http://www.mytrashmail.com/
第三类:https://anonymousemail.me/ 匿名邮箱可以发邮箱,以后apt要用,钓鱼可以用,在以后项目的时候,往往钓鱼能起到更好的效果。
9. 目标网站漏洞
Web漏洞:通过XSS、代码执行漏洞、SSRF、XXE、文件上传漏洞查找真实IP
信息泄露:Apache status、Jboss status、SVN、Github等敏感信息和网页源代码泄露
10. ddos(以量打量)
11. SSL服务器证书
SSL证书就是遵守SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。
查SSL证书:https://crt.sh/
还有使用Censys引擎:https://censys.io/ipv4
使用搜索语法: 443.https.tls.certificate.parsed.extensions.subject_alt_name.dns_names: www.xxx.com
12. 扫全网
在手工测试之后,还是没有找到真实IP,才使用脚本,物理电脑网卡带宽等配置要求高,不然电脑就死了,建议使用服务器带宽高的。
脚本地址:
https://github.com/boy-hack/w8fuckCDN
https://github.com/Tai7sy/fuckCDN 是一个扫全网的工具,所以带宽要求高,扫描时间特别久
Zmap:
https://github.com/zmap/zmap
Masscan:
https://github.com/robertdavidgraham/masscan
xcdn:
https://github.com/3xp10it/xcdn
13. 真实IP地址获取后绑定指向地址更改本地hosts解析指向文件
本机hosts路径:C:\Windows\System32\drivers\etc
输入你所查到的真实ip,对应解析,看是否能正常访问
14. F5 LTM解码法
当服务器使用F5 LTM做负载均衡时,通过对set-cookie关键字的解码真实ip也可被获取,
F5中的cookies格式如下:
BIGipServer <pool name> = <编码服务器IP>.<编码服务器端口> .0000
从中我们可以得知一下信息:
BIGipServer - 我们现在知道服务器在F5 BigIP设备后面。
<pool name> - F5上配置的池名称。
<编码服务器IP> - 进行编码的服务器的真实IP。
<编码服务器端口> - 进行编码的服务器的真实端口。
例如:Set-Cookie: BIGipServerpool= 2786502848.24095.0000,先把第一段10进制数即2786502848转为十六进制数a616a8c0(如果不够8位,在前面补0),接着分别取两位数,取四次,再倒着排序也就是c0.a8.16.a6,最后依次把他们转为十进制数192.168.67.154,也就是最后的真实ip
15. 社工
利用社工,得到CDN的账号密码,真实ip不就来了(都社工了,只社工真实ip?)
16. 利用老域名
在换新域名时,常常将 CDN 部署到新的域名上,而老域名由于没过期,可能未使用 CDN ,然后就可以直接获取服务器真实 ip
例如 xxx.org - xxx.com
域名更新时,可能老域名同时解析到真实服务器,但是没有部署 CDN
这个可以通过搜集域名备案的邮箱去反查,可能会有意外收获
17. 从App入手
APP是个必不可少的突破口,很多项目网站做的很好,但是APP缺没那么完善,使用burpsuit或者fiddler抓包找真实ip
18. 配置不当
在配置CDN的时候,需要指定域名、端口等信息,有时会因为疏忽,配置不完善导致绕过。
例如:http和https都可以访问,只配置了https协议,这是访问http即可绕过。
19. favicon_hash 匹配
利用http.favicon.hash 语法,来匹配 icon 的 hash 值。
工具地址:
https://github.com/Ridter/get_ip_by_ico/blob/master/get_ip_by_ico.py







