梳理:Layer子域名挖掘機(jī)實(shí)操指南)
簡(jiǎn)介L(zhǎng)ayer 子域名挖掘機(jī) 4.2 紀(jì)念版以免安裝壓縮包形式發(fā)布適用于網(wǎng)絡(luò)安全工程師、滲透測(cè)試人員及安全愛(ài)好者開(kāi)展子域名資產(chǎn)發(fā)現(xiàn)與攻擊面梳理。該工具采用字典枚舉、DNS 查詢與證書透明度等組合策略可批量探測(cè)目標(biāo)主域名下的隱藏子域名為漏洞評(píng)估、邊界排查和防護(hù)加固提供前期支撐。包體共 5 個(gè)文件整體約 4MB其中 exe 為主程序入口兩個(gè) dll 文件提供加密與網(wǎng)絡(luò)解析功能xml 為可編輯的配置參數(shù)txt 為內(nèi)置字典用戶可直接運(yùn)行或按需替換詞匯。目前已有 713 人學(xué)習(xí)/下載。借助此包可快速搭建子域名挖掘環(huán)境既能了解工具調(diào)用原理又能借助自帶字典開(kāi)展實(shí)際掃描適合用于授權(quán)范圍內(nèi)的安全測(cè)試、CTF 解題或校園網(wǎng)資產(chǎn)梳理等場(chǎng)景。 在授權(quán)范圍內(nèi)的資產(chǎn)梳理和漏洞挖掘任務(wù)里子域名收集永遠(yuǎn)是第一件要做的事情。目標(biāo)資產(chǎn)有多大、對(duì)外暴露了哪些系統(tǒng)、有沒(méi)有被遺忘的測(cè)試環(huán)境很多時(shí)候都藏在主域名下面那些不起眼的子域名記錄里。我最初接觸 Layer 子域名挖掘機(jī)就是在一場(chǎng)授權(quán)測(cè)試的資產(chǎn)盤點(diǎn)階段當(dāng)時(shí)手頭只有一個(gè)主域名和幾個(gè)關(guān)聯(lián)域名用這個(gè)工具跑完一輪直接多出來(lái)幾十個(gè)可訪問(wèn)的Web站點(diǎn)后續(xù)的測(cè)試面一下子清晰了很多。這篇文章就以“Layer子域名挖掘機(jī) 4.2 紀(jì)念版.zip”這個(gè)經(jīng)典的zip包形態(tài)為切入點(diǎn)聊聊這個(gè)工具的歷史定位、子域名挖掘背后的原理、完整實(shí)操流程以及我在使用過(guò)程中踩過(guò)的坑和排查經(jīng)驗(yàn)。內(nèi)容適合三類人看剛?cè)腴T安全評(píng)估、想系統(tǒng)梳理資產(chǎn)的新手需要日常做資產(chǎn)臺(tái)賬管理的藍(lán)隊(duì)同學(xué)以及想把手動(dòng)子域名枚舉流程自動(dòng)化、規(guī)范化的一線工程師。1. 工具定位與版本認(rèn)知1.1 4.2紀(jì)念版到底是什么來(lái)頭Layer 子域名挖掘機(jī)是一款典型的 Windows 圖形化子域名枚舉工具。它做得早更新周期長(zhǎng)網(wǎng)上流傳的版本也很多4.2 屬于流傳比較廣、功能相對(duì)穩(wěn)定的一版?!凹o(jì)念版”這個(gè)后綴在安全工具圈并不少見(jiàn)通常是作者在某個(gè)節(jié)點(diǎn)發(fā)布的最終版本、收藏版本或者只是打包者為了區(qū)分而加的標(biāo)識(shí)。不管命名動(dòng)機(jī)如何一個(gè)不爭(zhēng)的事實(shí)是即便今天有大量開(kāi)源命令行工具很多人拿到這個(gè) zip 包解壓后仍然能用得很順手。這個(gè)工具核心解決的需求很簡(jiǎn)單你給它一個(gè)主域名它通過(guò)字典爆破、DNS解析驗(yàn)證、多個(gè)公開(kāi)接口聚合等方式把目標(biāo)域名下存活的子域名列表找出來(lái)。對(duì)于信息收集階段來(lái)說(shuō)子域名越多意味著攻擊面越廣也意味著資產(chǎn)清單越完整。Layer 的價(jià)值就在于把這些原本需要手動(dòng)敲命令、拼接口的操作封裝成了一個(gè)勾選框式的圖形界面。1.2 zip綠色版為什么能活這么久工具以 zip 壓縮包形式分發(fā)而不是像商業(yè)軟件那樣做安裝程序這背后其實(shí)是很務(wù)實(shí)的選擇。安裝包會(huì)往系統(tǒng)目錄寫文件、改注冊(cè)表還經(jīng)常捆綁各種附加組件而 zip 綠色版解壓即用不污染系統(tǒng)也方便在多臺(tái)機(jī)器之間拷貝。尤其在企業(yè)內(nèi)部做資產(chǎn)排查時(shí)U盤里放一個(gè)解壓好的工具目錄換機(jī)器就能直接跑非常省事。我做安全評(píng)估時(shí)也一直保留著這種“零安裝”的習(xí)慣。除了 Layer 之外像 Python 官方提供的嵌入式運(yùn)行時(shí)壓縮包比如 python-3.8.9-embed-amd64.zip、nvm-windows 的 zip 安裝包、PowerShell 7 的便攜版都是同樣的設(shè)計(jì)思路。它們解決的是同一個(gè)痛點(diǎn)運(yùn)行環(huán)境不應(yīng)該成為使用工具的阻礙。zip 包天然適合工具分發(fā)解壓到指定目錄、配置一下路徑就可以工作出了環(huán)境問(wèn)題直接刪除重來(lái)不留后患。1.3 子域名收集在整體安全評(píng)估中的位置很多人會(huì)把子域名挖掘簡(jiǎn)單理解成“爆破子域名的工具”但實(shí)際上它是整個(gè)信息收集鏈條的起點(diǎn)。一次完整的評(píng)估流程通常是確定主域名 - 收集子域名 - 解析IP - 端口掃描 - 識(shí)別服務(wù) - 尋找漏洞。其中子域名收集決定了后面這些環(huán)節(jié)能畫多大的范圍圖。舉個(gè)實(shí)際案例我遇到過(guò)某個(gè)目標(biāo)的官網(wǎng)只有幾個(gè)頁(yè)面看起來(lái)沒(méi)什么可測(cè)的但用 Layer 跑了一圈發(fā)現(xiàn)了 dev、test、api、jenkins 等一批子域名其中測(cè)試環(huán)境還在用默認(rèn)口令。如果跳過(guò)子域名枚舉這個(gè)風(fēng)險(xiǎn)點(diǎn)可能根本不會(huì)被發(fā)現(xiàn)。這就是子域名收集的價(jià)值它不是掃描器而是給掃描器劃定工作范圍的導(dǎo)航圖。2. 子域名挖掘的核心原理2.1 一個(gè)子域名解析背后的DNS機(jī)制要理解子域名挖掘必須先理解 DNS 的解析過(guò)程。當(dāng)你在瀏覽器輸入blog.example.com時(shí)系統(tǒng)會(huì)先向配置的 DNS 服務(wù)器發(fā)起查詢?cè)儐?wèn)這個(gè)主機(jī)名對(duì)應(yīng)的 IP 地址。整個(gè) DNS 系統(tǒng)中子域名的存在主要體現(xiàn)在各類解析記錄里最常見(jiàn)的是 A 記錄IPv4地址、AAAA 記錄IPv6地址、CNAME 記錄別名指向另一個(gè)域名、NS 記錄子域名的權(quán)威DNS服務(wù)器等。子域名挖掘本質(zhì)上做的事情就是大量構(gòu)造可能存在的名稱然后看這些名稱能不能通過(guò) DNS 查詢得到有效響應(yīng)。如果unknown-name.example.com返回 NXDOMAIN域名不存在說(shuō)明這個(gè)子域名大概率不存在如果返回一個(gè)真實(shí) IP 或 CNAME則說(shuō)明它是存活的。這個(gè)原理聽(tīng)起來(lái)很簡(jiǎn)單但實(shí)際工程化的時(shí)候要考慮的因素不少比如查詢速度、超時(shí)設(shè)置、泛解析干擾、結(jié)果去重等。2.2 枚舉邏輯字典爆破與被動(dòng)收集Layer 這類工具通常采用“主動(dòng)爆破 被動(dòng)收集”的組合策略。主動(dòng)爆破是拿著預(yù)置字典里的每一個(gè)詞條逐個(gè)拼接為完整域名去發(fā)起 DNS 查詢。舉個(gè)例子字典里有admin、mail、vpn這些詞工具就會(huì)查詢admin.example.com、mail.example.com、vpn.example.com等記錄是否存在。被動(dòng)收集則是通過(guò)第三方數(shù)據(jù)源來(lái)獲取目標(biāo)域名的子域名記錄。SSL 證書透明度日志Certificate Transparency Log是一個(gè)非常有效的數(shù)據(jù)源因?yàn)楹芏嘟M織在申請(qǐng)證書時(shí)會(huì)把所有子域名列在證書的 SAN 字段里。搜索引擎緩存、DNS 數(shù)據(jù)集、歷史解析記錄等也是常見(jiàn)的數(shù)據(jù)來(lái)源。主動(dòng)爆破依賴字典覆蓋度被動(dòng)收集依賴數(shù)據(jù)源覆蓋度兩者結(jié)合往往能取得比單一方式好得多的效果。2.3 字典質(zhì)量決定結(jié)果上限在多次實(shí)測(cè)之后我越來(lái)越認(rèn)同一個(gè)觀點(diǎn)子域名挖掘的最終效果60% 取決于字典質(zhì)量30% 取決于數(shù)據(jù)源數(shù)量只有 10% 取決于工具本身。Layer 自帶的基礎(chǔ)字典對(duì)于常規(guī)目標(biāo)夠用但遇到一些命名風(fēng)格特殊的企業(yè)效果就比較一般了。比如一家做物流的公司子域名可能是sz001.example.com這樣的城市縮寫加編號(hào)一家做游戲的公司子域名可能是按項(xiàng)目代號(hào)命名的project-a.example.com。這時(shí)候就需要針對(duì)目標(biāo)行業(yè)、公司歷史、產(chǎn)品線去定制字典。我的習(xí)慣是把默認(rèn)字典里的高頻詞保留再結(jié)合目標(biāo)公司官網(wǎng)的導(dǎo)航、招聘信息里的項(xiàng)目名、歷史新聞里的產(chǎn)品名來(lái)擴(kuò)充實(shí)測(cè)效果提升非常明顯。這個(gè)道理不復(fù)雜但很多人會(huì)忽略總以為換一個(gè)更“智能”的挖掘工具就能解決問(wèn)題其實(shí)工具只是執(zhí)行者字典才是決策者。3. 完整實(shí)操?gòu)慕鈮旱浇Y(jié)果落地3.1 環(huán)境準(zhǔn)備與解壓注意事項(xiàng)拿到的Layer子域名挖掘機(jī)4.2紀(jì)念版.zip首先需要正確解壓。這里有幾個(gè)容易被忽略的細(xì)節(jié)解壓路徑不要帶中文和空格建議放在D:\Tools\Layer這類純凈目錄下避免某些組件因?yàn)槁窂骄幋a問(wèn)題加載失敗。工具是圖形界面程序需要 Windows 環(huán)境。如果手里只有 Kali 或其他 Linux 系統(tǒng)可以嘗試用 wine 運(yùn)行但兼容性不一定好更推薦的做法是在 Linux 上用命令行工具完成同樣的事情。解壓時(shí)如果提示壓縮包損壞先不要急著刪文件。之前有朋友遇到過(guò)解壓到一半報(bào)could not find eocd這個(gè)錯(cuò)誤通常表示 zip 文件的末尾目錄記錄缺失基本可以判定是下載不完整。解決辦法是檢查文件大小是否和發(fā)布頁(yè)一致或者換渠道重新下載。360、Windows Defender 等殺毒軟件對(duì)這類工具經(jīng)常報(bào)毒這是正常現(xiàn)象。建議在確認(rèn)文件哈??尚诺那疤嵯掳压ぞ吣夸浖尤氚酌麊?。我之前在 Kali 下也遇到過(guò)類似從 zip 部署工具的問(wèn)題解壓后還有權(quán)限不夠的情況記得用chmod x給可執(zhí)行文件加執(zhí)行權(quán)限。Windows 下的綠色工具雖然沒(méi)有這個(gè)煩惱但如果你的系統(tǒng)開(kāi)啟了受控文件夾訪問(wèn)也要記得放行。3.2 目標(biāo)配置與掃描參數(shù)調(diào)優(yōu)解壓后運(yùn)行主程序界面并不復(fù)雜。在目標(biāo)域名輸入框里填主域名即可注意不要帶http://或https://前綴只要域名本身。例如填example.com不需要引號(hào)。參數(shù)方面我建議這樣設(shè)置線程數(shù)普通目標(biāo)設(shè)置為 20 到 50 即可不要一上來(lái)就拉滿幾百線程。線程過(guò)高容易導(dǎo)致 DNS 查詢超時(shí)增多誤報(bào)率也會(huì)上升而且部分目標(biāo)可能對(duì)高頻查詢有限制很容易把自己的 IP 封掉。超時(shí)時(shí)間默認(rèn)值一般夠用如果網(wǎng)絡(luò)環(huán)境比較差可以適當(dāng)調(diào)高但不要調(diào)到 10 秒以上否則整體掃描時(shí)間會(huì)變得不可接受。延遲如果目標(biāo)有防護(hù)建議開(kāi)啟延遲和隨機(jī)延遲模擬更自然的手動(dòng)查詢節(jié)奏。字典選擇上優(yōu)先使用“常用字典 自定義字典”的組合。Layer 支持加載外部字典我通常會(huì)把高頻率姓氏拼音、城市縮寫、業(yè)務(wù)關(guān)鍵詞單獨(dú)整理成一個(gè)文件作為主字典的補(bǔ)充。接口選項(xiàng)方面建議把能勾選的公開(kāi)接口都勾上雖然會(huì)影響速度但被動(dòng)收集數(shù)據(jù)的覆蓋面通常比主動(dòng)爆破更廣。3.3 結(jié)果去重、驗(yàn)證與導(dǎo)出掃描完成后工具會(huì)列出發(fā)現(xiàn)的所有子域名。這里必須做一步驗(yàn)證工作并不是所有列出的條目都是真實(shí)可用的。第一步是去重。多個(gè)數(shù)據(jù)源可能返回同一條記錄列表里可能包含重復(fù)項(xiàng)合并去重后再進(jìn)入下一步。第二步是實(shí)時(shí)驗(yàn)證。Layer 的結(jié)果基于掃描當(dāng)刻的 DNS 狀態(tài)但 CDN 切換、記錄刪除都會(huì)導(dǎo)致結(jié)果失效尤其是 CNAME 記錄掃描時(shí)存在、幾天后可能就變成了殘留的懸空記錄。第三步是端口級(jí)驗(yàn)證子域名存在不代表服務(wù)可用建議用腳本批量請(qǐng)求 80 和 443 端口篩選出真正可訪問(wèn)的 Web 資產(chǎn)。結(jié)果導(dǎo)出時(shí)我一般同時(shí)導(dǎo)出 txt 和 csv 兩個(gè)格式。txt 格式方便直接循環(huán)處理csv 格式方便在表格里維護(hù)資產(chǎn)臺(tái)賬。后續(xù)處理我會(huì)配合 httpx、nuclei 這類工具做存活探測(cè)和漏洞掃描三層銜接起來(lái)整體效率會(huì)高很多。4. 常見(jiàn)問(wèn)題與排查技巧4.1 解壓報(bào)錯(cuò)與啟動(dòng)失敗處理這個(gè)工具在分發(fā)和運(yùn)行過(guò)程中最常見(jiàn)的就是解壓和啟動(dòng)問(wèn)題。我把幾種典型情況整理成了一個(gè)速查表問(wèn)題現(xiàn)象原因分析處理方法解壓報(bào)could not find eocdzip 中央目錄缺失文件下載不完整檢查文件大小重新下載解壓報(bào)failed to copy spatial iop zip磁盤空間不足或殺毒軟件攔截寫入清理空間、暫時(shí)退出殺軟再解壓運(yùn)行提示缺少 DLL 或組件系統(tǒng)缺少 .NET Framework 或 VC 運(yùn)行庫(kù)安裝對(duì)應(yīng)運(yùn)行庫(kù)后重試雙擊無(wú)反應(yīng)殺毒軟件攔截或目錄權(quán)限異常加入白名單用管理員權(quán)限運(yùn)行360 彈窗報(bào)毒工具被殺軟誤報(bào)校驗(yàn)哈??尚藕蠹尤胄湃螀^(qū)之前有同事解壓報(bào)failed to copy spatial iop zip我當(dāng)時(shí)第一反應(yīng)是磁盤空間滿了后來(lái)發(fā)現(xiàn)其實(shí)是企業(yè)版安全軟件在后臺(tái)實(shí)時(shí)掃描把文件復(fù)制過(guò)程拖垮了。這種問(wèn)題排查思路其實(shí)一樣先確認(rèn)文件是否完整再排除殺軟干擾最后檢查磁盤和權(quán)限。還有一個(gè)小技巧命令行驗(yàn)證壓縮包完整性可以用unzip -t file.zipLinux/Windows子系統(tǒng)下或者 Windows 自帶右鍵“全部解壓”如果提示某個(gè)文件 CRC 校驗(yàn)失敗說(shuō)明這個(gè)壓縮包在傳輸過(guò)程中已經(jīng)損壞最好重新獲取而不是強(qiáng)行解壓。4.2 掃描結(jié)果異常誤報(bào)、漏報(bào)與封IP掃描結(jié)果出現(xiàn)大量無(wú)效地址最常見(jiàn)的原因是目標(biāo)域名配置了泛解析。泛解析是指 DNS 服務(wù)器對(duì)所有不存在的子域名也返回一個(gè)指定的 IP不少 CDN 和云廠商默認(rèn)就是這樣。如果不做處理爆破出來(lái)的記錄會(huì)“看起來(lái)全是活的”感覺(jué)收獲很大實(shí)際全是無(wú)效數(shù)據(jù)。判斷方法也很簡(jiǎn)單隨便輸一個(gè)不存在的名稱比如this-name-definitely-not-exists.example.com如果它也能解析出 IP說(shuō)明目標(biāo)存在泛解析。這種情況下我會(huì)把泛解析返回的 IP 加入過(guò)濾列表然后重新對(duì)掃描結(jié)果做一輪清洗。漏報(bào)問(wèn)題則多半出在字典和線程配置上。字典太小、覆蓋詞不夠自然找不到深層子域名線程數(shù)設(shè)置過(guò)大導(dǎo)致查詢超時(shí)也可能漏掉一些響應(yīng)較慢的記錄。如果發(fā)現(xiàn)結(jié)果明顯偏少不要急著怪工具先想想是不是字典和配置的問(wèn)題。關(guān)于封 IP我遇到過(guò)不止一次。目標(biāo)防護(hù)策略比較嚴(yán)格時(shí)高頻 DNS 查詢很快會(huì)觸發(fā)攔截。解決思路是在 Layer 里適當(dāng)調(diào)低線程、增加延遲或者避開(kāi)業(yè)務(wù)高峰時(shí)段再跑。一次掃描不是唯一途徑也可以分散成多個(gè)時(shí)段分批執(zhí)行。4.3 關(guān)于zip加密與偽“無(wú)視密碼”安全類工具以 zip 包分發(fā)時(shí)附帶密碼是很普遍的做法一方面是為了防止文件在傳輸環(huán)節(jié)被篡改另一方面也是作者對(duì)分發(fā)范圍的一種控制。很多用戶習(xí)慣在搜索引擎里搜“zip密碼移除”“zip壓縮包密碼破解工具”“無(wú)視密碼直接解壓”這類關(guān)鍵詞但這里我要潑一盆冷水正規(guī)加密 zip 在密碼強(qiáng)度足夠的情況下暴力破解的成本是很高的所謂“無(wú)視密碼直接解壓”基本都是標(biāo)題黨。如果在解壓 Layer zip 時(shí)提示需要密碼先確認(rèn)來(lái)源渠道有沒(méi)有標(biāo)注密碼常見(jiàn)的是作者博客、發(fā)布說(shuō)明或者注釋文件里給出解壓密碼。我見(jiàn)過(guò)有人把壓縮包注釋里的密碼漏看了白白折騰了半小時(shí)。如果確實(shí)沒(méi)有密碼我的建議是換一個(gè)有授權(quán)來(lái)源的渠道獲取工具而不是花大量精力和加密算法較勁。工具拿到手之后也建議順手做一次校驗(yàn)確保 zip 包沒(méi)有被二次打包或植入過(guò)額外文件。5. 聯(lián)動(dòng)擴(kuò)展與個(gè)人經(jīng)驗(yàn)5.1 從結(jié)果到戰(zhàn)果批量存活探測(cè)與接管檢測(cè)Layer 輸出了子域名列表這只是信息收集的起點(diǎn)。我更推薦把結(jié)果接入命令行工具鏈做自動(dòng)化處理。以 Linux 環(huán)境為例先用 Layer 導(dǎo)出subs.txt然后用 httpx 做批量 HTTP 存活探測(cè)命令大致如下httpx -l subs.txt -title -status-code -tech-detect -o alive.txtalive.txt里就是真正可以訪問(wèn)的 Web 資產(chǎn)接著可以交給端口掃描工具或漏洞掃描器去做更深入的檢測(cè)。整個(gè)流程下來(lái)從子域名列表到可用的目標(biāo)清單只需要幾分鐘。接管檢測(cè)是一個(gè)經(jīng)常被忽略但價(jià)值很高的步驟。簡(jiǎn)單來(lái)說(shuō)如果一條子域名記錄是指向某個(gè)第三方服務(wù)的 CNAME比如sub.example.com CNAME old-bucket.s3.amazonaws.com而這個(gè)第三方資源已經(jīng)被釋放或不再被任何人使用那么攻擊者就可能通過(guò)重新注冊(cè)這個(gè)資源來(lái)“接管”子域名。檢測(cè)方法并不復(fù)雜拿到 CNAME 目標(biāo)后手動(dòng)嘗試解析目標(biāo)域名如果返回 NXDOMAIN就存在接管的可能性。這類問(wèn)題在子域名掃描結(jié)果里出現(xiàn)的頻率比想象中高。5.2 一套適合日常摸排的組合思路我現(xiàn)在的常規(guī)做法是Layer 負(fù)責(zé)快速摸底命令行工具鏈負(fù)責(zé)精確驗(yàn)證最后把結(jié)果匯總到資產(chǎn)清單里。Layer 的優(yōu)勢(shì)在于圖形界面交互直觀適合做一次性、臨時(shí)性的資產(chǎn)排查如果要做周期性監(jiān)測(cè)我建議配合定時(shí)任務(wù)調(diào)度命令行工具這樣既能覆蓋 Layer 的功能又能實(shí)現(xiàn)無(wú)人值守。每次跑完掃描我都會(huì)把結(jié)果歸檔到按月份命名的目錄里方便回溯對(duì)比。等下一次再掃同一目標(biāo)時(shí)直接 diff 前后兩次的子域名列表新增的記錄往往就是最值得關(guān)注的變化點(diǎn)。有一次我就是在例行巡檢的 diff 中發(fā)現(xiàn)了一個(gè)剛上線的測(cè)試站點(diǎn)這個(gè)站點(diǎn)沒(méi)有加入任何正式資產(chǎn)臺(tái)賬但實(shí)際已經(jīng)暴露在公網(wǎng)上了。最后分享一個(gè)小技巧Layer 這類工具跑出的子域名不要直接當(dāng)成最終結(jié)論DNS 層面“存在”和 IP 層面“可達(dá)”、業(yè)務(wù)層面“重要”是三個(gè)完全不同的概念。把掃描結(jié)果做一次解析 - 端口 - HTTP指紋的三層驗(yàn)證你手里的資產(chǎn)地圖才是真正能指導(dǎo)后續(xù)工作的版本。這也是我使用 Layer 幾年以來(lái)最深的一個(gè)體會(huì)工具負(fù)責(zé)幫你找到線索但真正體現(xiàn)專業(yè)度的永遠(yuǎn)是接下來(lái)怎么驗(yàn)證、怎么分析、怎么把線索變成判斷。本文還有配套的精品資源點(diǎn)擊獲取