Bu sefer sana Cap makinesini anlatacağım, HTB Starting Point serisinden. Easy etiketli ama içinde "neden böyle" diye sorulması gereken üç güzel ders var: IDOR neden hâlâ klasik, FTP neden hâlâ tehlikeli ve Linux capabilities yanlış yapılandırılınca nasıl SUID'ten beter olur. Hadi baştan gidelim.
Keşif: Nmap'le Kapı Yoklamak
Bir yere sızacaksan önce neyin açık olduğuna bakman lazım, binaya girmeden önce kapıları yoklamak gibi:
$ nmap -Pn -sV -sC -T4 --top-ports 1000 10.129.61.255
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 8.2p1
80/tcp open http Gunicorn (Security Dashboard)
Üç açık kapı: FTP, SSH ve bir web sitesi. Hangisinden başlamak mantıklı? SSH'a direkt şifre denemek kör bir tahmindir, işe yaramaz. FTP ilginç ama önce web'e bakalım, çünkü web uygulamaları genelde en zayıf halka. Oradan başladım.
Web Sitesi: Masum Görünüyor
Siteyi açınca şık bir "Security Dashboard" karşıladı: ağ trafiğini izleyen, IP gösteren, netstat çıktısı sunan bir panel. Yani makine kendi ağını izliyor.
Sol menüde "Security Snapshot" diye bir link gördüm. Tıklayınca URL şu oldu:
/data/1
Sayfada bir ağ capture'ı, birkaç paket bilgisi, sağ üstte bir Download butonu. Burada bir şey takıldı kafama: URL'de 1 yazıyor. Bu 1 nereden geliyor? Uygulama bana özel bir ID mi verdi, yoksa sırayla mı gidiyor?
IDOR: "Ya 0 Yazarsam?"
Şöyle düşün: kütüphaneye girdin, görevli "senin kitabın 1 numaralı dolapta" dedi ve seni bıraktı. Sen merak edip 0 numaralı dolabı açtın, kilitli değil, içinde başkasının kitabı duruyor. Tam bu.
URL'yi elle değiştirdim:
/data/0
Açıldı. Kimse "bu sayfa sana ait mi" diye sormuyor. Başka bir kullanıcının ağ kaydı önüme geldi. Buna IDOR (Insecure Direct Object Reference) deniyor: sunucu yetki kontrolü yapmadan, sadece URL'deki numaraya bakıyor. /download/0 ile o capture'ı PCAP dosyası olarak indirdim.
PCAP Analizi: FTP'nin Düz Metin Hediyesi
PCAP, ağ trafiğinin kaydı. Kim ne göndermiş, ne almış, hepsi içinde. Şimdi neden direkt FTP'ye bakıyorum?
Şöyle: HTTP şifrelenmiş olabilir (HTTPS), SSH zaten şifreli; ama FTP 1971'den beri düz metin çalışır. Yani FTP üzerinden gönderilen kullanıcı adı ve şifre ağdaki herkes tarafından okunabilir. Makine de zaten FTP çalıştırıyordu, bu çok büyük bir ipucu.
tshark ile PCAP'taki FTP trafiğini süzdüm:
$ tshark -r capture0.pcap -Y "ftp" -T fields \
-e ftp.request.command -e ftp.request.arg
USER nathan
PASS Buck3tH4TF0RM3!
Orada. Şifreli bile değil. Birisi FTP ile bağlanmış, biz de capture'dan şifreyi okuduk.
SSH ile İçeri: Şansı Zorlamak
FTP şifresi elimde. Ama FTP'ye girmek çok büyük bir şey vermez. Asıl hedef SSH, oraya girersem sisteme tam erişim olur. Buradaki mantık şu: insanlar tembel, çoğu zaman FTP ve SSH için aynı şifreyi kullanırlar. Denemeye değer:
$ ssh nathan@10.129.61.255
nathan@10.129.61.255's password: Buck3tH4TF0RM3!
nathan@cap:~$ cat ~/user.txt
Root'a Çıkmak: Python'un Gizli Gücü
Nathan olarak içerdeyim ama sıradan kullanıcıyım. Root olmam lazım. Klasik yollardan başladım: sudo -l boş, SUID dosyaları sıradan. Sonra Linux capabilities'e baktım.
Capabilities ne demek? Linux'ta bir programa "sadece şu yetkiyi ver" diyebilirsin. Tam root yerine sadece ağ portlarına bağlanma yetkisi, sadece tarih ayarlama yetkisi gibi. Granüler, güzel fikir; ama yanlış yapılandırılırsa tehlikeli.
$ getcap -r / 2>/dev/null
/usr/bin/python3.8 = cap_setuid,cap_net_bind_service+eip
Şuna bak: cap_setuid Python'da. Bu yetki, sürecin kendi UID'sini istediği değere çevirmesine izin veriyor. Yani Python'a "git, kendini root yap" diyebilirim. Tam olarak öyle yaptım:
$ python3.8 -c "import os; os.setuid(0); os.system('id; cat /root/root.txt')"
uid=0(root) gid=1001(nathan) groups=1001(nathan)
Geriye Bakınca
Bu makinede her adımda bir "neden" vardı:
- Web'e ilk baktım, çünkü web uygulamaları genelde en zayıf halka.
/data/0'ı denedim, çünkü URL'deki sıralı ID her zaman şüphe uyandırır.- FTP trafiğini aradım, çünkü FTP düz metindir; şifre orada yatar.
- Aynı şifreyi SSH'ta denedim, çünkü insanlar şifrelerini tekrar kullanır.
getcapbaktım, çünkü sudo ve SUID yoksa capabilities üçüncü kapıdır.
Saldırı zinciri tek satıra sığar:
Nmap -> Web kesfi -> IDOR (/data/0) -> PCAP + FTP -> SSH -> cap_setuid -> ROOT
Her adım bir öncekinin ipucuyla açıldı. CTF'lerde de gerçek hayatta da iş böyle yürüyor: pasif keşiften aktif sömürüye, görünürdeki ufak bir "garip mi acaba" detayı kovalayarak.
Zaman ayırıp okuduğun için teşekkürler, hatalarımı paylaşırsan seve seve ders çıkarırım :)
// RAPOR SONU, MUCAHIC / OP-0042 / 2026.05.12