// CLASSIFIED // OFFENSIVE OPS // YETKİLİ PERSONEL DIŞINA ÇIKMAZ //
SYS ONLINE
SES --------
UPLINK SECURE
COORD --.----°N ---.----°W
----.--.--
--:--:-- UTC
MUCAHIC
// Offensive Operations Division, EST. 2026
HTB / EASY CTF · WRITE-UP Cap IDOR PCAP Linux Capabilities

HackTheBox Cap Writeup

HTB Starting Point makinelerinden Cap. Bir "Security Dashboard" var, URL'sinde küçük bir sayı: /data/1. Onu 0'a çevirince başka birinin trafik kaydı önüme düşüyor. PCAP'in içinde FTP'nin düz metin gönderdiği bir kullanıcı adı ve şifre, aynı şifre SSH için de geçiyor. Root'a çıkış ise Python'un üstündeki bir Linux capability ile. Her adımın neden işe yaradığını da yazdım, çünkü saldırı zinciri ezberle değil refleksle çıkıyor.

Operatör
OP-0042 / MUCAHIC
Yayın
2026.05.12
Okuma
~ 9 DK
Dosya ID
MU-W01-CAP

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.

// makine: Cap  |  OS: Linux  |  Zorluk: Easy  |  IP: 10.129.61.255  |  Konular: IDOR, PCAP analizi, Linux capabilities

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
USER FLAG

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)
ROOT FLAG

Geriye Bakınca

Bu makinede her adımda bir "neden" vardı:

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