在滲透測試信息中我們可能需要盡可能收集域名來確定資產邊界。
在寫自動化滲透工具的時候苦與沒有好用的子域名爆破工具,于是自己就寫了一個。
Ksubdomain是一個域名爆破/驗證工具,它使用Go編寫,支持在Windows/Linux/Mac上運行,在Mac和Windows上最大發包速度在30w/s,linux上為160w/s的速度。
總的來說,ksubdomain能爆破/驗證域名,并且快和準確。
什么是無狀態
無狀態連接是指無需關心TCP,UDP協議狀態,不占用系統協議棧 資源,忘記syn,ack,fin,timewait ,不進行會話組包。在實現上也有可能需要把必要的信息存放在數據包本身中。如13年曾以44分鐘掃描完全部互聯網zmap,之后出現的massscan, 都使用了這種無狀態技術,掃描速度比以往任何工具都有質的提升,后者更是提出了3分鐘掃完互聯網的極速。
zmap/masscan都是基于tcp協議來掃描端口的(雖然它們也有udp掃描模塊),相比它們,基于無狀態來進行DNS爆破更加容易,我們只需要發送一個udp包,等待DNS服務器的應答即可。
目前大部分開源的域名爆破工具都是基于系統socket發包,不僅會占用系統網絡,讓系統網絡阻塞,且速度始終會有限制。
ksubdomain使用pcap發包和接收數據,會直接將數據包發送至網卡,不經過系統,使速度大大提升。
ksubdomain提供了一個-test
參數,使用它可以測試本地最大發包數,使用ksubdomain -test
在Mac下的運行結果,每秒30w左右
發包的多少還和網絡相關,ksubdomain將網絡參數簡化為了-b
參數,輸入你的網絡下載速度如-b 5m
,ksubdomain就會自動限制發包速度。
狀態表
由于又是udp協議,數據包丟失的情況很多,所以ksubdomain在程序中建立了“狀態表”,用于檢測數據包的狀態,當數據包發送時,會記錄下狀態,當收到了這個數據包的回應時,會從狀態表去除,如果一段時間發現數據包沒有動作,便可以認為這個數據包已經丟失了,于是會進行重發,當重發到達一定次數時,就可以舍棄該數據包了。
上面說ksubdomain是無狀態發包,如何建立確認狀態呢?
根據DNS協議和UDP協議的一些特點,DNS協議中ID字段,UDP協議中SrcPort字段可以攜帶數據,在我們收到返回包時,這些字段的數據不會改變。所以利用這些字段的值來確認這個包是我們需要的,并且找到狀態表中這個包的位置。
通過狀態表基本可以解決漏包,可以讓準確度達到一個滿意的范圍,但與此同時會發送更多的數據包和消耗一些時間來循環判斷。
通過time ./ksubdomain -d baidu.com -b 1m
使用ksubdomain內置的字典跑一遍baidu.com域名,大概10w字典在2分鐘左右跑完,并找到1200多子域名。
Useage
從releases下載二進制文件。
在linux下,還需要安裝libpcap-dev
,在Windows下需要安裝WinPcap
,mac下可以直接使用。
_ __ _____ _ _ _
| |/ / / ____| | | | | (_)
| ' / | (___ _ _| |__ __| | ___ _ __ ___ __ _ _ _ __
| < \___ \| | | | '_ \ / _| |/ _ \| '_ _ \ / _ | | '_ \
| . \ ____) | |_| | |_) | (_| | (_) | | | | | | (_| | | | | |
|_|\_\ |_____/ \__,_|_.__/ \__,_|\___/|_| |_| |_|\__,_|_|_| |_|
Usage of ./ksubdomain:
-b string
寬帶的下行速度,可以5M,5K,5G (default "1M")
-d string
爆破域名
-dl string
從文件中讀取爆破域名
-e int
默認網絡設備ID,默認-1,如果有多個網絡設備會在命令行中選擇 (default -1)
-f string
字典路徑,-d下文件為子域名字典,-verify下文件為需要驗證的域名
-l int
爆破域名層級,默認爆破一級域名 (default 1)
-o string
輸出文件路徑
-s string
resolvers文件路徑,默認使用內置DNS
-silent
使用后屏幕將不會輸出結果
-skip-wild
跳過泛解析的域名
-test
測試本地最大發包數
-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
通過管道爆破
echo "seebug.org"|ksubdomain
通過管道驗證域名
echo "paper.seebug.org"|ksubdomain -verify
管道操作
借助知名的subfinder
,httpx
等工具,可以用管道結合在一起配合工作。
./subfinder -d baidu.com -silent|./ksubdomain -verify -silent|./httpx -title -content-length -status-code
subfinder 通過各種搜索引擎獲取域名
ksubdomain 驗證域名
httpx http請求獲得數據,驗證存活
Knownsec 404 Team星鏈計劃
ksubdomain 是Knownsec 404 Team星鏈計劃中的一員。
“404星鏈計劃”是知道創宇404實驗室于2020年8月開始的計劃,旨在通過開源或者開放的方式,長期維護并推進涉及安全研究各個領域不同環節的工具化,就像星鏈一樣,將立足于不同安全領域、不同安全環節的研究人員鏈接起來。
其中不僅限于突破安全壁壘的大型工具,也會包括涉及到優化日常使用體驗的各種小工具,除了404本身的工具開放以外,也會不斷收集安全研究、滲透測試過程中的痛點,希望能通過“404星鏈計劃”改善安全圈內工具龐雜、水平層次不齊、開源無人維護的多種問題,營造一個更好更開放的安全工具促進與交流的技術氛圍。