判断是否存在CDN
为何要绕过CDN
许多网站目前均使用了CDN服务,以此来隐藏自身服务器的真实IP,并加速网站静态文件的访问,而且你请求网站服务时,cdn服务会根据你所在的地区,选择合适的线路给予你访问,由此达网站加速的效果,,并提供WAF服务。在我们进行黑盒测试时,往往会成为拦路石,因此我们不得不掌握绕过CDN寻找真实IP的技术。
如何判断是否为真实IP
1.将所获取IP和域名进行hosts绑定,然后使用curl指令,看是否能够获取到网站信息,如果可以,那么大概率为真实IP。
2.使用一些端口判断工具,查看IP端口开放情况,并使用浏览器进行访问,如果提示需要重试,而不是返回403等提示,也有可能为真实IP。
获得真实IP后如何进行下一步
(1)获取源站ip后,进行ip反查,获取旁站继续渗透/跳过cdn对攻击的拦截。
(2)进行hosts绑定,之后用户可以直接访问源站跳过cdn。
判断是否存在CDN
1.ping域名
一般来说,我们直接对一个网站的域名进行ping指令的话,会反映出这个网站所在的IP和ping向的域名,而这个域名便是我们判断CDN是否存在的根据。
2.使用超级ping(多地ping)
因为CDN是根据地区不同去分配不同的IP,那么使用多地ping的时候,会显示其是否存在不同IP,若存在,便证明网站存在CDN,若只有一个IP,那么该IP可能为该网站服务器的真实IP。此时还需要后续进行验证。
多地ping网站:
查找真实IP的方法集合
在我们查找到真实IP后,我们可以进行旁站检测,找其他站点进行突破,也可以直接绑定hosts绕过CDN进行访问,从而绕过WAF针对攻击语句的拦截。
1.查找DNS历史绑定记录
查询网站DNS解析,有可能会存在未绑定CDN之前的记录。
查询网站:
https://dnsdb.io/zh-cn/ ###DNS查询
https://x.threatbook.cn/ ###微步在线
http://viewdns.info/ ###DNS、IP等查询
https://tools.ipip.net/cdn.php ###CDN查询IP
https://sitereport.netcraft.com/?url=域名
下图为对某网站的DNS解析,其结果可能为真实IP,后续进行判断。
2.子域名/顶级域名解析
有的时候因为配置不当或者其他原因,网站的子域名或者顶级域名未配置CDN,此时我们可以通过对其子域名或者顶级域名的解析指向,有可能就会指向目标的同一个IP上,当然,我们也可以使用工具对其子域名进行穷举,然后批量解析。
在线子域名查询网站:
https://securitytrails.com/list/apex_domain ###(因为网站为国外网站,反应时间可能会比较长)
http://tool.chinaz.com/subdomain
找到子域名继续确认子域名没有cdn的情况下批量进行域名解析查询,有cdn的情况继续查询历史。
域名批量解析网站:
http://tools.bugscaner.com/domain2ip.html
3.国外DNS获取真实IP
因为部分CDN只针对国内IP的访问,而并没有限制国外IP,那么当我们使用国外IP访问域名时,便可以获取真实IP。
DNS解析网址(选取部分使用即可):
http://www.ab173.com/dns/dns_world.php ###(为全世界DNS地址)
http://whoisrequest.com/history/
https://completedns.com/dns-history/
https://who.is/domain-history/
http://research.domaintools.com/research/hosting-history/
http://viewdns.info/iphistory/
http://toolbar.netcraft.com/site_report?url=
https://tools.ipip.net/cdn.php
(自己尝试即可,我就不截图了)
4.通过空间测绘搜索ico图标寻找真实IP
我们可以通过url/favicon.ico获取图标,然后在网络测绘(fofa(暂不可用,图标转hash搜索),zoomeye)中查询(ps:我试了几次,目前好像哪怕转成hash值fofa也不能搜索出结果,也不知道什么时候能完全恢复)。
当然,有些网站会将favicon.ico文件进行隐藏,我们可以通过网络加载里面寻找ico图标(F12→网络→favicon.con[有可能是其他名字,自己判断一下]),然后保存下ico图标,并在zoomeye或者其他网络测绘网站中查询。
查询到之后,可以进行后续测试确定是否为真实IP。
5.网络资产测绘中心查找真实IP
常用的网络资产测绘网站有:
每个测绘网站都有其相应的语法,不过大多都是domain:"xxx"这种,直接对其域名进行搜索即可,如果为302,一般来说会是CDN,当然,查询的过程中也可能会找到网站之前废弃的IP,可以试试有没有利用价值。
6.利用SSL证书查询真实IP
这个是和前面网络资产测绘网站结合使用,因为我们使用https协议的时候,证书颁发机构(CA)必须将他们发布的每个SSL/TLS证书发布到公共日志中,SSL/TLS证书通常包含域名、子域名和电子邮件地址。因此SSL/TLS证书可以成为我们信息收集的切入点。
获取网站SSL证书的HASH再结合Censys,利用Censys搜索网站的SSL证书及HASH,在 https://crt.sh 上查找目标网站SSL证书的HASH,再用Censys搜索该HASH即可得到真实IP地址。
转成IPv4搜索
找到IP后验证是否为真实IP(有几张没有打码,因为现在censys好像不支持直接转ipv4搜索,兄弟们可以试一下自己的电脑行不行,当然,也可以将搜索到的hash放在其他资产测绘网站进行搜索)
7.邮箱获取真实IP
网站在发信的时候,会附带真实的IP地址,进入邮箱,选择邮件,查看源文件头部信息,选择from。当然,这个也并非绝对真实,是否真实还需要看邮箱发送是否与网站同一个IP地址。
8.通过网站的敏感文件获取真实IP
文件探针、phpinfo、网站源代码、信息泄露、GitHub信息泄露、js文件。
其中,phpinfo的 server[server_ADDR] 可能为其真实ip
9.F5 LTM解码法(该方法多用于寻找内网IP)
当服务器使用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。
Set-Cookie: BIGipServerpool-cas01=3255675072.20480.0000;
3255675072 转十六进制 c20da8c0 从右向左取 c0a80dc2 转10进制 192 168 13 194
10.APP和微信小程序获取真实IP
这时候我们需要用到burpsuite和模拟器,burp suite进行代理设置后,将其证书放入模拟器的根目录例(如同配置burpsuite手机代理一样,网上方法挺多的直接查找就行)。设置完成后,点开app或者小程序,burp suite进行拦截监控,读取响应包,其中便有app或者小程序的真实IP(虚拟机重载了一次,还没来得及配新环境。就先不进行截图展示了,可以自己下去尝试一下)
11.配置不当导致的真实IP获取
在配置CDN的时候,需要指定域名、端口等信息,因此,有时候可能有一些小小的配置细节出错就容易导致CDN被绕过。
案例1:为了方便用户访问,我们常常将www.test.com 和 test.com 解析到同一个站点,而CDN只配置了 www.test.com ,通过访问 test.com ,就可以绕过 CDN 了。
案例2:站点同时支持http和https访问,CDN只配置 https协议,那么这时访问http就可以轻易绕过。
12.banner获取查找真实IP
获取目标站点的banner,在全网搜索引擎搜索,也可以使用AQUATONE,在Shodan上搜索相同指纹站点。
可以通过互联网络信息中心的IP数据,筛选目标地区IP,遍历Web服务的banner用来对比CDN站的banner,可以确定源IP。
欧洲:
http://ftp.ripe.net/pub/stats/ripencc/delegated-ripencc-latest
北美:
https://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest
亚洲:
https://ftp.apnic.net/public/apnic/stats/apnic/delegated-apnic-latest
非洲:
https://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-latest
拉美:
https://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-extended-latest
获取CN的IP
http://www.ipdeny.com/ipblocks/data/countries/cn.zone
找到目标服务器 IP 段后,可以直接进行暴力匹配 ,使用zmap、masscan 扫描 HTTP banner,然后匹配到目标域名的相同 banner。
推荐两个用得到的工具:
https://github.com/robertdavidgraham/masscan
13.流量攻击
发包机可以一下子发送很大的流量。这个方法是很笨,但是在特定的目标下渗透,建议采用。
cdn除了能隐藏ip,可能还考虑到分配流量, 不设防的cdn量大就会挂,高防cdn 要大流量访问。经受不住大流量冲击的时候可能会显示真实ip。站长->业务不正常->cdn不使用->更换服务器。
14.被动获取
让服务器或网站主动连接我们的服务器,从而获取服务器的真实IP。
例如如果网站有编辑器可以填写远程url图片,即可获取真实IP。
如果存在ssrf漏洞 或者xss让服务器主动连接我们的服务器 均可获取真实IP。
15.扫描全网获取
使用工具对全网IP进行扫描,根据返回数据判断是否为真实IP。(倒也没那么疯狂,可以选择那些相似的,再利用工具对其进行扫描,与域名相匹配,并根据返回的数据去进行判断以及后续的验证)
https://github.com/superfish9/hackcdn
https://github.com/boy-hack/w8fuckcdn
16.长期关注
在长期渗透的时候,设置程序每天访问网站,可能有新的发现。每天零点,或者业务需求增大,它有可能会换ip,换服务器的。
总结
常用的方法基本上就是这些,哪位师傅如果有什么更好的更实用的绕过查找方法,也可以交流一下,互相学习。
本文作者为J1angL1,转载请注明。