@Author: Patrilic
@Time: 2019-10-09 13:12:49

0x00 前言

个人觉得,绕过CDN去寻找主机的真实ip,更容易能寻找到企业网络的薄弱地带,所以Bypass CDN也就变成了至关重要的一点

0x01 常见Bypass方法

子域名搜集

由于成本问题,可能某些厂商并不会将所有的子域名都部署CDN,所以如果我们能尽量的搜集子域名,或许可以找到一些没有部署CDN的子域名,拿到某些服务器的真实ip/段

然后关于子域名搜集的方式很多,就不一一介绍了,我平时主要是从这几个方面搜集子域名:

  1. SSL证书
  2. 爆破
  3. Google Hacking
  4. 同邮箱注册人
  5. DNS 域传送
  6. 页面JS搜集
  7. 网络空间引擎

工具也有很多厉害的,平时我一般使用 OneForALL + ESD + JSfinder 来进行搜集

(ESD可以加载layer的字典,很好用)

查询DNS历史解析记录

常常服务器在解析到CDN服务前,会解析真实ip,如果历史未删除,就可能找到
aa49a0dae035183756bc9b7c574f7d1d
常用网站:
http://viewdns.info/
https://x.threatbook.cn/
http://www.17ce.com/
https://dnsdb.io/zh-cn/
https://securitytrails.com/
http://www.ip138.com/
https://github.com/vincentcox/bypass-firewalls-by-DNS-history

MX记录(邮件探测)

这个很简单,如果目标系统有发件功能,通常在注册用户/找回密码等地方8aa01bd3ebc5fea8c50bfcf182df44d7

SSL证书探测

我们可以利用空间引擎进行SSL证书探测

443.https.tls.certificate.parsed.extensions.subject_alt_name.dns_names:www.baidu.com

cbd4dfce974be17192c5d3991bcb9ceb
443.https.tls.certificate.parsed.extensions.subject_alt_name.dns_names:www.baidu.com

再放一个搜集证书的网站https://crt.sh

一个小脚本,可以快速搜集证书

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# -*- coding: utf-8 -*-
# @Time : 2019-10-08 22:51
# @Author : Patrilic
# @FileName: SSL_subdomain.py
# @Software: PyCharm

import requests
import re

TIME_OUT = 60
def 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("<TD>(.*?).{}</TD>".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时,会显示证书

当然,也可以用censys等引擎
88c410f42542b4d8b7387ca70ca55e68

偏远地区服务器访问

在偏远地区的服务器访问时,可能不会访问到CDN节点,而是直接访问服务器真实ip

所以我们可以搞一个偏远地区的代理池,来访问目标域名,有概率就可以拿到真实ip

也就是平常说的多地Ping
766172367254161b3f5a2d0e44e0174d

favicon_hash匹配

利用shodan的http.favicon.hash语法,来匹配icon的hash值

直接推https://github.com/Ridter/get_ip_by_ico/blob/master/get_ip_by_ico.py

CloudFlare Bypass

免费版的cf,我们可以通过DDOS来消耗对方的流量,只需要把流量打光,就会回滚到原始ip

还有利用cloudflare的改host返回示例:
https://blog.detectify.com/2019/07/31/bypassing-cloudflare-waf-with-the-origin-server-ip-address/
里面给了详细的介绍,我们可以通过HOST来判断是否是真实ip
具体看文章即可

奇特的ping

比如可能有些地方,使用的CDN都是以www.xxx.edu.cn,例如www.cuit.edu.cn,www.jwc.cuit.edu.cn

可能去掉前缀的www,就可能绕过CDN了,猜测应该是类似于Apache VirtualHost

可参考https://httpd.apache.org/docs/2.4/en/vhosts/examples.html

例如:
94f6e57f5f9c038766a278c76f46ce30

我这里其实是ping了www.xxx.gov.cn和xxx.gov.cn

这样就可以绕过CDN的检测

利用老域名

在换新域名时,常常将CDN部署到新的域名上,而老域名由于没过期,可能未使用CDN,然后就可以直接获取服务器真实ip。

例如patrilic.top > patrilic.com
域名更新时,可能老域名同时解析到真实服务器,但是没有部署CDN

这个可以通过搜集域名备案的邮箱去反查,可能会有意外收获

暴力匹配

找到目标服务器IP段后,可以直接进行暴力匹配 ,使用masscan扫描HTTP banner,然后匹配到目标域名的相同banner

DDos/社工CDN平台等

0x02 其他方法

phpinfo

cd01f0e2811d6b9828927bfe6c57f8b3

ssrf,文件上传等漏洞

略..

0x03 参考链接🔗

https://github.com/shmilylty/OneForAll
https://github.com/FeeiCN/ESD
https://github.com/Threezh1/JSFinder
https://github.com/AI0TSec/blog/issues/8
https://www.4hou.com/tools/8251.html
https://www.freebuf.com/sectool/112583.html