看了下303(大壮老哥的文章:https://t.zsxq.com/N3BeI6Q),就尝试测了下这个洞
假设厂商是huoxian.cn
一、收集厂商ip
火线、fofa、socket都可以
以下是简单的通过socket获取ip的示意代码
def getipsocket0(domain):
ip = []
try:
s = socket.getaddrinfo(domain, 80)
for i in s:
ip.append(i[4][0])
except:
pass
return ip
二、整理获取的ip
并且统计C段内保护的ip数量,多个ip在一个C端,超过一定阈值时,就猜测整个C端很可能都是厂商的
1.1.1 50
2.2.2 40
3.3.3 18
假设最后收集到如下高可能性的C段:
1.1.1
2.2.2
3.3.3
三、收集尽可能多的子域名资产
例如去火线上收集,或者自己爆破dns获取一些
例如我收集到以下资产:
a.huoxian.cn
b.huoxian.cn
...
zzz-123.huoxian.cn
尤其关注其中直接解析得到内网地址的(应该没错吧):
192.168*
172.16-31*
10.*
例如
a.huoxian.cn 10.10.0.123
b.huoxian.cn 172.16.33.22
四、写一个简单的hosts碰撞脚本
不会代码的可以参考我写的脚本思路,请在授权访问内合法测试,也不负责任何售后维护
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)
五、原始ip特征获取
这边可以先访问下ip段内所有的ip,记录下长度和标题或者状态码等
例如
[http://1.1.1.1](http://1.1.1.1) 长度:1234 标题:nothing
[http://1.1.1.9](http://1.1.1.9) 长度:250 标题:wrong
..
[http://1.1.1.233](http://1.1.1.233) 长度15
六、结果分析
ip和域名塞进去进行跑就完事儿,然后得到一大堆结果,继续分析
a.huoxian.cn [http://1.1.1.1](http://1.1.1.1) 长度:1234 标题:nothing
b.huoxian.cn [http://1.1.1.1](http://1.1.1.1) 长度:1234 标题:nothing
b.huoxian.cn [http://1.1.1.9](http://1.1.1.9) 长度:23540 标题:火线内部运维系统
b.huoxian.cn [http://1.1.1.9](http://1.1.1.9) 长度:250 标题:wrong
...
仔细看发现有一条,我原先直接访问ip只得到一个错误返回长度:250 标题:wrong,当我强行把b.huoxian.cn解析到1.1.1.9时,我发现居然返回了23540长度,标题也变成火线内部运维系统
b.huoxian.cn [http://1.1.1.9](http://1.1.1.9) 长度:23540 标题:火线内部运维系统
七、编辑本地hosts文件
1.1.1.9 b.huoxian.cn
八、浏览器再访问b.huoxian.cn

9、继续利用这个方法,我找到了该厂商150个可以从公网直接访问的内网域名,简单看了下各种未授权、信息泄露,理论上深入看的话rce应该不难(理论大师)
加油
本文迁移自知识星球“火线Zone”