子域名爆破,是发现多资产的一个很好的方法,在子域名爆破中,经常会遇到泛解析问题
什么是泛解析呢(参考百度百科)?
泛域名解析是:*.域名解析到同一IP。
域名解析是:子域名.域名解析到同一IP。
这为我们去做子域名爆破,带来了极大的不便,以前子域名爆破常用的是layer子域名挖掘机. 不过layer子域名挖掘机,在跑具有泛解析的站的时候,就不是那么适用
最近做漏洞挖掘的时候,发现跑的很多资产都是无效资产,解决这个问题,对信息收集很有帮助
前几天朋友给我发了一个他自己写的子域名爆破工具,用了下,感觉不错,这里简单解读下:
这里以淘宝和百度为例子:ping 一个绝对随机不可能存在的域名,他解析了,那么说明他大概率使用了泛解析
结论:说明淘宝可能存在泛解析问题
以百度为例子:
结论:说明百度可能不存在泛解析问题
针对百度,我们可以直接使用layer子域名挖掘机等子域名爆破工具,而针对淘宝的资产,我们不能使用layer子域名挖掘机等常规工具
那么我们需要做第一步,识别泛解析:
这边的思路如下:
这里使用到的python3库:aiodns,他很强大,aiodns支持的查询类型: A, AAAA, ANY, CAA, CNAME, MX, NAPTR, NS, PTR, SOA, SRV, TXT.
五次完全A记录解析成功,认为存在泛解析,如果不存在泛解析问题,就常规子域名收集一把梭,如果检测出泛解析,就使用破泛解析的子域名爆破工具
破泛解析实现思路:
刚刚演示了泛解析判断是否存在,仍然以资产淘宝为例子:
测试Demo:
import asyncio import aiodns import sys loop = asyncio.get_event_loop() resolver = aiodns.DNSResolver(loop=loop) async def query(name, query_type): return await resolver.query(name, query_type) try: coro = query(str(sys.argv[1]), 'CNAME') result = loop.run_until_complete(coro) print(result) except Exception as e: print(e)
CNAME查询几个不存在的淘宝域名,也是一样的思路,循环多次不存在的域名,如果访问不存在的域名,CNAME为shop.taobao.com
那么在子域名爆破的时候可以先判断CNAME,这里可以自己维护的特定厂商的CNAME列表
代码实现:
先查询CNAME记录,如果包含shop.taobao.com就跳过
同理方法3:A记录查询命中次数:
如果A记录查询,命中相同ip>10,后续的爆破A记录解析的域名就不展示记录
通过这种思路,域名泛解析的问题已经可以解决了
域名深度问题:replace提取上一次的域名前缀,加入到下一次fuzz+上一次的域名前缀
题外话: 判断是否是真实业务?
当域名很多的时候,探测域名是否是真实业务,显得很重要,现在很多网站上门户跳转了,点击任意子域名都会走sso/portal,防止仍然存在泛解析问题:
思路如下:
效果如下:
参考:
(1)常用域名记录参考:https://blog.51cto.com/hashlinux/1663860
(2)处理泛解析子域名爆破工具参考:https://github.com/ldbfpiaoran/subdns