// 01
Reconocimiento
El primer paso siempre es el reconocimiento. Lanzamos nmap contra la IP objetivo 172.17.0.2 para descubrir qué puertos están abiertos y qué servicios corren en ellos.
De los 65,535 puertos TCP, solo uno responde: el puerto 22, estándar de SSH. Nmap identifica el servicio como OpenSSH 7.7 corriendo con el protocolo 2.0. La máquina solo expone este único vector de entrada — SSH es el objetivo.
// PARÁMETROS NMAP — EXPLICACIÓN
-p- escanea los 65,535 puertos TCP para no omitir ningún servicio. -sS usa un SYN scan (half-open) que no completa el three-way handshake, es más rápido y sigiloso. -sC ejecuta scripts NSE por defecto para obtener información adicional del servicio. -sV detecta la versión exacta. -n desactiva la resolución DNS para mayor velocidad. -Pn omite el host discovery previo asumiendo que el host está activo. --min-rate=5000 fuerza un mínimo de 5000 paquetes por segundo. -oX exporta el resultado a formato XML para procesarlo después.
Convertimos el XML generado por nmap en un reporte HTML navegable usando xsltproc con la hoja de estilos XSL oficial que viene incluida en nmap. Esto genera un archivo HTML visual con toda la información del escaneo organizada en tablas.
// SUPERFICIE DE ATAQUE — SOLO SSH EXPUESTO
La máquina únicamente expone el puerto 22. No hay web, no hay FTP, no hay bases de datos accesibles. El ataque debe ir 100% dirigido a SSH. El objetivo del laboratorio es claro: practicar ataques de fuerza bruta contra este servicio para obtener credenciales válidas.
// 02
Metasploit · Módulo ssh_login
Metasploit Framework es el framework de explotación más utilizado en pentesting. Lo iniciamos con el comando msfconsole. Al arrancar carga su base de datos con miles de módulos: exploits, auxiliares, payloads, post-exploits y encoders. En esta máquina usaremos un módulo auxiliar — los auxiliares son módulos que no explotan vulnerabilidades propiamente, sino que realizan tareas de soporte como escaneo o fuerza bruta.
Dentro del prompt de Metasploit (msf >), usamos el comando search para encontrar módulos relacionados con SSH y login. La búsqueda retorna una lista numerada de resultados. El módulo que nos interesa aparece en la posición 28: auxiliary/scanner/ssh/ssh_login, clasificado con ranking excellent y marcado como SSH Login Check Scanner. Es exactamente lo que necesitamos para realizar fuerza bruta contra SSH.
// ¿QUÉ ES auxiliary/scanner/ssh/ssh_login?
Este módulo de Metasploit intenta autenticarse en un servidor SSH usando combinaciones de usuario y contraseña. Soporta múltiples modos: lista de usuarios (USER_FILE), lista de contraseñas (PASS_FILE), combinaciones usuario:contraseña (USERPASS_FILE), o credenciales únicas (USERNAME / PASSWORD). Es multihilo, configurable y registra automáticamente las credenciales válidas encontradas en la base de datos de Metasploit.
// 03
Fuerza Bruta SSH
Seleccionamos el módulo con su número de resultado usando el comando use seguido del índice 28. El prompt cambia para reflejar el módulo activo: msf6 auxiliary(scanner/ssh/ssh_login) >. Con show options podemos ver todos los parámetros configurables del módulo.
El único parámetro obligatorio que falta configurar es RHOSTS (Remote Hosts), que indica la IP o rango de IPs objetivo. Lo establecemos con el comando set seguido del nombre del parámetro y su valor. 172.17.0.2 es la IP del contenedor Docker que levanta la máquina BreakMySSH.
// PARÁMETROS NECESARIOS PARA FUERZA BRUTA REAL
Para que el módulo pruebe credenciales reales, es necesario proporcionar al menos una de estas opciones: USERNAME + PASSWORD (credencial única), USER_FILE + PASS_FILE (listas de usuarios y contraseñas separadas), o USERPASS_FILE (archivo con pares usuario:contraseña). Sin ninguna de estas configuradas, el módulo intentará acceso anónimo y contraseñas en blanco únicamente. Wordlists recomendadas: /usr/share/wordlists/rockyou.txt para contraseñas y /usr/share/seclists/Usernames/top-usernames-shortlist.txt para usuarios.
// 04
Acceso a la Máquina
Con el módulo cargado y RHOSTS configurado, ejecutamos con el comando exploit (o su alias run). El módulo inicia el proceso de bruteforce: se conecta al puerto 22 e intenta autenticarse con las combinaciones de credenciales configuradas.
En la salida vemos el mensaje de inicio Starting bruteforce. El módulo reporta un error de validación porque no se configuraron archivos de usuarios ni contraseñas — esto es normal si solo queremos verificar acceso anónimo o completar la configuración con wordlists. Una vez que el módulo encuentra credenciales válidas, las reporta automáticamente con el prefijo [+] y abre una sesión SSH.
// COMPLETAR EL ATAQUE CON WORDLISTS
Para completar la fuerza bruta con éxito, configura los archivos de diccionario antes de ejecutar exploit: set USER_FILE /usr/share/seclists/Usernames/top-usernames-shortlist.txt y set PASS_FILE /usr/share/wordlists/rockyou.txt. Cuando el módulo encuentre credenciales válidas, verás el prefijo [+] con el usuario, contraseña y una sesión abierta. Desde esa sesión puedes ejecutar comandos directamente en la máquina objetivo.
Una vez que el módulo encuentra las credenciales válidas, registra la sesión automáticamente. Podemos acceder a ella con sessions -i 1 para interactuar directamente con la máquina, o usar las credenciales obtenidas para conectarnos manualmente vía SSH desde la terminal.
| VULNERABILIDAD | COMPONENTE | IMPACTO |
|---|---|---|
| Weak Password | OpenSSH 7.7 · credencial débil | Acceso root mediante fuerza bruta |
| SSH expuesto en red | Puerto 22/tcp accesible | Superficie de ataque directa al servidor |
| Sin rate limiting | OpenSSH sin fail2ban / MaxAuthTries bajo | Bruteforce ilimitado sin bloqueo |
// 05
Referencia de Comandos
- -p- — escanea los 65,535 puertos TCP
- -sS — SYN scan (half-open), sin completar handshake
- -sC — ejecuta scripts NSE por defecto
- -sV — detecta versión del servicio
- -n — desactiva resolución DNS
- -Pn — omite host discovery previo
- --min-rate — paquetes mínimos por segundo
- -oX — exporta el resultado en formato XML
- --output <file> — archivo de salida alternativo
- search <término> — busca módulos por nombre o descripción
- use <n> / <nombre> — selecciona un módulo
- show options — muestra parámetros del módulo activo
- set <PARAM> <valor> — configura un parámetro
- exploit / run — ejecuta el módulo activo
- sessions -l — lista sesiones activas
- sessions -i <n> — interactúa con la sesión n
- RHOSTS — IP o rango objetivo (requerido)
- RPORT — puerto SSH (por defecto 22)
- USERNAME — usuario único a probar
- PASSWORD — contraseña única a probar
- USER_FILE — archivo con lista de usuarios
- PASS_FILE — archivo con lista de contraseñas
- USERPASS_FILE — archivo con pares user:pass
- THREADS — hilos concurrentes (por defecto 1)
- BRUTEFORCE_SPEED — velocidad 0–5 (por defecto 5)
// 06
Glosario
msfconsole da acceso a más de 2,600 exploits,
1,300+ módulos auxiliares y 1,700+ payloads. Los módulos se clasifican
en: exploits (vulnerabilidades), auxiliary
(escaneo, fuerza bruta, fuzzing), post (post-explotación),
payloads (código ejecutado tras explotar) y
encoders (ofuscación de payloads).
/usr/share/wordlists/rockyou.txt
(comprimida como .gz por defecto, descomprimible con
gunzip rockyou.txt.gz). Es el primer diccionario a probar
en cualquier ataque de fuerza bruta en entornos CTF.