Horizontall

Horizontall es una máquina Linux de dificultad fácil donde solo se exponen los servicios HTTP y SSH. La enumeración del sitio web revela que está construido utilizando el marco Vue JS. Al revisar el código fuente del archivo Javascript, se descubre un nuevo host virtual. Este host contiene el Strapi Headless CMS que es vulnerable a dos CVE que permiten a los atacantes potenciales obtener ejecución de código remoto en el sistema como el usuario strapi. Luego, después de enumerar los servicios que escuchan solo en localhost en la máquina remota, se descubre una instancia de Laravel. Para acceder al puerto en el que Laravel está escuchando, se utiliza el túnel SSH. El marco Laravel instalado está desactualizado y se ejecuta en modo de depuración. Se puede explotar otro CVE para obtener ejecución de código remoto a través de Laravel como root.


Reconnaissance

Realizaremos un reconocimiento con nmap para ver los puertos que están expuestos en la máquina Horizontall. Este resultado lo almacenaremos en un archivo llamado allPorts.

A través de la herramienta de extractPorts, la utilizaremos para extraer los puertos del archivo que nos generó el primer escaneo a través de Nmap. Esta herramienta nos copiará en la clipboard los puertos encontrados.

Lanzaremos scripts de reconocimiento sobre los puertos encontrados y lo exportaremos en formato oN y oX para posteriormente trabajar con ellos. En el resultado, comprobamos que se encuentran abierta una página web de Nginx.

Transformaremos el archivo generado targetedXML para transformar el XML en un archivo HTML para posteriormente montar un servidor web y visualizarlo.

Accederemos a http://localhost y verificaremos el resultado en un formato más cómodo para su análisis.

Añadiremos la siguiente entrada en nuestro archivo /etc/hosts.

Web Enumeration

Realizaremos una comprobación de las tecnologías que utiliza el sitio web.

Accederemos a http://horizontall.htb y nos encontramos con la siguiente página web. Aparentemente, no obtenemos ningún dato interesante en el contenido principal de la página web.

Realizaremos una enumeración de posibles subdominios de la página web, pero no logramos obtener resultado alguno.

A través de la herramienta de feroxbuster, realizaremos una enumeración de directorios y subdominios de la página web. En el resultado obtenido, se nos muestran solamente archivos de JavaScript.

Comprobaremos el contenido de estos archivos JS que tienen de nombre app, quizás podamos obtener algún dato interesante. Nos descargaremos el archivo a través de cURL.

Revisaremos el contenido del archivo de JS mediante js-beautifypara verlo en un formato cómodo de JS.

En el contenido del archivo, se hace mención sobre un nuevo subdominio de la página web llamado api-prod.horizontall.htb.

Añadiremos esta nueva entrada en nuestro archivo /etc/hosts.

Accederemos a http://api-prod.horizontall.htb y comprobaremos el siguiente contenido.

Enumeraremos posibles directorios y páginas webs de esta nuevo subdominio. En el resultado obtenido, comprobamos diferentes páginas y directorios, entre las cuales nos llama la atención las de admin y users.

Accederemos a http://api-prod.horizontall.htb/admin y comprobaremos el siguiente contenido. Se trata de un CMS llamado Strapi.

Strapi es un CMS de código abierto, moderno y flexible que proporciona una solución escalable y personalizable para la gestión de contenido. Está diseñado específicamente para desarrolladores y se basa en tecnologías como Node. js, React y GraphQL.

Probamos de autenticarnos con las posibles credenciales por defecto de Strapi, pero desafortunadamente no logramos obtener acceso.

Initial Access

Strapi CMS 3.0.0-beta.17.4 Exploitation - Remote Code Execution [RCE] (CVE-202¡19-19609)

Herramientas como Wappalyzer o whatweb no nos acababan mostrando la versión del Strapi. Por lo tanto, decidimos intentar comprobar la versión del Strapi a través del código fuente de la propia página web.

En el código fuente de la página web, nos encontramos en diferentes secciones que mencionan Strapi 3.0.0-beta.17.4.

Realizamos una búsqueda a través de searchsploit para verificar la posible existencia de vulnerabilidades conocidas para esta posible versión del CMS.

Verificamos que se nos muestra una vulnerabilidad de Remote Code Execution (RCE) (Unauthenticated) para nuestra versión del CMS que dispone la aplicación web. Esta vulnerabilidad está reportada como CVE-2019-19609.

Realizando una búsqueda por Internet, nos encontramos con el siguiente repositorio de GitHub que nos ofrece la explotación de la vulnerabilidad.

Nos pondremos en escucha con nc para poder obtener la conexión de la Reverse Shell.

A través del exploit que nos hemos descargado, realizaremos la explotación de la vulnerabilidad sobre la página de Strapi vulnerable, para que se nos proporcione una Reverse Shell hacía nuestro equipo.

Verificamos que finalmente logramos realizar la explotación y nos encontramos en el equipo víctima con el usuario strapi. También podemos verificar la flag user.txt.

Al obtener la reverse shell, mejoramos la calidad de la shell con los siguientes pasos para obtener una TTY interactiva.

Privilege Escalation

Information Leakage

Realizando una enumeración del directorio donde nos encontramos, verificamos de la existencia de un archivo database.jsonel cual contiene las credenciales de acceso a la base de datos strapi de MySQL.

Nos conectaremos a través de las credenciales obtenidas, verificaremos las tablas presentes de la base de datos strapi. Entre las tablas enumeradas, nos encontramos una tabla llamada strapi_administrator.

Comprobaremos los datos de la table mencionada y nos encontramos con el hash del usuario admin. Intentamos crackear este hash obtenido, pero no logramos crackearlo.

Discover Internal Web Server (Chisel Port Forwarding)

Revisaremos los puertos internos de la máquina, en el resultado obtenido nos encontramos diferentes puertos abiertos.

Realizamos una comprobación sobre los diferentes puertos encontrados. A través de cURL al realizar una comprobación del puerto 8000, se nos muestra que es una página web con el título de Laravel.

Para comprobar la página web desde nuestro equipo, lo que realizaremos es un Port Forwarding para poder comprobar el puerto interno desde nuestro equipo local. Este práctica lo realizaremos a través de chisel el cual compartiremos a través de un servidor web.

Desde el equipo comprometido, nos descargaremos el binario de chisel y le daremos los permisos de ejecución correspondientes.

Desde nuestro equipo, configuraremos chisel como servidor.

Por otro lado, desde el equipo víctima, deberemos de configurar el chiselpara que actúe como cliente de nuestro servidor y realice el Port Forwarding del puerto interno 8000 para que sea el puerto 8000 de nuestro equipo local.

Desde nuestro navegador accederemos a http://localhost.8000 y comprobaremos que efectivamente se trataba de la interfaz de Laravel.

Laravel es un framework de PHP y es utilizado para desarrollar aplicaciones web. PHP es el lenguaje de programación más utilizado en mundo para desarrollar sitios web, aplicaciones web y los populares CMS, como WordPress o Joomla.

Realizaremos una comprobación de los posibles directorios que se puedan encontrar en la página web. En el resultado obtenido, comprobamos la existencia de /profiles pero nos devuelve un código de estado 500.

Si accedemos a http://localhost:8000/profiles se nos muestra el siguiente mensaje de error, al parecer la aplicación no funciona correctamente en este punto. Exploraremos otras vías.

Laravel 8.4.2 debug mode - Remote Code Execution [RCE] (CVE-2021-3129)

En la página inicial de http://localhost:8000, nos encontrábamos la versión de Laravel la cual al parecer la aplicación web utilizaba Laravel 8.

Por lo tanto, decidimos buscar si existía alguna vulnerabilidad conocida para esta versión en concreto. Nos encontramos con el siguiente resultado, en el cual al parecer en la versión 8.4.2debug modepodíamos intentar obtener un RCE.

Desconocemos la versión exacta de Laravel pero vale la pena intentar comprobar si es vulnerable a esta vulnerabilidad reportada como CVE-2021-3129.

Nos encontramos el repositorio de GitHub de Ambionics en el cual nos muestran el PoC de cómo aprovecharnos de esta vulnerabilidad y de qué consise.

Realizaremos la explotación, crearemos un payload malicioso llamado exploit.phar que ejecute el comando id.

Al realizar la explotación de la vulnerabilidad sobre el Laravel vulnerable, nos encontramos que hemos podido ejecutar comandos arbitrarios y el usuario que ejecuta estos comandos es el usuario root.

Con lo cual, tenemos una gran vía potencial de ejecutar comandos como sudo y poder obtener acceso como root en el equipo.

Deberemos de disponer instalado phpgcc. PHPGGC es una biblioteca de cargas útiles PHP unserialize() junto con una herramienta para generarlas, desde la línea de comandos o mediante programación.

Nos pondremos en escucha con ncpara recibir la conexión remota.

Crearemos un nuevo archivo exploit.phar que ejecute como comando una Reverse Shell. Ejecutaremos el exploit sobre el Laravel vulnerable.

Verificamos que finalmente logramos obtener acceso al sistema como usuario rooty podemos visualziar la flag root.txt

Por otro lado, también nos encontramos con un repositorio de GitHub que automatiza todo este procedimiento.

Lo único que deberemos de editar en el archivo exploit.py es el contenido de la URL vulnerable y el comando que queremos ejecutar en el sistema.

Lanzamos el exploit y lo primero que realiza es comprobar si tenemos phpgcc instalado en el directorio actual, en caso de que no lo tuviéramos haría la descarga automáticamente. Una vez comprobado, nos ejecutará el comando realizado, en este caso la explotación ha sido exitosa y se muestra le ejecución del comando cat /etc/shadow, como el usuario que ejecuta estos comandos es root, podemos visualizar de este archivo privilegiado.

Última actualización

¿Te fue útil?