子域名爆破,是發現多資產的一個很好的方法,在子域名爆破中,經常會遇到泛解析問題
什麼是泛解析呢(參考百度百科)?
泛域名解析是:*.域名解析到同一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