Ambassador [MEDIUM🔵]
Dificultad: Medio
1- Reconocimiento y escaneo
1.1 Ping
1.1 PingPodemos notar que se trata de una maquina Linux, debido al TTL:
1.2 Nmap
1.2 NmapTenemos 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
1.3 whatwebTecnologias utilizadas por el servidor web:
1.4 Fuzzing
1.4 FuzzingDentro del fuzzing, no encontramos nada relevante
2- Explotación de Grafana
2.1 Searchsploit Grafana 8
2.1 Searchsploit Grafana 8Vamos 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
2.2 Path Traversal & Arbitrary File ReadVemos 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
2.3 Path Traversal y LFI con CurlAhora 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
2.4 Path Traversal al archivo de configuración de GrafanaCon 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
2.5 Path Traversal al archivo de configuración de base de datos de GrafanaVamos 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
2.6 Conexión a la DB MySQL con las credenciales obtenidasAhora 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
3.1 Obtención de la flag de usuarioUna 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
4.1 Searchsploit consulVamos 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
4.2 Git log a la aplicación del usuario developerVamos 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
4.3 Git show a los commits de la aplicación del usuario developerVemos 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"
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
4.5 Obtención de la flag rootVemos 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
