BreakMySSH
DockerLabs · Hydra SSH user enum → lovely:rockyou → Hydra root → root:estrella
// ruta
Nmap→
Hydra user enum→
Hydra lovely→
SSH lovely→
Enum post-acceso→
Hydra root→
ROOT ✓
01
// Planificación & objetivo
paso 01
Objetivo del ejercicio
BreakMySSH es una máquina de dificultad Muy Fácil en DockerLabs. El propio nombre lo dice todo: el único servicio expuesto es SSH en el puerto 22 y el objetivo es comprometerlo mediante fuerza bruta.
A diferencia de máquinas anteriores donde la fuerza bruta era un paso intermedio, aquí es el vector principal desde el inicio hasta root. Esta máquina introduce un concepto importante: cuando el acceso inicial no tiene vectores de escalada convencionales (sudo, SUID explotable), la fuerza bruta directa contra el usuario root puede ser viable si el servidor no tiene protecciones como fail2ban o rate limiting.
A diferencia de máquinas anteriores donde la fuerza bruta era un paso intermedio, aquí es el vector principal desde el inicio hasta root. Esta máquina introduce un concepto importante: cuando el acceso inicial no tiene vectores de escalada convencionales (sudo, SUID explotable), la fuerza bruta directa contra el usuario root puede ser viable si el servidor no tiene protecciones como fail2ban o rate limiting.
paso 02
Resumen de fases
| Fase | Técnica / Herramienta | Resultado |
|---|---|---|
| Reconocimiento | Nmap -sV -sC | Puerto 22 OpenSSH 7.7 |
| User Enum | Hydra + wordlists de usuarios | Usuario: lovely |
| Acceso inicial | Hydra + rockyou.txt | lovely : rockyou |
| Post-explotación | sudo, SUID, writable, /etc/passwd | Sin vectores directos — pivot a hydra root |
| Escalada | Hydra root + rockyou.txt | root : estrella |
02
// Reconocimiento & despliegue
paso 03
Despliegue y primer contacto
Desplegamos la máquina con auto_deploy.sh. IP asignada: 172.28.0.2. El nombre BreakMySSH ya orienta el vector de ataque antes de lanzar cualquier herramienta.
03
// Escaneo & análisis
paso 04
Escaneo de puertos — Nmap
Lanzamos Nmap con detección de versiones y scripts NSE. Resultado: un único puerto abierto, 22/tcp SSH con OpenSSH 7.7 en Debian. Superficie de ataque mínima — el único vector es el servicio SSH.
Nmap
# nmap -sV -sC 172.28.0.2
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.7 (Debian)
# Único puerto abierto. Vector: fuerza bruta SSH.
// hallazgo
Solo SSH en el 22. OpenSSH 7.7 — versión antigua que no tiene protecciones modernas. Vector único: fuerza bruta de usuario y contraseña.
paso 05
Enumeración de usuarios — Hydra con wordlists
Sin ninguna pista sobre usuarios válidos, intentamos enumeración mediante fuerza bruta de usuarios con una contraseña fija. Primero probamos con la lista de credenciales por defecto de SecLists — sin resultados. Luego con la wordlist de nombres comunes, que revela el usuario lovely.
Hydra — user enum
# Intento 1: credenciales por defecto → sin resultados
# hydra -C /usr/share/seclists/Passwords/Default-Credentials/ssh-betterdefaultpasslist.txt ssh://172.28.0.2 -t 4
0 valid passwords found
# Intento 2: wordlist de nombres con contraseña fija → usuario lovely encontrado
# hydra -L /usr/share/wordlists/rockyou.txt -p rockyou ssh://172.28.0.2 -t 4
[22][ssh] host: 172.28.0.2 login: lovely password: rockyou
captura — hydra credenciales por defecto sin resultado● ● ●
captura — hydra encontrando lovely:rockyou● ● ●
// usuario y contraseña obtenidos
La contraseña del usuario lovely es literalmente rockyou — el nombre del wordlist más usado en CTFs. Contraseña elegida con intención humorística por el creador de la máquina.
04
// Explotación & acceso inicial
paso 06
Conexión SSH — Acceso como lovely
Nos conectamos por SSH con las credenciales obtenidas. El servidor emite el aviso habitual de OpenSSH sobre algoritmos post-cuánticos. Obtenemos shell como lovely.
SSH
# ssh lovely@172.28.0.2
lovely@172.28.0.2's password: rockyou
lovely@c06584699c13:~$ ← acceso inicial obtenido
captura — shell SSH como lovely● ● ●
Usuariolovely
Contraseñarockyou
ServicioSSH / 22
05
// Post-Explotación & privesc
paso 07
Enumeración post-acceso — Descartando vectores convencionales
Ejecutamos la enumeración estándar de escalada de privilegios. Ninguno de los vectores convencionales da resultado:
—
—
—
—
—
—
Sin vectores directos disponibles. La conclusión es clara: si el servidor SSH no tiene rate limiting ni fail2ban, podemos intentar fuerza bruta directamente contra root.
—
sudo bash -l → sudo no instalado—
find / -perm -4000 → binarios SUID estándar, ninguno explotable vía GTFOBins—
/etc/passwd → usuarios: root y lovely con bash—
find / -writable → solo archivos del propio usuario y /dev, sin scripts de root—
ls /usr/src/ → archivos de compilación, sin exploit de kernel obvio—
uname -a → kernel 6.12.76, cat /etc/os-release → Debian 9 Stretch (EOL)Sin vectores directos disponibles. La conclusión es clara: si el servidor SSH no tiene rate limiting ni fail2ban, podemos intentar fuerza bruta directamente contra root.
captura — sudo no instalado● ● ●
captura — find SUID sin vectores explotables● ● ●
captura — /etc/passwd usuarios del sistema● ● ●
captura — home de lovely sin archivos interesantes● ● ●
captura — find writable sin vectores útiles● ● ●
captura — /usr/src archivos de compilación● ● ●
captura — uname y os-release Debian 9 Stretch● ● ●
// sin vectores convencionales
sudo no instalado, SUID estándar, sin scripts writable de root. Sistema Debian 9 EOL. Pivotamos a fuerza bruta directa contra root via SSH.
paso 08
Fuerza bruta directa — Hydra contra root
El servidor SSH no tiene protección contra fuerza bruta. Lanzamos Hydra directamente contra el usuario root con rockyou.txt desde nuestro Kali. En menos de un minuto obtenemos la contraseña: estrella.
Hydra root
# hydra -l root -P /usr/share/wordlists/rockyou.txt ssh://172.28.0.2 -t 4
[22][ssh] host: 172.28.0.2 login: root password: estrella
1 of 1 target successfully completed, 1 valid password found
captura — hydra encontrando root:estrella● ● ●
Usuarioroot
Contraseñaestrella
ServicioSSH / 22
paso 09
Conexión SSH como root
Nos conectamos directamente como root via SSH. Verificamos con
whoami.
SSH root
# ssh root@172.28.0.2
root@172.28.0.2's password: estrella
root@c06584699c13:~# whoami
root
captura — SSH como root● ● ●
captura — whoami root● ● ●
// root obtenido ✓
Acceso como root via SSH directo con credenciales obtenidas por fuerza bruta.
06
// Reporte & conclusiones
vulnerabilidades
Vectores explotados
| Vulnerabilidad | Impacto | Mitigación |
|---|---|---|
| Contraseña débil usuario lovely (rockyou) | Acceso inicial al sistema | Contraseñas largas y aleatorias. Deshabilitar autenticación por password, usar solo claves SSH |
| SSH accesible para root con contraseña débil | Acceso root directo al sistema | Deshabilitar login root por SSH (PermitRootLogin no). Usar clave pública exclusivamente |
| Sin protección anti-fuerza bruta (fail2ban) | Ataques de diccionario sin límite | Instalar fail2ban, configurar MaxAuthTries en sshd_config |
| Debian 9 Stretch (EOL) | Sin parches de seguridad | Actualizar a versión soportada de Debian |
lecciones
Lecciones aprendidas
BreakMySSH enseña que SSH expuesto sin protección es uno de los vectores más peligrosos en un servidor. Con rockyou.txt y Hydra, un atacante puede comprometer un servidor con contraseñas débiles en minutos. El segundo aprendizaje es metodológico: cuando los vectores convencionales (sudo, SUID, scripts writable) no dan resultado, hay que pensar fuera del sistema — en este caso volviendo al punto de entrada inicial para atacar directamente a root. La enumeración exhaustiva del sistema, aunque no encontró el vector, fue necesaria para descartar opciones y confirmar que la fuerza bruta era el camino.
07
// Glosario
fail2ban
Herramienta de seguridad que monitoriza logs del sistema y bloquea automáticamente IPs que realizan demasiados intentos fallidos de autenticación. Para SSH, detecta múltiples fallos de login y aplica reglas de iptables para bloquear la IP atacante durante un tiempo configurable. Su ausencia en esta máquina permite ataques de fuerza bruta ilimitados. Es una de las primeras herramientas a instalar en cualquier servidor con SSH expuesto.
PermitRootLogin
Directiva en
/etc/ssh/sshd_config que controla si el usuario root puede autenticarse directamente via SSH. Los valores posibles son yes (permitido), no (bloqueado) y prohibit-password (solo con clave pública). La buena práctica es no o prohibit-password — los administradores deben entrar como usuario normal y luego usar su o sudo, nunca directamente como root.Enumeración de usuarios SSH
Técnica para identificar usuarios válidos en un sistema SSH sin autenticación. Se puede realizar por fuerza bruta de usuarios con una contraseña fija, aprovechando diferencias en los tiempos de respuesta (en versiones antiguas de OpenSSH), o usando herramientas específicas como
ssh-user-enum. En esta máquina se usó Hydra con una contraseña conocida para encontrar el usuario lovely mediante una wordlist de nombres.Debian 9 Stretch (EOL)
Debian 9 "Stretch" alcanzó su End of Life en junio de 2022 — ya no recibe actualizaciones de seguridad. Sistemas EOL son objetivos prioritarios en pentesting porque acumulan vulnerabilidades sin parchear.
uname -a muestra la versión del kernel y cat /etc/os-release la distribución exacta — ambos comandos esenciales en la fase de reconocimiento post-acceso para identificar posibles exploits de kernel o servicios desactualizados.rockyou.txt
El wordlist de contraseñas más utilizado en ciberseguridad ofensiva. Contiene ~14 millones de contraseñas reales filtradas en 2009 del breach de RockYou, una empresa de aplicaciones sociales. Está ordenado por frecuencia de uso, lo que hace que las contraseñas más comunes aparezcan primero y acelere los ataques. En esta máquina, la contraseña de root (estrella) estaba dentro de las primeras posiciones del wordlist.