面试题提及到过
常见CDN服务商
一、国内 CDN 服务商
- 阿里云 CDN
- 百度云 CDN
- 七牛云 CDN
- 又拍云 CDN
- 腾讯云 CDN
- Ucloud
- 360 CDN
- 网宿科技
- ChinaCache
-
二、国外 CDN 服务商
CloudFlare
- StackPath
- Fastly
- Akamai
- CloudFront
- Edgecast
- CDNetworks
- Google Cloud CDN
- CacheFly
- Keycdn
- Udomain
-
判断网站是否使用了CDN技术
超级ping
HTTP响应头是否含有CDN服务标识
- ip反查域名,结果中含有大量不相关的域名
- IP是否在CDN服务商的服务器IP段上
- nslookup查询域名,看是否返回多个应答IP
若是asp/asp.net站点返回头的server不是IIS而是Nginx,多半使用了nginx反向代理到CDN
Bypass CDN技术
1.通过查询DNS记录/IP历史记录/子域名 等数据记录
很多时候,一些重要的站点会做CDN,而一些子域名站点并没有加入CDN,而且跟主站在同一个C段内,这时候,就可以通过查找子域名来查找网站的真实IP
查询域名的历史解析记录,可能会找到网站使用CDN前的解析记录,从而获取真实ip
DNS解析记录中重点关注TXT记录和SPF记录,是否有泄露真实IP
查询平台
- https://securitytrails.com/
- https://completedns.com/
- https://whoisrequest.com/
- https://www.whoxy.com/
- https://x.threatbook.cn/
- https://netcraft.com/
- https://viewdns.info/
- https://reverse-ip.whoisxmlapi.com/
- https://dnsdb.io/
- https://ruo.me/sub
- https://censys.io/
- https://fofa.so/
- https://www.shodan.io/
- https://www.zoomeye.org/
- https://dnsdumpster.com/
- https://phonebook.cz/
- https://hunter.qianxin.com/
- https://quake.360.cn/quake/#/index
- https://crt.sh/
- https://whois.domaintools.com/ [fq]
- https://intelx.io/
- https://dnscheck.app/
-
工具
ksubdomain(爆破)
- oneforall(国内API)
- subfinder(国外API)
- Layer 子域名挖掘机(爆破)
- Xray(高级版,也是API搜集)
2.通过Email邮局
一般大型网站自己部署架设的邮件服务器如果向外部用户发送邮件的话,如果中间未经任何数据处理和防护措施,那么邮件头部的源码中会包含此邮件服务器的真实 IP 地址。常见的邮件触发点有:
- RSS 订阅
- 邮箱注册、激活处
- 邮箱找回密码处
- 产品更新的邮件推送
- 某业务执行后发送的邮件通知
- 员工邮箱、邮件管理平台等入口处的忘记密码
通过发送邮件给一个不存在的邮箱地址,比如 000xxx@domain.com ,因为该用户不存在,所以发送将失败,并且还会收到一个包含发送该电子邮件给你的服务器的真实 IP 通知。 生产上多关注这些点,一个不成功继续测试下一个邮件触发点,很多大型网站的邮件服务器不止一台,并不是所有都做了防护处理,细节决定成败。
3.通过ssl证书
- 证书颁发机构 (CA) 必须将他们发布的每个 SSL/TLS 证书发布到公共日志中,SSL/TLS 证书通常包含域名、子域名和电子邮件地址。因此可以利用 SSL/TLS 证书来发现目标站点的真实 IP 地址。
- CDN 运营商在给服务器提供保护的同时,也会与其服务器进行加密通信(ssl),这时当服务器的 443 端口接入域名时也会在 443 端口暴露其证书,我们通过证书比对便可发现网站的真实 IP 地址。
4.扫描全网/现用的就是网络空间安全搜索引擎
- 通过Zmap、masscan等工具对整个互联网发起扫描,针对扫描结果进行关键字查找,获取网站真实IP
- 安全搜索引擎是已经扫描完全网了,通过关键字(比如http标头,网站返回内容,SSL证书指纹,特殊JS指纹,FID,ico的HASH值,网页源码的Hash)或网站域名,就可以找出被收录的IP,很多时候获取到的就是网站的真实IP
5.通过海外 DNS 查询
大部分 CDN 厂商因为各种原因只做了国内的线路,而针对国外的线路可能几乎没有,此时我们使用国外的DNS查询,很可能获取到真实IP
nslookup target.com <海外 DNS 地址>
nslookup baidu.com 8.8.8.8
https://www.host-tracker.com/ic?u=&t=Waterfall
6.网站漏洞
- 服务器日志文件
- 探针文件,例如 phpinfo
- 网站备份压缩文件
- .DS_Store
- .hg
- .git
- SVN
- Web.xml
- 如果目标网站本身存在漏洞的话,比如 SSRF、XXE、XSS、文件上传、命令执行等漏洞,或者我们找到的其他突破口,注入我们自己的带外服务器地址,然后在服务器上检查 HTTP 日志记录。
- 应用本身的错误会造成当传递一些错误的参数值或者错误的地址时,内部会抛出异常,也就是日常所说的报错,关注报错点,经常会泄露一些真实的 IP 地址或者内网 IP 段。
7.历史域名
- 很多网站在发展的过程中,会更换域名,比如京东以前的域名是 360buy.com ,后来斥巨资购买了 jd.com 。
- 网站在更换新域名时,如果将 CDN 部署到新的域名上,而之前的域名由于没过期,可能未使用 CDN,因此可以直接获得服务器 IP,所以,历史域名也是一个很重要的点
8.APP客户端
如果网站存在 APP ,可以通过抓包分析其 APP 的数据流量,看是否能找到网站真实 IP 地址,记得关注 APP 的历史版本,里面会有很多 surprise 。
9.通过 F5 LTM 解码
LTM 是将所有的应用请求分配到多个节点服务器上。提高业务的处理能力,也就是负载均衡。
- 当服务器使用 F5 LTM 做负载均衡时,通过对 set-cookie 关键字的解码,可以获取服务器真实 ip 地址。
例如:
Set-Cookie: BIGipServerpool_9.29_5229=605532106.22012.0000
- 先把第一小节的十进制数,即 605532106 取出来
- 将其转为十六进制数 2417afca
- 接着从后至前,取四个字节出来: CA AF 17 24
- 最后依次转为十进制数 202.175.23.36,即是服务器的真实 ip 地址。
10.Host碰撞
当我们收集了目标足够多的可能的真实 IP 时,可以通过 IP 和子域的碰撞,来批量获得命中目标以及目标哪些的子域
12.社会工程学
网站配置不当
在配置CDN的时候,需要指定域名、端口等信息,有时候小小的配置细节就容易导致CDN防护被绕过。
案例1:为了方便用户访问,我们常常将www.test.com 和 test.com 解析到同一个站点,而CDN只配置了www.test.com,通过访问test.com,就可以绕过 CDN 了。
案例2:站点同时支持http和https访问,CDN只配置 https协议,那么这时访问http就可以轻易绕过。
找到IP后如何绑定
- 通过修改 hosts 文件,将域名和 IP 绑定。(要是不会,不建议阅读此文。)
- 如使用 burpsuite 测试,可以在 Project options ——> Connections ——> Hostname Resolution 中增加域名和 IP 记录。