Writeup CTF Horizontall de Hack The Box

Introducción

Horizontall esuna CTF de dificultad fácil que podemos encontrar en Hack The Box. En esta máquina explotaremos varias vulnerabilidades en dos frameworks web. Primero está el descubrimiento de una instancia de Strapi, donde abusaré de dos CVE para restablecer la contraseña del administrador y luego usaré una vulnerabilidad de inyección de comando autenticada para obtener una Shell. Una vez dentro de la máquina objetivo, examinaré una instancia de desarrollo de Laravel que se ejecuta solo en Localhost. A partir de ahí, utilizando otro CVE disponible para Lavarel, realizaremos la elevación de privilegios.

Aprovechando los conocimientos adquiridos con el Curso de Hacking y Auditoría Web de Securiters, voy a incluir en PDF, lo que podría ser un informe de auditoría contratado por un cliente con las partes ejecutiva y técnica.

Enumeración

NMAP

Como siempre, comenzamos realizando un escaneo de los servicios abiertos en el target.

Realizamos a continuación un escaneo más profundo de los puertos abiertos.

Puertos abiertos:

  • Puerto 22: SSH      Open SSH 7.6
  • Puerto 80: HTTP      nginx 1.14.0

También tenemos el nombre del host: horizontal.htb. El próximo paso será registrar el nombre del host en el archivo /etc/hosts.

Vamos ahora al navegador y buscamos la URL http://horizontall.htb para ver su contenido.

Subdominios

Podemos buscar si existen subdominios. Para ello, vamos a utilizar gobuster.

Tenemos un posible subdominio, api-prod.horizontall.htb. Lo registramos también en el archivo /etc/hosts.

Si accedemos a la nueva URL, veremos una página de bienvenida en blanco.

Podemos ver que se está ejecutando en esta página, con curl.

El sitio web está utilizando el CMS Strapi.

Directorios

Esta vez vamos a ejecutar gobuster para buscar directorios interesantes en el sitio web.

El directorio /admin parece interesante. Vamos a abrir ese directorio en el navegador web.

Después de buscar en el código fuente y utilizando las herramientas de desarrollador, no podemos encontrar nada interesante, ni enlaces, ni versiones.

Vulnerabilidades del CMS Strapi

Realizando una búsqueda en Google de “Strapi exploit”, obtenemos resultados que pueden ser interesantes. Tenemos dos CVE. El primero, CVE-2019-19609, que es un RCE y un segundo CVE, CVE-2019-18818 que permite reestablecer la contraseña de administrador para Strapi.

También encontramos un resultado que explica como verificar la versión de Strapi.

Ambos CVE son útiles para esta versión.

Cambio de contraseña de administrador

Primero vamos a utilizar el CVE-2019-18818 para cambiar la contraseña de administrador.

El exploit obtiene la versión, luego envía una petición POST a /admin/plugins/user-permissions/auth/reset-password, para a continuación volver a enviar otra petición POST a /admin/auth/reset-password.

Ahora que tenemos nombre de administrador y con la contraseña generada vamos a iniciar sesión en el panel de control del CMS.

RCE

Ahora vamos a ejecutar el CVE-2019-19609, para lo cual debíamos estar autenticados. Para ello vamos a ejecutar el comando curl podemos encontrar aquí.

Y al mismo tiempo, debemos habilitar un oyente.

Podemos comprobar que ya hemos realizado la conexión reversa con la máquina objetivo.

El siguiente paso será localizar la flag user.txt

Elevación de privilegios

En el mismo directorio donde encontramos la flag user.txt hay una carpeta a myproject a la cual no podemos acceder con los privilegios que tenemos actualmente.

La presencia de un archivo composer-setup.php puede indicar que existe algún sitio web PHP aquí. Otra comprobación que podemos realizar son los puertos internos que está ejecutando la máquina víctima. Para ello, ejecutamos lo siguiente:

Tenemos los siguientes servicios ejecutándose de manera interna en la máquina víctima.

  • Puerto 80: Corresponde al sitio web
  • Puerto 1337: NodeJS
  • Puerto 3306: My SQL
  • Puerto 8000: ?

Puede haber algo interesante en el puerto 8000.

Ejecutamos el siguiente comando en la máquina víctima:

Después de leer la información devuelta por el comando anterior, vemos esta información que puede ser interesante.

Se está ejecutando Lavarel v8 (PHP V7.4.18) en este servicio. Vamos a realizar una búsqueda en Google para ver si encontramos algún exploit. Vamos a probar este CVE-2021-3129

Descargamos el contenido y lo enviamos a la máquina víctima utilizando un servidor con Python.

El servidor lo creamos de la siguiente manera:

El siguiente paso será ejecutar el exploit.py. Para ello, ejecutamos el siguiente comando:

Pero no funciona porque esta máquina no tiene acceso a Internet y para la ejecución de este exploit.py necesita tener acceso a un repositorio de GitHub. Solución, descargamos el repositorio en nuestra máquina.

Y creamos un archivo TAR con este repositorio.

El siguiente paso será enviar este archivo comprimido a la máquina víctima utilizando el mismo servidor Python que creamos anteriormente.

Descomprimimos este archivo.

Una vez hemos descomprimido el archivo phpggc.tar, volvemos a ejecutar el mismo comando anterior, a ver si ahora que el repositorio que antes no podía descargar está presente en la máquina, funciona.

Parece que, si funciona y, además, devuelve que tenemos privilegios root. Ya que para la prueba hemos ejecutado el comando id, vamos a probar si podemos acceder a la flag root.txt de esta misma manera.

Ya tenemos la flag que nos faltaba y otra máquina resuelta.

No responses yet

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *