Esta la segunda máquina que hago en la plataforma de hacking ético llamada The Hackers Labs.
La máquina se llama Mortadela y tiene una dificultad de Principiante y se encuentra dentro de la categoría de Hacking Web.

Resumen de conceptos trabajados:
| Escaneo de Puertos Enumeración de Servicios Fuzzing web Enumeración de CMS y usuarios Fuerza bruta Cracking the contraseñas Dumpeo de archivo |
Si es tu primera máquina de The Hackers Labs y no sabes cómo empezar a comprometer la máquina víctima, te recomiendo que visites este post donde te cuento paso a paso cómo hacerlo. Básicamente lo que tienes que hacer es descargarte el laboratorio/máquina de la plataforma, importarla desde tu Virtual Box o VMWare, iniciarla y ya desde tu máquina Kali atacante buscar por la red interna la IP…



El resumen de las tres capturas de imagen anteriores es que: por un lado, mi máquina atacante Kali ha encontrado en mi red una máquina con MAC que empieza por 08 que como sabemos corresponde a MACs de máquinas virtualizadas, por otro lado, confirmamos que esa IP efectivamente es la de nuestra máquina víctima lanzándole un ping y vemos que nos devuelve un TTL de 64 (máquina Linux) y que está activa «host is up».
Estructura del contenido
Fase de Enumeración / Escaneo de Puertos
Por tanto ahora comenzamos con la fase de reconocimiento y escaneo de puertos y servicios que corren para esa IP víctima.
Normalmente, y en los casos de prácticas de laboratorios, se suelen empezar por un escaneo de puertos por TCP ya que la mayoría de servicios útiles en máquinas de laboratorio (HTTP, SSH, SMB, MySQL, etc.) usan TCP.
Por tanto, en nuestro caso y para empezar, aplicaremos el siguiente comando nmap por TCP:
nmap -p- --open -sSCV --min-rate 5000 -vvv -n -Pn 192.168.1.210 -oN escaneo


Encontramos los puertos http 80, ssh 22 y mysql 3306 abiertos, corriendo sus servicios y versiones anteriores.
Sabiendo lo anterior, y antes de ponerme a investigar el puerto 80, voy a buscar potenciales vulnerabilidades y exploits públicos que se hayan reportado en Exploit DB a través del comando «searchsploit» pero no hay nada relevante para ningún servicio/versión, por lo que continuo explorando.

El siguiente paso, y que es habitual en entornos de prácticas, es el de revisar la ip por el puerto 80 y ver qué pistas puede ofrecer a simple vista la aplicación web.
La web me devuelve una página default de Debian Apache y a priori no más información a simple vista, por lo que tendremos que seguir con descubrimiento de directorios o carpetas y archivos ocultos, así como potenciales subdominios.
Fuzzing web
Empezamos aplicando fuzzing web con Gobuster para identificar potenciales directorios o extensiones de archivo que puedan quedar ocultos:
gobuster dir -u http://192.168.1.238 -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt -o fuzzing_web.txt -x php,html,txt

Después de probar los más de 80.000 registros del diccionario lowercase, sólo se detecta la carpeta /wordpress la cual me devuelve un sitio web llamado Mortadela:

Tenemos como información relevante la versión del WordPress que es la 6.4.3, por lo que podemos hacer una búsqueda de vulnerabilidades por varias vías:
- Aplicando un searchsploit wordpress 6.4.3
- Aplicando un nmap «vuln» para ver si detecta las más comunes…
- Aplicando un «wpscan» sobre la ruta de wordpress
- Búsqueda en internet «wordpress 6.4.3 vulnerabilities»
*1- Algo de información para versiones anteriores a esas concretas pero nada público específico a priori por aquí…

*2 – Interesante por «vuln» porque encuentra una ruta de login del usuario, nos la anotamos.

*3 – Aplicando un escaneo con la herramienta de búsqueda de vulnerabilidades específicas para WordPress llamada «WPScan» nos devuelve algunos datos interesantes que podríamos explorar (nos encuentra el usuario mortadela). NOTA: Si te registras gratis en su plataforma puedes conseguir su API gratuita para usar en el escaneo y tener un output más fiable. Nos detecta lo siguiente:
[+] XML-RPC seems to be enabled: http://192.168.1.238/wordpress/xmlrpc.php
[+] Upload directory has listing enabled: http://192.168.1.238/wordpress/wp-content/uploads/

*4 – Buscando en internet parece que se encuentran algunas vulnerabilidades como RCE pero las probaré una vez consiga los usuarios y contraseñas y esté dentro de la máquina.
Enumeración CMS y usuarios
Por ahora lo más interesante es el usuario «mortadela» que encuentra WPScan y que efectivamente podemos comprobar revisando la web /wordpress ,a través de la entrada publicada por el usuario «mortadela» en la parte de abajo de la página (http://192.168.0.108/wordpress/index.php/author/mortadela/).

Con este dato del usuario, trato de aplicar fuerza bruta con Hydra para los puertos 22ssh y 3306mysql que estaban abiertos también en el escaneo inicial.
Sin embargo pese a esperar un rato y tras varios intentos, parece no encontrar la contraseña.


Fuerza bruta Hydra
Sabemos que la versión de OpenSSH es actual y no vulnerable, probamos a hacer de nuevo fuerza bruta con Hydra sobre mysql sin usar el usuario «mortadela» (en WordPress puedes cambiar el nombre del autor y url para protegerte de esto precisamente en tu web), por lo que vamos a aplicar de nuevo Hydra usando dos diccionarios, uno para usuarios (seclists) y otro para contraseñas (rockyou) de esta forma:
hydra -L /usr/share/wordlists/metasploit/unix_users.txt -P /usr/share/wordlists/rockyou.txt mysql://192.168.1.238

Nos devuelve la contraseña «cassandra» pero no sabemos el usuario. Probamos para acceder con «mortadela», pero nos da error.

Vamos a probar con otros usuarios por defecto más probables para acceder a mysql como root, mysql, wordpress, wpuser, dbuser, admin, www-data, etc.
Aplicando este comando y probado con «root» parece que estamos dentro y podemos ver esta base de datos (fallo mío de principiante el considerar que estaba en una terminal de Linux por eso de probar los whoami y «ls -la» en lugar de comandos sql XD ):
mysql -h 192.168.1.238 -u root -p'cassandra' --ssl=0
*con ssl=0 conseguí desactivar SSL ya que me daba error de acceso.

En este punto continuamos con la extracción si se puede de usuarios y hashes para crackear: mediante los siguientes comandos sql.

Conseguimos acceder al usuario «mortadela» y su contraseña hasheada.
Vamos a volcar esas credenciales a nuestra máquina Kali para tratarlo, para ello:
mysql -h 192.168.1.238 -u root -p'cassandra' -e "USE wordpress; SELECT ID,user_login,user_pass FROM wp_users;" > wp_users_raw.txt --ssl=0

La propia herramienta de Kali que viene instalada por defecto llamada Hash-Identifier nos dice que el tipo de hash es un MD5:

Cracking de hashes
Sin embargo ese tipo de hash no es un MD5 «simple», sino que es un hash portable phpass (prefijo $P$) que es el formato que usa WordPress.
Por lo que modificamos el comando y formato del hash a:
john --wordlist=/usr/share/wordlists/rockyou.txt --format=phpass hash_mortadela.txt

Sin embargo no vemos que la herramienta nos crackeé la el hash.
Después de darle una pensada de distintas opciones, reviso de nuevo la BBDD mysql para ver si en el resto de tablas hay algo de información que me pueda ayudar.
Accedemos en ese caso a explorar la tabla «confidencial» y vemos «usuarios» dentro de la cual se muestra al usuario «mortadela» y su contraseña.


Ahora conociendo esas credenciales, probamos a autenticarnos en el puerto 22 ssh y estamos dentro como el usuario mortadela y podemos leer la primera user flag.«Juanikokukunero8».

¿Qué hemos hecho hasta ahora? Resumen hasta user flag:
| Descubrimos los puertos abiertos 22 (SSH), 80 (HTTP) y 3306 (Mysql). En la web encontramos un WordPress en /wordpress (v6.4.3) mediante fuzzing con gobuster. Tras ejecutar fuerza bruta con Hydra conociendo el usuario visto en la web, obtuvimos una credencial para MySQL (“cassandra”), con la que conectamos como root. En la base de datos de mysql encontramos la base confidencial y la tabla usuarios que contenía la contraseña en claro de mortadela. Con esa contraseña iniciamos sesión por SSH como mortadela y conseguimos la user flag. |
Ahora continuamos con la escalada de privilegios a root.
Intentamos aplicar sudo -l pero el usuario mortadela no tiene permisos de sudo.
Desde la raíz del servidor aplicamos un ls -la para listar todos los archivos. Exploro el acceso a home (y solo veo el usuario mortadela), root me da error de acceso, en tmp no encuentro nada relevante, y en opt sí que encuentro un archivo .zip.


Ahora lo que vamos a hacer es traernos ese zip a nuestra máquina atacante para unzipearlo y ver su contenido.
Para ello nos levantamos un servidor en python3 por el puerto 8080, y desde nuestra máquina Kali, aplicamos un wget a la ruta de esta forma:

Y ya tendríamos el fichero en nuestro directorio de trabajo.

Sin embargo al intentar unzipear el fichero me salta un aviso de que se trata de una base de datos protegida con contraseña de extensión «kdbx» específica del gestor de contraseñas Keepass:

La forma de crackear esta BBDD de Keepass sería, primero aplicando un «zip2john» al fichero .zip con el output en mi caso por ejemplo llamado «hash» de esta forma:
zip2john muyconfidencial.zip > hash

Y a continuación le hacemos fuerza bruta para crackear el hash usando el diccionario rockyou de esta forma:
john --wordlist=/usr/share/wordlists/rockyou.txt hash
Y tendremos la respuesta con la contraseña del zip:

y si ahora probamos esa contraseña para unzipear esa carpeta «muyconfidencial.zip» vemos el fichero «KeePass.DMP».

Dumpeo de archivo
Necesitamos por tanto dumpear ese fichero de KeePass.DMP, para ello buscamos en Google si hay algún repositorio de github que nos permita hacer eso y vemos este primero: https://github.com/z-jxy/keepass_dump
Nos lo clonamos en nuestra Kali y probamos:


y siguiendo las instrucciones del github lo ejecutamos:

Parece que le falta alguna letra a «aritrini12345», y conociendo esa palabra, me atrevería a probar con la «M» antes…
Por tanto probamos ahora a abrir la base de datos KDBX usando «keepassxc» (antes por si no lo tienes, deberías instalártelo en tu Kali con «apt install -y keepassxc»).
Después, lo ejecutamos y nos abrirá para desbloquear la base de datos e introducimos la contraseña «Maritrini12345»


Efectivamente estamos dentro y podemos ver la contraseña de root «Juanikonokukunero«.

ahora desde ssh con el usuario mortadela, tratamos de cambiarnos a usuario root e introducir esa contraseña de esta manera:


RESUMEN DE LA MÁQUINA MORTADELA THEHACKERSLABS
Empezamos con reconocimiento de red y localizamos la máquina en 192.168.1.238, comprobamos que era una VM Linux y descubrimos los servicios expuestos (SSH, HTTP y Mysql). En la web encontramos un WordPress en /wordpress y puntos débiles para enumerar usuarios; en paralelo accedimos a Mysql (con credenciales que obtuvimos durante la enumeración) y volcamos tablas relevantes. Al inspeccionar la base confidencial y wordpress encontramos credenciales —una contraseña en claro en la tabla usuarios que nos permitió entrar como mortadela por SSH— y además hallamos en /opt un zip sensible (muyconfidencial.zip) que descargamos y atacamos con zip2john + john.A continuación explotamos el ZIP: con la contraseña obtenida abrimos el archivo y extraímos Database.kdbx y KeePass.DMP. Usando la herramienta de volcado de KeePass recuperamos la master/password correcta, abrimos la base y extraímos una credencial de root. Probamos esa contraseña y, tras autenticarnos como mortadela, elevamos a root con su usando la clave encontrada y obtuvimos la root-flag. |
