在滲透測試信息中我們可能需要盡可能收集域名來(lái)確定資產(chǎn)邊界。
在寫(xiě)自動(dòng)化滲透工具的時(shí)候苦與沒(méi)有好用的子域名爆破工具,于是自己就寫(xiě)了一個(gè)。
Ksubdomain是一個(gè)域名爆破/驗證工具,它使用Go編寫(xiě),支持在Windows/Linux/Mac上運行,在Mac和Windows上最大發(fā)包速度在30w/s,linux上為160w/s的速度。
總的來(lái)說(shuō),ksubdomain能爆破/驗證域名,并且快和準確。
什么是無(wú)狀態(tài)
無(wú)狀態(tài)連接是指無(wú)需關(guān)心TCP,UDP協(xié)議狀態(tài),不占用系統協(xié)議棧 資源,忘記syn,ack,fin,timewait ,不進(jìn)行會(huì )話(huà)組包。在實(shí)現上也有可能需要把必要的信息存放在數據包本身中。如13年曾以44分鐘掃描完全部互聯(lián)網(wǎng)zmap,之后出現的massscan, 都使用了這種無(wú)狀態(tài)技術(shù),掃描速度比以往任何工具都有質(zhì)的提升,后者更是提出了3分鐘掃完互聯(lián)網(wǎng)的極速。
zmap/masscan都是基于tcp協(xié)議來(lái)掃描端口的(雖然它們也有udp掃描模塊),相比它們,基于無(wú)狀態(tài)來(lái)進(jìn)行DNS爆破更加容易,我們只需要發(fā)送一個(gè)udp包,等待DNS服務(wù)器的應答即可。
目前大部分開(kāi)源的域名爆破工具都是基于系統socket發(fā)包,不僅會(huì )占用系統網(wǎng)絡(luò ),讓系統網(wǎng)絡(luò )阻塞,且速度始終會(huì )有限制。
ksubdomain使用pcap發(fā)包和接收數據,會(huì )直接將數據包發(fā)送至網(wǎng)卡,不經(jīng)過(guò)系統,使速度大大提升。
ksubdomain提供了一個(gè)-test
參數,使用它可以測試本地最大發(fā)包數,使用ksubdomain -test
在Mac下的運行結果,每秒30w左右

發(fā)包的多少還和網(wǎng)絡(luò )相關(guān),ksubdomain將網(wǎng)絡(luò )參數簡(jiǎn)化為了-b
參數,輸入你的網(wǎng)絡(luò )下載速度如-b 5m
,ksubdomain就會(huì )自動(dòng)限制發(fā)包速度。
狀態(tài)表
由于又是udp協(xié)議,數據包丟失的情況很多,所以ksubdomain在程序中建立了“狀態(tài)表”,用于檢測數據包的狀態(tài),當數據包發(fā)送時(shí),會(huì )記錄下?tīng)顟B(tài),當收到了這個(gè)數據包的回應時(shí),會(huì )從狀態(tài)表去除,如果一段時(shí)間發(fā)現數據包沒(méi)有動(dòng)作,便可以認為這個(gè)數據包已經(jīng)丟失了,于是會(huì )進(jìn)行重發(fā),當重發(fā)到達一定次數時(shí),就可以舍棄該數據包了。
上面說(shuō)ksubdomain是無(wú)狀態(tài)發(fā)包,如何建立確認狀態(tài)呢?
根據DNS協(xié)議和UDP協(xié)議的一些特點(diǎn),DNS協(xié)議中ID字段,UDP協(xié)議中SrcPort字段可以攜帶數據,在我們收到返回包時(shí),這些字段的數據不會(huì )改變。所以利用這些字段的值來(lái)確認這個(gè)包是我們需要的,并且找到狀態(tài)表中這個(gè)包的位置。
通過(guò)狀態(tài)表基本可以解決漏包,可以讓準確度達到一個(gè)滿(mǎn)意的范圍,但與此同時(shí)會(huì )發(fā)送更多的數據包和消耗一些時(shí)間來(lái)循環(huán)判斷。
通過(guò)time ./ksubdomain -d baidu.com -b 1m
使用ksubdomain內置的字典跑一遍baidu.com域名,大概10w字典在2分鐘左右跑完,并找到1200多子域名。

Useage
從releases下載二進(jìn)制文件。
在linux下,還需要安裝libpcap-dev
,在Windows下需要安裝WinPcap
,mac下可以直接使用。
_ __ _____ _ _ _
| |/ / / ____| | | | | (_)
| ' / | (___ _ _| |__ __| | ___ _ __ ___ __ _ _ _ __
| < \___ \| | | | '_ \ / _| |/ _ \| '_ _ \ / _ | | '_ \
| . \ ____) | |_| | |_) | (_| | (_) | | | | | | (_| | | | | |
|_|\_\ |_____/ \__,_|_.__/ \__,_|\___/|_| |_| |_|\__,_|_|_| |_|
Usage of ./ksubdomain:
-b string
寬帶的下行速度,可以5M,5K,5G (default "1M")
-d string
爆破域名
-dl string
從文件中讀取爆破域名
-e int
默認網(wǎng)絡(luò )設備ID,默認-1,如果有多個(gè)網(wǎng)絡(luò )設備會(huì )在命令行中選擇 (default -1)
-f string
字典路徑,-d下文件為子域名字典,-verify下文件為需要驗證的域名
-l int
爆破域名層級,默認爆破一級域名 (default 1)
-o string
輸出文件路徑
-s string
resolvers文件路徑,默認使用內置DNS
-silent
使用后屏幕將不會(huì )輸出結果
-skip-wild
跳過(guò)泛解析的域名
-test
測試本地最大發(fā)包數
-ttl
導出格式中包含TTL選項
-verify
驗證模式
一些常用命令
使用內置字典爆破
ksubdomain -d seebug.org
使用字典爆破域名
ksubdomain -d seebug.org -f subdomains.dict
字典里都是域名,可使用驗證模式
ksubdomain -f dns.txt -verify
爆破三級域名
ksubdomain -d seebug.org -l 2
通過(guò)管道爆破
echo "seebug.org"|ksubdomain
通過(guò)管道驗證域名
echo "paper.seebug.org"|ksubdomain -verify
管道操作
借助知名的subfinder
,httpx
等工具,可以用管道結合在一起配合工作。
./subfinder -d baidu.com -silent|./ksubdomain -verify -silent|./httpx -title -content-length -status-code
subfinder 通過(guò)各種搜索引擎獲取域名
ksubdomain 驗證域名
httpx http請求獲得數據,驗證存活

Knownsec 404 Team星鏈計劃
ksubdomain 是Knownsec 404 Team星鏈計劃中的一員。
“404星鏈計劃”是知道創(chuàng )宇404實(shí)驗室于2020年8月開(kāi)始的計劃,旨在通過(guò)開(kāi)源或者開(kāi)放的方式,長(cháng)期維護并推進(jìn)涉及安全研究各個(gè)領(lǐng)域不同環(huán)節的工具化,就像星鏈一樣,將立足于不同安全領(lǐng)域、不同安全環(huán)節的研究人員鏈接起來(lái)。
其中不僅限于突破安全壁壘的大型工具,也會(huì )包括涉及到優(yōu)化日常使用體驗的各種小工具,除了404本身的工具開(kāi)放以外,也會(huì )不斷收集安全研究、滲透測試過(guò)程中的痛點(diǎn),希望能通過(guò)“404星鏈計劃”改善安全圈內工具龐雜、水平層次不齊、開(kāi)源無(wú)人維護的多種問(wèn)題,營(yíng)造一個(gè)更好更開(kāi)放的安全工具促進(jìn)與交流的技術(shù)氛圍。