DNS端口
TCP 53: 用于DNS服务器之间同步信息
UDP 53: 用于向DNS服务器发送查询请求
DNS隧道
基于C/S架构
基于DNS、UDP建立连接
通过TXT记录编码传输数据
原理
客户端/服务端通过程序自身实现基于UDP协议的持久稳定连接
将原始流量编码后放入DNS协议数据中进行发送,对端接收到DNS数据后将编码部分提取出来进行解密并处理原始流量
适用场景
防火墙开放UDP53端口
可以向公网DNS服务器发送查询请求
环境限制
需要搭建二级域名服务器且可以操控
dns2tcp
/etc/dns2tcpd.conf >> 配置文件
resource
ssh
http
https
socket
-F 前端执行,查看日志信息
-d debug等级
-f 指定加载配置文件
-k 指定密钥,通过密钥确定身份
-c 压索数据流量
-l 本地监听端口
-r 指定远程协议,匹配服务端的resource
-z 指定域名
通过dns2tcp连接进行隧道嵌套
dns2tcp实验
0x0 实验环境
linux:1.1.1.101 ---> 1.1.1.1 << firewall >> 192.168.1.100 --> 2003: 192.168.1.101 --> kali: 192.168.1.102
linux: DNS >> 192.168.1.101,dns2tcp客户端
firewall: 仅开放UDP53端口
2003: 一级域名服务器 lab.com,委派二级域名 test.lab.com >> 192.168.1.102,配置转发器
kali: 二级域名服务器,dns2tcp服务端
服务端
/etc/dns2tcpd.conf
listen = 192.168.1.102
port = 53
user = nobody
chroot = /tmp
domain = test.lab.com
resources = ssh:127.0.0.1:22 , smtp:127.0.0.1:25
key = domaintest
dns2tcpd -F -d 1 -k domaintest -f /etc/dns2tcpd.conf
service ssh start
客户端
dns2tcpc -c -d 1 -k domaintest -l 2000 -r ssh -z test.lab.com
ssh root@127.0.0.1 -p 2000 >> 成功访问服务端shell
ssh -fgNC -D 7000 root@127.0.0.1 -p 2000 >> 建立ssh动态端口转发
IE配置socket代理,可访问外网资源
0x1 实验环境
linux:1.1.1.101 ---> 2003:1.1.1.102 --> 1.1.1.1 << firewall >> 192.168.1.100 --> 2003: 192.168.1.101 --> kali: 192.168.1.102
linux: DNS >> 192.168.1.101,dns2tcp客户端
2003: DNS服务器 >> 指向1.1.1.102
firewall: 开放1.1.1.102 >> 192.168.1.101 53端口 UDP
2003: 一级域名服务器 lab.com,委派二级域名 test.lab.com >> 192.168.1.102,配置转发器
kali: 二级域名服务器,dns2tcp服务端
linux --> 内部2003 --> 外部2003 --> kali 操作跟上一个实验一样,只不过查询过程不同
客户端启动dns2tcpc后不会建立连接,当第一次请求时建立连接
访问127.0.0.1:2000时,dns2tcp收到流量对流量进行编码处理,然后将编码后的数据通过1.1.1.105:N端口发送到192.168.1.125:53,
192.168.1.125:53接收到数据后,由dns2tcp程序进行解密,然后根据配置文件中的host:port进行转发,建立连接时已经协商了转发源