资产收集对抗-子域名爆破

  子域名爆破,是发现多资产的一个很好的方法,在子域名爆破中,经常会遇到泛解析问题

  什么是泛解析呢(参考百度百科)?

泛域名解析是:*.域名解析到同一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

posted @ 2022-03-03 14:03  飘渺红尘✨  阅读(2154)  评论(0编辑  收藏  举报