绕过CDN的思路

网上有很多绕过CDN的思路,但是存在很多问题,以下是收集并总结的思路。 站在站长的角度,不可能每个站都会用上CDN。 站在DNS服务商的角度,历史解析记录可能不受CDN服务商控制。 站在CDN服务商的角度,提供CDN服务的区域有限制,CDN流量有限制。

DNS历史解析

https://dnshistory.org/ http://whoisrequest.com/history/ https://completedns.com/dns-history/ http://dnstrails.com/ https://who.is/domain-history/ http://research.domaintools.com/research/hosting-history/ http://site.ip138.com/ http://viewdns.info/iphistory/

通过大量DNS查漏

查询冷门的DNS的解析。或者多地Ping http://ping.chinaz.com/ http://ce.cloud.360.cn/ http://www.webkaka.com/ping.aspx https://asm.ca.com/en/ping.php https://x.threatbook.cn/en

从目标服务器入手

被动获取

让目标服务器主动链接我们的服务器,获取来源IP

  • SSRF
  • 服务器主动发送Mail,获得请求IP
  • RSS内带有的IP

服务器信息

  • 探针文件
  • 服务器日志文件
  • 错误信息

旁站

  • 查找子域名或者父域名对应IP
  • 查非子域名旁站
  • 通过搜索引擎查找公网上的相同站点(开发环境,备份站点等)
  • MX、TXT记录

对比全网banner

获取目标站点的banner,在全网搜索引擎搜索,也可以使用AQUATONE,在Shodan上搜索相同指纹站点。 可以通过互联网络信息中心的IP数据,筛选目标地区IP,遍历Web服务的banner用来对比CDN站的banner,可以确定源IP。

该方法也能用于寻找内网服务器IP与域名的对应关系

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import requests
import bs4
import lxml
from multiprocessing.dummy import Pool
requests.packages.urllib3.disable_warnings()
global c
def demo(ip_host):
# 计数器
global c
headers = {'Host': ip_host[1],
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'}
try:
r=requests.get(ip_host[0],headers=headers,verify=Fasle)
if len(r.text) > 0:
try:
t = bs4.BeautifulSoup(r.text,'lxml').find("title").string
except:
t = "notitle"
print(ip_host[0]," mkdd1211 ",ip_host[1]," mkdd1211 ",len(r.text)," mkdd1211 ",t) # 打印出来放在exel,mkdd1211用来替换成分列符号
except:
pass
c=c-1
if c%1000==0: # 这个1000表示每1000次打印一下当前剩余的请求,便于你知道还有多久跑完,可以根据总请求调整
print(c)

def make_payload(ips,hosts):
payload=[]
for ip in ips:
for host in hosts:
payload.append(("https://"+ip,host))
payload.append(("http://"+ip,host))
return payload

def make_payload_c(ips_c,hosts):
payload=[]
u = []
for i in range(256):
for ip in ips_c:
u.append(ip+"."+str(i))
for ip in u:
for host in hosts:
payload.append(("https://"+ip,host))
payload.append(("http://"+ip,host))
return payload

# ips=["1.1.1.1","2.2.2.2"]
# d=make_payload(ips,hosts) #可以先用ip跑一下,没有收获选择跑C段

ipc = ["1.1.1","2.2.2"]
hosts=["a.huoxian.cn","b.huoxian.cn","c.huoxian.cn"]
d=make_payload_c(ipc,hosts)

c=len(d)
print(len(d))
with Pool(200) as p:
p.map(demo,d)

CDN服务商

  • 入侵CDN服务商
  • 根据CDN解析特性获取源IP(如www.crimeflare.com)
  • 耗尽CDN服务流量,暴露真实IP

F5 LTM

F5 LTM解码法 当服务器使用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。