绕过CDN找到源站的思路
绕过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。
- 亚洲:ftp://ftp.apnic.net/public/apnic/stats/apnic/delegated-apnic-latest
- 欧洲:http://ftp.ripe.net/pub/stats/ripencc/delegated-ripencc-latest
- 北美:https://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest
- 非洲:ftp://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-latest
- 拉美:ftp://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-extended-latest
该方法也能用于寻找内网服务器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
56import 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。