Ambassador [MEDIUM🔵]

Dificultad: Medio

1- Reconocimiento y escaneo

1.1 Ping

Podemos notar que se trata de una maquina Linux, debido al TTL:

1.2 Nmap

Tenemos 4 puertos que corren sobre la maquina objetivo, 22(OpenSSH 8.2), 80(Apache httpd 2.4.41), 3000(Grafana httpd), 3306(MySQL 8.0.30), el puerto 22 corresponde a un servidor SSH para control remoto seguro mediante linea de comandos, el puerto 80 corresponde a un servidor web, el puerto 3000 corresponde a Grafana, una herramienta DevOps para metricas de bases de datos, y 3306 corresponde a una base de datos MySQL. Tambien podemos notar que la maquina objetivo corre sobre un sistema operativo Ubuntu debido a la información proporcionada por el puerto 3306

Si nos vamos al navegador Firefox dentro de nuestro Kali, y vamos a la pagina web correspondiente que se aloja dentro del puerto 80:

Vemos una aplicación web sencilla. Ahora vamos a ir a la pagina web correspondiente al puerto 3000:

Vemos el panel de administración y el login de Grafana, adjunto a la versión de Grafana(v8.2.0)

1.3 whatweb

Tecnologias utilizadas por el servidor web:

1.4 Fuzzing

Dentro del fuzzing, no encontramos nada relevante

2- Explotación de Grafana

2.1 Searchsploit Grafana 8

Vamos a buscar un exploit existente con la información recabada, en este caso buscaremos un exploit para Grafana, concretamente la versión 8:

2.2 Path Traversal & Arbitrary File Read

Vemos que hay un exploit de Grafana para realizar un Path Traversal para recorrer las rutas dentro del servidor y tambien de lectura arbitraria de archivos, concretamente el exploit "multiple/webapps/50581.py" , vamos a visualizar el codigo del exploit y a bajarlo:

Una vez bajado, vamos a revisar el codigo en detalle:

Dentro del exploit tenemos un CVE, una vulnerabilidad publica (CVE-2021-43798)

Vemos que concretamente dentro de esta linea, se acontece el path traversal:

Este path traversal funciona con los plugins existentes dentro de Grafana, dentro de la lista de plugins que podemos ver dentro de la lista "plugins_list" en el codigo:

Vamos a ejecutar el exploit con el siguiente comando:

Ejecutamos:

Ahora vamos a indicarle que nos de el contenido del fichero "/etc/passwd":

Estamos accediendo a un archivo local de la maquina objetivo, esto se conoce como un LFI o Local File Inclusion

2.3 Path Traversal y LFI con Curl

Ahora vamos a realizar el mismo procedimiento pero de manera manual con la herramienta "curl" que viene integrada dentro de Kali, con el siguiente comando chequeamos el path traversal y posteriormente el LFI

Si revisamos el codigo del exploit anteriormente utilizado, el path traversal se acontece dentro del directorio de los plugins de Grafana:

Este es el directorio donde se encuentran los plugins de Grafana:

El valor de choice(plugins_list) es igual a "alertlist"

Por ende, la ruta para verificar el path traversal, quedaria de la siguiente manera:

Ahora vamos con el comando utilizado para realizar el Path Traversal con Curl:

Ejecutamos:

Y obtendriamos el archivo /etc/passwd nuevamente pero de forma manual con la herramienta curl

Ahora vamos a guardar el contenido de este archivo en nuestro Kali:

2.4 Path Traversal al archivo de configuración de Grafana

Con esto ya sabemos los usuarios que se encuentran dentro de la maquina objetivo, ahora vamos a hacer el mismo path traversal pero con el archivo de configuración de Grafana:

Ejecutamos y nos daria el fichero de configuración de Grafana para visualizarlo dentro de la consola, sera mejor que lo guardemos con el siguiente comando:

Ahora si analizamos el archivo, veremos que en una de las lineas, concretamente en la sección de seguridad, podremos grepear por la palabra clave "admin" con el siguiente comando:

Ejecutamos:

Si revisamos bien la salida del comando con el pipe y el grep, veremos que hay unas credenciales:

Vamos a Firefox para iniciar sesión dentro de Grafana:

Y nos inicia sesión correctamente:

2.5 Path Traversal al archivo de configuración de base de datos de Grafana

Vamos a realizar un dumpeo del archivo de configuración de la base de datos de Grafana con el path traversal encontrado con el siguiente comando:

Ejecutamos:

Nos guardra la configuración de la DB de Grafana en un archivo llamado "db_grafana.db", recordemos que este archivo es un binario.

Vamos a grepearlo para encontrar posibles credenciales con el siguiente comando:

(Recordemos que al ser un archivo binario, utilizamos el comando stirngs y no cat)

Ejecutamos:

Si analizamos podemos ver que hay palabras que indican una posible contraseña:

2.6 Conexión a la DB MySQL con las credenciales obtenidas

Ahora sabiendo estas credenciales y recordando el escaneo de Nmap, hay un puerto 3306, correspondiente a una base de datos MySQL, vamos a conectarnos a la misma con el siguiente comando:

(Recordar saltear el cifrado TLS/SSL)

Ejecutamos:

Nos pedira la contraseña, en este caso "dontStandSoCloseToMe63221!", la introducimos:

Vamos a ver que bases de datos se encuentran dentro de la maquina objetivo:

La base de datos "grafana" no contiene ninguna tabla, sin embargo, la DB "whackywidget" si contiene, vamos a seleccionar la base de datos:

Y vamos a listar las tablas:

Ahora vamos a seleccionar todos los elementos de la tabla "users":

3- Conexión a SSH con las credenciales de la DB de MySQL

Si recordamos, dentro del archivo /etc/passwd tenemos un usuario llamado "developer"

Por ende:

Si prestamos atención, la contraseña parece estar ciftada en base64

Vamos a decifrarla con el siguiente comando:

Ejecutamos:

Nos daria la contraseña en texto plano, de tal forma que el usuario y el password quedaria asi:

Tambien dentro de la maquina objetivo tenemos el servicio SSH corriendo, vamos a intentar conectarnos mediante SSH con estas credenciales de la DB:

Ejecutamos:

Ya tendriamos acceso al usuario "developer" mediante SSH

3.1 Obtención de la flag de usuario

Una vez obtenemos acceso al usuario "developer" mediante SSH, vamos a listar los directorios:

Ahi esta la flag "user.txt", vamos a hacerle un cat

4- Escalado de privilegios

Nos vamos a ir a la carpeta /opt/ y vamos a listar los directorios:

Vemos que hay un directorio llamado "consul" y otro llamado "my-app", por lo que tiene todo el sentido del mundo que el usuario al llamarse "developer" y una carpeta llamada "my-app", puede que sea una aplicación del desarrollador

Tambien podemos ver la carpeta "consul", que parece ser archivos necesarios para que funcione esta aplicación

4.1 Searchsploit consul

Vamos a buscar en Searchsploit la palabra clave "consul", referente a la carpeta que encontramos dentro del usuario "developer":

Nos encontramos con vulnerabilidades RCE(Remote Command Execution)

4.2 Git log a la aplicación del usuario developer

Vamos a irnos dentro de la carpeta "my-app" que habiamos encontrado y vamos a ejecutar el comando "git log" para ver el historial de commits que tiene esta aplicación:

4.3 Git show a los commits de la aplicación del usuario developer

Vemos que nos da diferentes commits realizado por el desarrollador, concretamente nos interesa el primer commit, vamos a utilizar el comando "git show {Token commit}" para ver que nos encuentra en este commit de GitHub, el comando quedaria así:

Ejecutamos:

Nos da información sobre el commit, y tambien vemos que hay cambios dentro del script hecho en Bash llamado "put-config-in-consul.sh", por lo que el nombre refiere a que esta utilizando una aplicación o un servicio llamado "consul", como podemos ver, resulto util la busqueda en Searchsploit de la palabra clave "consul", vamos a utilizar un exploit para "consul", tambien podemos ver un token

4.4 RCE(Remote Command Execution) de "consul"

Podemos utilizar cualquier exploit que nos dio Searchsploit o podemos utilizar alguno que se encuentre dentro de GitHub, en mi caso utilizare uno que encontre en ExploitDB:

Nos bajamos el archivo .py del exploit desde ExploitDB con curl:

Nos lo guardaria con el nombre de "rce_ambassador.py"

Vamos a abrir un servidor web con Python donde tengamos el exploit, para bajarnos el exploit a nuestra maquina victima desde SSH con el usuario "developer":

Y para bajarnos el exploit a la maquina victima utilizaremos "wget":

(En mi caso la IP que me asigno Hack The Box es 10.10.14.12)

Pero antes de realizar la descarga del exploit con el usuario developer mediante SSH, tenemos que movernos al directorio "/tmp/" o mas conocido como directorio temporal, donde si tenemos permisos de escritura para utilizar el comando "wget" para bajarnos el exploit:

Ahora ya descargado el exploit en la maquina victima, vamos a ponernos en escucha con netcat por el puerto 443 dentro de nuestro Kali:

Ahora vamos a irnos a la shell donde teniamos acceso a SSH con el usuario developer y vamos a ejecutar el script de Python que utilizare, en mi caso se llama "rce_ambassador.py", lo ejecutaremos con el menu de ayuda utilizando la flag o el parametro "--help":

Como podemos ver, la ejecución de este exploit se haria de la siguiente manera:

Vamos a ejecutar con mis parametros definidos:

Si vamos a la consola donde teniamos netcat escuchando por el puerto 443:

Ya somos usuarios root, hagamos un "whoami":

4.5 Obtención de la flag root

Vemos que estamos en la carpeta raiz del sistema linux, ahora vamos a ir a la carpeta personal del usuario root y listamos los directorios:

Ahi esta la flag de root, ahora vamos a hacerle un "cat" para visualizarla:

Con esto, concluimos la maquina "Ambassador" de Hack The Box

Espero te haya sido de ayuda este Write Up :)

Si tuviste alguna dificultad a la hora de resolverlo, no olvides contactarme en mis redes sociales

Última actualización