绕过⽹站CDN查⽹站真实ip⽅法⼤全(持续更新中)Content Delivery Network,中⽂全称为内容分发⽹络,简称为 CDN 。
使⽤ CDN 技术可以有效的提⾼⽹站的访问速度和安全性,因此⽬前互联⽹上,超过 50%的 Alexa 前 1000 ⽹站和超过 35%的 Alexa 前
10000 的⽹站都部署在 CDN ⽹络后⾯,所有请求⽹站内容的⽤户都将从最近的 CDN 代理服务器获取其缓存版本,因此内容加载速度更快,⽹站的性能得到改善。
具体 CDN 的相关原理⽹上都有阐述,有兴趣的读者可以去⾃⾏了解,本篇指南旨在攻击,追求简洁、⾼效、实⽤,就不再多赘述⼀些概念性相关的东西。
0x01 常见 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
CDN77
0x02 判断⽹站是否使⽤了CDN
反查域名 IP,看结果是否有⼤量不相关的域名存在
观察请求响应的返回数据的头部,是否有 CDN 服务商标识
使⽤超级 ping,通过不同定位地点的 ping 测试,看返回的 IP 是否不同
判断 IP 是否在常见 CDN 服务商的服务器 IP 段上
若 asp 或者 asp ⽹站返回头的 server 不是 IIS、⽽是 Nginx,则多半使⽤了nginx反向代理到 CDN
利⽤ Nslookup 查询域名,看是否返回多个应答 IP
0x03 如何绕过 CDN 朔源⽹站真实 IP
⼀、通过查询 DNS 记录 / IP 历史记录 / ⼦域名等数据记录
很多⽹站只给关键的域名或者主域名做了 CDN,其下很多⼦域名没有使⽤ CDN 服务,所以我们可以通过查询⽬标⽹站的根域名、⼆级域名、三级域名甚⾄多级⼦域名来获得真实IP。不过有时候查出来的并不是真实 IP,可能仅仅做了 A 记录,这种情况下可以继续扫描同 C 段的 IP 和端⼝,然后逐个探测是否为⽬标⽹站。
在⽹站使⽤ CDN 服务之前,解析的是真实IP,所以可以查询 DNS 历史记录,看是否能探测到使⽤ CDN 之前的 IP 。
DNS 解析记录中重点关注 TXT 记录和 SPF 记录,是否有泄露真实IP。
1、在线查询平台
SecurityTrails(前⾝为 DNS Trails)拥有⼤约3.5万亿DNS记录,3亿whois记录,8亿SSL证书记录以及超过4.5亿⼦域的记录数据。⾃2008年以来,⽹站每天都收集和更新海量数据。
SecurityTrails 是我最常⽤的平台之⼀,免费、精准,数据量极其庞⼤,⾜够⽀撑⽇常。
DNS 记录:
⼦域名:
Complete DNS 拥有超过 22 亿个DNS变更记录,提供API,⽀持同时进⾏多域名/IP查询。
WhoISrequest 这个⽹站⾃2002年以来⼀直在跟踪和记录DNS历史变更,数据底蕴很⾜。
这种时间线设计的UI风格很不戳,点赞。
Whoxy 拥有爬取超过 3.65亿个⼦域数据,该⽹站 API 调⽤⾮常⽅便,以 XML 和 JSON 格式返回数据。
网站源码在线Threatbook 微步在线针对 IP、域名进⾏综合查询威胁情报、历史记录、⼦域名解析、DNS解析等等信息,⽀持 API 查询,⾮常⽅便。
Netcraft 不⽤多说了吧,很多⼈都知道,不过仁者见仁智者见智吧,经过时代的变迁,Netcraft 也不是曾经的那个少年了,这⾥只是提⼀下,仅供参考。Viewdns 可以说是⾮常的简洁直观了,就算你不懂任何英⽂,我相信你也看的懂,⾄少你知道在哪⾥输⼊对吧。响应速度也是⾮常快了,⾸页⼀⽬了然,集成了超多的查询功能。
你需要的功能查询就好,⽤⽹站提供的 API 也可以
Whoisxmlapi 数据库包含了超过1.4亿多个域名⽣态数据,⽤来反查 IP 和 DNS 数据,在绕过 CDN 时候做反向对⽐⾮常有⽤。⽹站和 whoxy ⼀样,也是以 XML 和 JSON 格式返回数据,⽀持⾃定义。
Dnsdb 功能⾮常强⼤,⽼平台了,也是我常⽤平台之⼀。
搜索前可以先简单学习⼀下搜索语法:
觉得难?不想学?那也没关系,站长已经考虑到你这种懒⼈情况了,⾸页就有给懒⼈准备的搜索构造器,⼗分友好:
在线⼦域名查询,⽀持实时模式和后台模式,不阻塞前端线程,不占CPU,⼩测试的时候⾮常⽅便。
2、IOT 物联⽹络空间测绘搜索引擎
Censys 可帮助安全从业⼈员发现可从Internet访问的设备,包括 IP 地址、开放端⼝、物理定位、域名信息、托管服务商、SSL 证书等等数据,从中发现需要的信息追踪到⽹站真实的 IP 地址。
FOFA 可以迅速进⾏⽹站资产匹配,加快后续⼯作进程,如漏洞影响范围分析,应⽤分布统计,应⽤流⾏度排名统计等。FOFA ⾮常友好,即使免费,也可以查询⾜够多的数据量,只要你不是商⽤或者⼤需求⽤户,是不需要开会员的。
Shodan 被称为互联⽹上最强⼤的搜索引擎,主要是⽤来搜索⽹络空间中在线设备的,可以通过 Shodan 搜索指定的设备,或者搜索特定类型的设备,它可以帮助安全研究⼈员到有关他们所研究⽬标的有⽤信息。
语法特别强⼤,建议搜索前好好浏览⼀下筛选器⽂档,可以达到事半功倍的效果。
4.Zoomeye
Zoomeye,钟馗之眼,知道创宇打造的宇宙级⽹络空间搜索引擎,Shodan 侧重于主机设备,Zoomeye 则偏向于 Web 发现。
3、⼯具和脚本
1.SubDomainsBrute
SubDomainsBrute 是通过纯 DNS 爆破来寻⼦域名,为了最⼤提升脚本效率,采⽤协程+多进程的⽅式进⾏爆破。Python 3.5 以上需要安装 aiodns 库进⾏异步查询,python 2 需要安装 dnspython 库和 gevent 协程库。
之前是不⽀持扫描泛解析域名的,10⽉份作者更新已经⽀持泛解析,使⽤ -w 参数。
如图,我们针对⼀个泛解析的域名进⾏爆破,subDomainsBrute 会提⽰ any-sub 错误,之后使⽤ -w 参数开启泛解析强制爆破:
2.ESD
相⽐于的暴⼒收集⼿段,ESD 在很多⽅⾯有独特的想法。
基于RSC(响应相似度对⽐)技术对泛解析域名进⾏枚举。
基于aioHTTP获取⼀个不存在⼦域名的响应内容,并将其和字典⼦域名响应进⾏相似度⽐对,超过阈值则说明是同个页⾯,否则为可⽤⼦域名,并对最终⼦域名再次进⾏响应相似度对⽐。
基于AsyncIO异步协程技术对域名进⾏枚举。
基于AsyncIO+aioDNS将⽐传统多进程/多线程/gevent模式快50%以上。
解决各家DNS服务商对于⽹络线路出⼝判定不⼀致问题。
解决各家DNS服务商缓存时间不⼀致问题。
解决随机DNS问题。
根据⽹络情况⾃动剔除⽆效DNS,提⾼枚举成功率。
ESD 通过使⽤⽂本相似度,判断阈值的⽅法来过滤泛解析,这种⽅法现在看来很笨重,我们可以⾃⼰修改脚本,否则因此会导致机器的内存、CPU都负荷,对机器性能要求⽐较⾼,且不⽀持 python2。
python3 环境下通过 pip 直接安装:
$ pip install esd
基本⽤法(项⽬官⽅给出):
esd -d qq
# debug模式扫描单个域名
esd=debug esd -d qq
# 扫描多个域名(英⽂逗号分隔)
esd --domain qq,tencent
# 扫描单个域名且过滤⼦域名中单个特定响应内容
esd --domain mogujie --filter 搜本店
# 扫描单个域名且过滤⼦域名中多个特定响应内容
esd --domain mogujie --filter 搜本店,收藏店铺
# 扫描⽂件(⽂件中每⾏⼀个域名)
esd --
# 跳过相似度对⽐(开启这个选项会把所有泛解析的域名都过滤掉)
esd --domain qq --skip-rsc
# 使⽤搜索引擎进⾏⼦域名搜索(⽀持baidu、google、bing、yahoo,使⽤英⽂逗号分隔)
esd --domain qq --engines baidu,google,bing,yahoo
# 平均分割字典,加快爆破
esd --domain qq --split 1/4
# 使⽤DNS域传送漏洞获取⼦域名
esd --domain qq --dns-transfer
# 使⽤HTTPS证书透明度获取⼦域名
esd --domain qq --ca-info
但是实际上我们从源码出发,发现很多功能作者⽬前并未实现:
parser = OptionParser('Usage: python ESD.py -d feei -F response_filter -e baidu,google,bing,yahoo -p user:pass@host:port')
parser.add_option('-d', '--domain', dest='domains', help='The domains that you want to enumerate')
parser.add_option('-f', '--file', dest='input', help='Import domains from this file')
parser.add_option('-F', '--filter', dest='filter', help='Response filter')
parser.add_option('-s', '--skip-rsc', dest='skiprsc', help='Skip response similary compare', action='store_true', default=False)
parser.add_option('-S', '--split', dest='split', help='Split the dict into several parts', default='1/1')
parser.add_option('-p', '--proxy', dest='proxy', help='Use socks5 proxy to access Google and Yahoo')
parser.add_option('-m', '--multi-resolve', dest='multiresolve', help='Use TXT, AAAA, MX, SOA record to find subdomains', action='store_true', default=False)
parser.add_option('--skey', '--shodan-key', dest='shodankey', help='Define the api of shodan')
parser.add_option('--fkey', '--fofa-key', dest='fofakey', help='Define the key of fofa')
parser.add_option('--femail', '--fofa-email', dest='fofaemail', help='The email of your fofa account')
parser.add_option('--zusername', '--zoomeye-username', dest='zoomeyeusername', help='The usern
ame of your zoomeye account')
parser.add_option('--zpassword', '--zoomeye-password', dest='zoomeyepassword', help='The password of your zoomeye account')
parser.add_option('--cuid', '--censys-uid', dest='censysuid', help="The uid of your censys account")
parser.add_option('--csecret', '--censys-secret', dest='censyssecret', help='The secret of your censys account')
(options, args) = parser.parse_args()
不难发现通过 HTTPS 证书透明度、域传送漏洞等功能均未实现。
ESD ⽬前仅⽀持 Linux 系统,这是其源码决定的,不过我们可以 DIY 让它⽀持 windows
可以看到,engine.py 引擎脚本中,写死了⽬录是/tmp/esd,如果要在 windows 上使⽤,我们只需要替换这⾥为 windows 的输出⽬录即可。
# write output
tmp_dir = 'C:\\temp\\'
if not os.path.isdir(tmp_dir):
os.mkdir(tmp_dir, 0o777)
output_path_with_time = '{td}/.{domain}_{time}.esd'.format(td=tmp_dir, domain=self.domain, time=w().strftime("%Y-%m_%d_%H-%M"))
output_path = '{td}/.{domain}.esd'.format(td=tmp_dir, domain=self.domain)
if len(self.data):
max_domain_len = max(map(len, self.data)) + 2
else:
max_domain_len = 2
output_format = '%-{0}s%-s\n'.format(max_domain_len)
with open(output_path_with_time, 'w') as opt, open(output_path, 'w') as op:
for domain, ips in self.data.items():
# The format is consistent with other scanners to ensure that they are
# invoked at the same time without increasing the cost of
# resolution
if ips is None or len(ips) == 0:
ips_split = ''
else:
ips_split = ','.join(ips)
con = output_format % (domain, ips_split)
op.write(con)
opt.write(con)
3.Layer ⼦域名挖掘机
Seay 法师的作品,很早就有了,⾮常强⼤的⼀款 windows 上的 GUI 图形化⼯具,经历了数个版本的迭代,官⽅最新版是5.0,当然还有不计其数的⽹友⾃定义修改版本在野流传。
4.Xray
xray 是⼀款强⼤的安全评估⼯具,⼀款⾃动化扫描器,我们可以⽤其⾃带的 subdomain ⼦域名发掘功能来针对性探测:
subdomain 功能⽀持暴⼒破解模式和⾮暴⼒模式,可以只探测 web 服务或者只探测 ip 可解析的⼦域,另外⽀持 webhook 数据传递,作为插件端或者分发消息的接收端来使⽤都⾮常⽅便快捷。
5.Bypass-firewalls-by-DNS-history
Bypass-firewalls-by-DNS-history 是⼀款集成全⾃动化的探测⼯具,通过探测 DNS 历史记录,搜索旧的 DNS A Record,收集⼦域,并检查服务器是否对该域名进⾏答复。另外它还基于源服务器和防⽕墙在HTML响应中的相似性阈值来判断。
⽤法:
bash bypass-firewalls-by-DNS-history.sh -d example
-d --domain: domain to bypass
-o --outputfile: output file with IP's
-l --listsubdomains: list with subdomains for extra coverage
-a --checkall: Check all subdomains for a WAF bypass
此外,类似的还有subfinder、dnsprobe等等⼯具,有兴趣的读者可以⾃⾏去研究了解其⼯作原理和机制。
⼆、通过 Email 邮局
⼀般⼤型⽹站⾃⼰部署架设的邮件服务器如果向外部⽤户发送邮件的话,如果中间未经任何数据处理和防护措施,那么邮件头部的源码中会包含此邮件服务器的真实 IP 地址。常见的邮件触发点有:
RSS 订阅
邮箱注册、激活处
邮箱回密码处
产品更新的邮件推送
某业务执⾏后发送的邮件通知
员⼯邮箱、邮件管理平台等⼊⼝处的忘记密码
另外这⾥还有⼀个奇淫技巧,通过发送邮件给⼀个不存在的邮箱地址,⽐如,因为该⽤户不存在,所以发送将失败,并且还会收到⼀个包含发送该电⼦邮件给你的服务器的真实 IP 通知。
⽣产上多关注这些点,⼀个不成功继续测试下⼀个邮件触发点,很多⼤型⽹站的邮件服务器不⽌⼀台,并不是所有都做了防护处理,细节决定成败。三、通过 SSL 证书
证书颁发机构 (CA) 必须将他们发布的每个 SSL/TLS 证书发布到公共⽇志中,SSL/TLS 证书通常包含域名、⼦域名和电⼦邮件地址。因此可以利⽤SSL/TLS 证书来发现⽬标站点的真实 IP 地址。
CDN 运营商在给服务器提供保护的同时,也会与其服务器进⾏加密通信(ssl),这时当服务器的 443 端⼝接⼊域名时也会在 443 端⼝暴露其证书,我们通过证书⽐对便可发现⽹站的真实 IP 地址。
Censys 搜索引擎能够扫描整个互联⽹,每天都会扫描 IPv4 地址空间,以搜索所有联⽹设备并收集相关的信息,可以利⽤ Censys 进⾏全⽹⽅⾯的SSL 证书搜索,到匹配的真实 IP 。
可以看到,当我们针对⼀个互联⽹ IP 地址进⾏搜索时,是有匹配到证书 sha1 签名的
同理,我们根据域名指纹搜索 SSL 证书指纹,然后再反查 IP 就可以了。
⾸先针对⽬标域名,选择Certificates证书搜索,结果出来⼀堆有效的证书和⽆效的证书:
测试过程中,很容易陷⼊思维误区,认为有效的证书才是我们需要的,但其实并不⼀定,很多服务器配置错误依然保留的是⽆效的证书,就⽐如例⼦中,在结果特别多的情况下,我⼜使⽤ Censys 的语法搜索,来精准定位有效 SSL 证书,减少结果:
parsed.names: xxx and tags.raw: trusted
瞬间减少到了 2 个结果,我们逐个点开,然后 sha1 签名反查 IPV4 主机:
不过很遗憾,两条记录全都没查到:
这也从侧⾯说明了,不是所有的⽹站只有其有效证书会匹配其 IP 服务器。
于是只能回到最开始,从所有的结果⾥⾯依次打开往下反查指纹,最终定位到了真实 IP :
安全不仅是个技术活,也是个细⼼活。
2.使⽤命令⾏
通过openssl和curl等常见的基础命令,也同样可以达到反查 SSL 证书的效果。
openssl:
openssl s_client -connect 123.123.123.123:443 | grep subject
curl:
curl -v 123.123.123.123 | grep 'subject'
3.使⽤⼯具和脚本
通过⾃⼰写⼯具脚本,集成前⾯的1、2两点,完全可以做到⼀个简易版的 SSL 全⽹证书爬取,也可以利⽤现有的⼀些脚本⼯具和⽹站,省的我们
⾃⼰费⼒了。
脚本兼容 python2.7 和 3.5,需要配置 Censys API,不过只针对⽬标⽹站是否使⽤ CloudFlare 服务进⾏探测。
将 CloudFlair 克隆到本地并把 API ID 和 Secret 导⼊环境变量:
$ git clone github/christophetd/CloudFlair
$ export CENSYS_API_ID="xxx"
$ export CENSYS_API_SECRET="xxx"
通过 安装依赖:
$ pip install -
运⾏ cloudflair.py :
$ python cloudflair.py --censys-api-id xxx  --censys-api-secret xxx baidu
[*] The target appears to be behind CloudFlare.
[*] Looking for certificates matching "myvulnerable.site" using Censys
[*] 75 certificates matching "myvulnerable.site" found.
[*] Looking for IPv4 hosts presenting
[*] 10 IPv4 hosts presenting a certificate issued to "myvulnerable.site" were found.
- 51.194.77.1
- 223.172.21.75
- 18.136.111.24
- 127.200.220.231
- 177.67.208.72
- 137.67.239.174
- 182.102.141.194
- 8.154.231.164
-
37.184.84.44
- 78.25.205.83
[*] Retrieving target homepage at myvulnerable.site
[*] Testing candidate origin servers
- 51.194.77.1
- 223.172.21.75
- 18.136.111.24
responded with an unexpected HTTP status code 404
- 127.200.220.231
timed out after 3 seconds
- 177.67.208.72
-
137.67.239.174
- 182.102.141.194
- 8.154.231.164
- 37.184.84.44
- 78.25.205.83
[*] Found 2 likely origin servers of myvulnerable.site!
- 177.67.208.72 (HTML content identical to myvulnerable.site)
- 182.102.141.194 (HTML content identical to myvulnerable.site)
其实完全可以通过 Censys 提供的 API ⾃⼰集成⼀款简洁实⽤的全⾃动化探测脚本,如果后⾯我有时间写好了,会同步更新到这⾥的。
4.证书收集
附上查询的 python ⼩脚本:
import requests
import re
TIME_OUT = 60
def get_SSL(domain):
domains = []
url = 'crt.sh/?q=%25.{}'.format(domain)
response = (url,timeout=TIME_OUT)
ssl = re.findall("<TD>(.*?).{}</TD>".format(domain),)
for i in ssl:
i += '.' + domain
domains.append(i)
print(domains)
if __name__ == '__main__':
get_SSL("baidu")
获得所有包含证书的⼦域:
四、通过海外 DNS 查询
针对国内市场⽤户,⼤部分的 CDN 服务商并没有做海外市场的 CDN ,所以可以通过寻⼩众、冷门的海外 DNS 查询,看是否能获得真实 IP 。$ nslookup target <;海外 DNS 地址>
五、通过敏感⽂件泄露
包括但不限于:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。