1. 程式人生 > 其它 >資產收集對抗-子域名爆破

資產收集對抗-子域名爆破

  子域名爆破,是發現多資產的一個很好的方法,在子域名爆破中,經常會遇到泛解析問題

  什麼是泛解析呢(參考百度百科)?

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