BruteIt

Platform
TryHackMe
Difficulty
Easy
System
Linux
Techniques
  • Fuzzing web con ffuf
  • Fuerza bruta con hydra
  • Cracking de clave SSH con john
  • Escalada con sudo (GTFOBins)
  • Cracking de hash de root
Sala: Brute It en TryHackMe

Reconocimiento

Antes de empezar hacemos un ping para comprobar que hay conectividad con la máquina:
terminal
$ ping -c1 10.10.184.26
Con conectividad, empezamos con el escaneo de puertos:
terminal
$ nmap -p- -sS -Pn -n --min-rate 5000 --open -sCV 10.10.184.26
Las flags que usamos:
  • -p-: escanea todos los puertos (del 1 al 65535)
  • -sS: hace un escaneo SYN, rápido y sigiloso
  • -Pn: le dice a nmap que no haga un ping previo para ver si el host está vivo
  • -n: no resuelve nombres DNS, lo que acelera el escaneo
  • --min-rate 5000: envía como mínimo 5000 paquetes por segundo
  • --open: muestra solo los puertos abiertos
  • -sCV: combina -sC, que ejecuta los scripts NSE por defecto, y -sV, que intenta detectar la versión de cada servicio
Están abiertos los puertos 22 (SSH) y 80 (HTTP).
Antes de abrir la web en el navegador, vemos qué tecnologías usa con whatweb:
terminal
$ whatweb 10.10.184.26
Es la página por defecto de Apache, así que no hay mucho que mirar. Lo siguiente es fuzzear la web con ffuf.

Fuzzing

Con este comando buscamos directorios en la web:
terminal
$ ffuf -u http://10.10.184.26/FUZZ -w ~/wordlists/directory-list-2.3-small.txt -c -t 200
Aparece un directorio /admin con un formulario de login. En el código fuente de la página hay un comentario que nos da el usuario: admin.
Probamos algunas contraseñas por defecto (admin:admin, admin:guest, admin:12345678), pero ninguna funciona. Podríamos seguir fuzzeando, pero vamos a probar fuerza bruta con un diccionario de contraseñas usando hydra.

Fuerza bruta

terminal
$ hydra -l admin -P ~/wordlists/rockyou.txt 10.10.46.68 http-post-form '/admin/:user=^USER^&pass=^PASS^:Username or password invalid' -I
La IP es distinta porque la máquina se reinició entre medias.
Hydra encuentra la contraseña y entramos con admin:xavier.

Cracking con john

Dentro del panel hay una clave privada RSA para descargar. Está protegida con contraseña, así que la convertimos a un formato que entienda john y la crackeamos:
terminal
$ ssh2john id_rsa > john.hash$ john --wordlist=~/wordlists/rockyou.txt john.hash
La contraseña de la clave es rockinroll.

Acceso por SSH

La clave no es del usuario admin. En el panel, el administrador dejaba un mensaje dirigido a john, así que probamos con ese usuario:
terminal
$ chmod 600 id_rsa$ ssh -i id_rsa john@10.10.46.68
Con la contraseña rockinroll de la clave entramos como john.

Escalada de privilegios

Una vez dentro, miramos qué puede ejecutar john con sudo:
terminal
sudo -l
Puede ejecutar cat como root sin contraseña. En GTFOBins vemos que eso permite leer cualquier fichero del sistema:
terminal
$ LFILE=file_to_read$ sudo cat "$LFILE"
Lo usamos para leer /etc/shadow:
terminal
$ LFILE=/etc/shadow$ sudo cat "$LFILE"
Eso nos da el hash de la contraseña de root, que crackeamos con john:
terminal
$ john --wordlist=~/wordlists/rockyou.txt --format=sha512crypt hash
Con la contraseña de root en la mano, su root nos da una shell como root y podemos leer la flag final.