Daily Bugle

¡Hola!

Hoy vamos a hackear el Daily Bugle, el famoso periódico ficticio de la saga de Spiderman de Marvel, y durante el proceso vamos a ver como explotar el CMS Joomla a través de una SQL injection.

Esta máquina pertenece a TryHackMe y tiene un nivel de dificultad difícil según la propia web. La podéis encontrar en el siguiente enlace:

Reconocimiento

Lo primero que vamos a hacer, como siempre, es comprobar que la máquina está activa y tenemos acceso a ella ejecutando un ping:

ping -c 1 <IP_MÁQUINA>

Empezamos con la enumeración de puertos abiertos y servicios que corren en la máquina, para ello ejecutamos nmap con los siguientes parámetros para optimizar el rastreo:

nmap -sC -sV -p- --min-rate 5000 -n -Pn <IP_MÁQUINA>

Como resultado, nmap nos reporta que los puertos abiertos son los siguientes:

Lanzamos whatweb y/o Wappalyzer para escanear la versión y servicios que corren en la web. Como ya nos adelantaban en la descripción de la máquina en THM la web está corriendo un Joomla pero desconocemos la versión del servicio. Una simple búsqueda en Google nos da indicios sobre la ruta por defecto que aloja información de Joomla.

http://<IP_MÁQUINA>/language/en-GB/en-GB.xml

Accedemos a ella y nos descubrimos que la versión es 3.7.0

Buscamos un exploit válido para dicha versión de Joomla. Nos vamos a encontrar bastantes exploits para aprovecharnos de una vulnerabilidad tipo SQL injection, tras probar varios que presentaban problemas finalmente yo utilicé la del siguiente enlace que se ejecuta con Python3 y funcionó correctamente:

El exploit nos reporta lo que parecen ser credenciales de un usuario llamado jonah.

En el quinto campo podemos encontrar lo que parece ser una contraseña encriptada. Con echo creo un archivo que contiene la contraseña encriptada. Si pasamos este archivo por hashid descubrimos que efectivamente es una contraseña encriptada con el sistema bcrypt.

Vamos a tratar de desencriptarla con John the Ripper y el diccionario Rockyou utilizando el siguiente comando:

john --wordlist=/usr/share/wordlists/rockyou.txt --format=bcrypt <archivo_pass>

Con esto ya tenemos una contraseña crackeada y el usuario jonah.

Probando estas credenciales en el panel de control de la web comprobamos que son válidas pero iniciando sesión en este panel solo nos permite editar posts y poco más.

Una vez verificadas las credenciales realizamos un fuzzing rápido para intentar descubrir si existe una ruta que nos permita acceder a un posible panel de administración. En mi caso voy a utilizar el script http-enum de nmap:

nmap --script http-enum.nse <IP>

Además de reportarnos una nueva ruta /administrator/ también podemos comprobar que es una vía alternativa para descubrir la versión de Joomla que corre sobre la web.

Explotación

Si accedemos a esta nueva ruta e ingresamos con las credenciales que hemos obtenido podemos acceder al panel de control de administración de Joomla.

Desde el panel de administración tenemos disponibles múltiples vectores de ataque, en mi caso, accediendo a las plantillas de tema del CMS a través del menú superior y siguiendo esta ruta: Extensions/Templates/Templates encontré que el código php de los temas es editable y pude sustituir el contenido de index.php con la intención de ejecutar una Reverse Shell.

Ponemos netcat en escucha en el puerto que corresponda:

nc -lvp 1234

Para que el script se ejecute hacemos click sobre Template Preview e inmediatamente obtenemos una Shell a nuestro equipo con el usuario apache.

Post-Explotación

Si lo vemos necesario podemos realizar un tratamiento de la TTY para obtener una consola interactiva, aunque te adelanto que en esta máquina en concreto no es necesario.

Realizando una pequeña navegación con la intención de enumerar posibles usuarios por las diferentes carpetas del servidor podemos encontrar que existe un usuario llamado jjameson.

Si indagamos en los archivos de configuración de Joomla, concretamente en el archivo configuration.php nos encontraremos una contraseña bajo el campo password.

Podemos usar esta contraseña para iniciar sesión en la máquina a través de SSH o desde la propia consola cambiar del usuario apache a jjameson.

ssh jjameson@<IP_MÁQUINA>

Una vez ya tengamos acceso a la máquina con dicho usuario, si ejecutamos el comando sudo -l para comprobar qué utilidades podemos ejecutar con sudo sin proporcionar contraseña nos encontramos con lo siguiente:

Navegamos a GTFOBINS para investigar sobre escalada de privilegios explotando el binario yum y nos encontramos con dos formas potenciales de escalar privilegios, en mi caso voy a usar la segunda. Siguiendo estos pasos conseguiríamos una shell interactiva con usuario root utilizando yum para cargar un plugin personalizado:

TF=$(mktemp -d)
cat >$TF/x<<EOF
[main]
plugins=1
pluginpath=$TF
pluginconfpath=$TF
EOF

cat >$TF/y.conf<<EOF
[main]
enabled=1
EOF

cat >$TF/y.py<<EOF
import os
import yum
from yum.plugins import PluginYumExit, TYPE_CORE, TYPE_INTERACTIVE
requires_api_version='2.1'
def init_hook(conduit):
  os.execl('/bin/sh','/bin/sh')
EOF

sudo yum -c $TF/x --enableplugin=y

Fuente original

Si hemos ejecutado correctamente los comandos ya tendremos acceso root y podemos navegar libremente por los directorios del servidor para obtener la flag de usuario y de root.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯

Espero que este Writeup te haya sido de utilidad, si tienes alguna duda, sugerencia o simplemente te interesa este tipo de contenido no dudes en seguirme a través de cualquiera de mis redes sociales:

📝 LinkedIn ⮞ https://www.linkedin.com/in/david-rodriguez-ramos/ ▶️ YouTube ⮞ https://www.youtube.com/c/xerosec 🐦 Twitter ⮞ https://twitter.com/xerosec 🔴 Twitch ⮞ https://www.twitch.tv/xerosec 💬 Discord ⮞ https://discord.gg/E4AjK2XsFm

¡Gracias por llegar hasta aquí!

Última actualización