一、常见方法
1、域名搜集
理论依据是这样的,某些服务商并不会将所有的子域名都部署 CDN,如果能尽量的搜集子域名,或许可以找到一些没有部署 CDN 的子域名。
常见的主要是从这几个方面搜集子域名:
- SSL 证书
- 爆破
- Google Hacking
- 同邮箱注册人
- DNS 域传送
- 页面 JS 搜集
- 网络空间引擎
2、查询 DNS 历史解析记录
常常服务器在解析到 CDN 服务前,会解析真实 ip,如果历史未删除,就可能找到。
2、邮件探测记录
如果目标系统有发件功能,通常在注册用户/找回密码等地方。
3、SSL 证书探测
可以利用空间引擎进行 SSL 证书探测。
一个小脚本,可以快速搜集证书
# -*- coding: utf-8 -*-# @Time : 2019-10-08 22:51# @Author : Patrilic# @FileName: SSL_subdomain.py# @Software: PyCharmimport requestsimport reTIME_OUT = 60def get_SSL(domain): domains = [] url = 'https://crt.sh/?q=%25.{}'.format(domain) response = requests.get(url,timeout=TIME_OUT) # print(response.text) ssl = re.findall("(.*?).{}".format(domain),response.text) for i in ssl: i += '.' + domain domains.append(i) print(domains)if __name__ == '__main__': get_SSL("baidu.com")
搜集 SSL 证书 Hash,然后遍历 ip 去查询证书 hash,如果匹配到相同的,证明这个 ip 就是那个 域名同根证书的服务器真实 ip,简单来说,就是遍历 0.0.0.0/0:443,通过 ip 连接 https 时,会显示证书。
4、偏远地区服务器访问
在偏远地区的服务器访问时,可能不会访问到 CDN 节点,而是直接访问服务器真实 ip,可以搞一个偏远地区的代理池,来访问目标域名,有概率就可以拿到真实 ip。
5、利用老域名
在换新域名时,常常将 CDN 部署到新的域名上,而老域名由于没过期,可能未使用 CDN,然后就可以直接获取服务器真实 ip。域名更新时,可能老域名同时解析到真实服务器,但是没有部署 CDN,这种情况下可以通过搜集域名备案的邮箱去反查,可能会有意外收获。
6、暴力匹配
找到目标服务器 IP 段后,可以直接进行暴力匹配 ,使用 masscan 扫描 HTTP banner,然后匹配到目标域名的相同 banner。
二、其他方法
特殊方法,当然不限于以下方法,还有更好的方法,只是我还没有发现而已,仅供参考。
1、phpinfo
2、favicon_hash
利用 shodan 的 http.favicon.hash 语法,来匹配 icon 的 hash 值, 直接推出。
3、CloudFlare Bypass
还可以通过 DDOS 来消耗对方的流量,只需要把流量打光,就会回到原始 ip。
4、其他
比如有些地方使用的 CDN 都是以 www.xxx.edu.cn开头,这种情况下有可能去掉前缀的 www,就可能绕过 CDN 了,可参考。