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