Codify

Codify es una sencilla mΓ‘quina Linux que cuenta con una aplicaciΓ³n web que permite a los usuarios probar el cΓ³digo Node.js. La aplicaciΓ³n utiliza una biblioteca vm2 vulnerable, que se aprovecha para obtener la ejecuciΓ³n remota de cΓ³digo. Al enumerar el objetivo se revela una base de datos SQLite que contiene un hash que, una vez descifrado, otorga acceso SSH al equipo. Finalmente, se puede ejecutar un script Bash vulnerable con privilegios elevados para revelar la contraseΓ±a del usuario root, lo que genera acceso privilegiado a la mΓ‘quina.


Reconnaissance

Realizaremos un reconocimiento con nmap para ver los puertos que estΓ‘n expuestos en la mΓ‘quina Codify. 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 Apache, un framework de Node.js y el servicio de SSH.

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.

Initial Foothold

Web Enumeration

Accederemos a http://codify.htb y verificaremos que se trate de una aplicaciΓ³n web que permite probar cΓ³digo Node.js sin necesidad de ninguna configuraciΓ³n o instalaciΓ³n. Esta aplicaciΓ³n web utiliza por detrΓ‘s una sandbox para ejecutar el cΓ³digo en un entorno seguro y protegido, sin ningΓΊn acceso al sistema subyacente.

Realizaremos una enumeraciΓ³n de directorios y pΓ‘ginas web a travΓ©s de dirsearch. Nos devuelve el siguiente resultado.

Al acceder a http://codify.htb/editor, nos encontramos con una pΓ‘gina en la cual podemos inyectar el cΓ³digo Node.js y al darle a la opciΓ³n de Run se nos mostrarΓ‘ el resultado en la zona derecha.

Revisando la pΓ‘gina web http://codify.htb/about, nos encontramos con la siguiente informaciΓ³n.

Codify es una plataforma para probar cΓ³digo Node.js de forma sencilla y segura. Su equipo, formado por desarrolladores experimentados, busca facilitar el desarrollo con herramientas confiables.

Su editor de cΓ³digo permite escribir y ejecutar JavaScript en el navegador, usando la biblioteca vm2 para aislar el cΓ³digo y garantizar un entorno seguro.

Sandbox Escape in vm2@3.9.16 - Command Injection (Remote Code Execution)

Al hacer hovering sobre el hipervΓ­nculo de vm2, se nos indica lo que parece ser la versiΓ³n exacta que utiliza la pΓ‘gina web de Codify.

Realizando una bΓΊsqueda por Internet de posibles vulnerabilidades de la biblioteca vm2, nos encontramos con el siguiente repositorio de GitHub.

En el repositorio de GitHub, se nos proporciona un PoC para realizar la explotaciΓ³n de la vulnerabilidad y poder escapar del Sandbox de la aplicaciΓ³n web de Codify. En este caso, lo que realizarΓ‘ es mostrar el resultado del binario /usr/bin/id.

Al inyectar el siguiente cΓ³digo malicioso y darle a la opciΓ³n de Run, comprobamos que en el resultado que nos muestra el servidor, nos aparece el resultado de la ejecuciΓ³n del comando echo /usr/bin/id. Con lo cual, parece ser que podemos llegar a inyectar comandos y lograr finalmente unRemote Code Execution, ademΓ‘s comprobamos que el usuario que ha ejecutado el comando es svc.

Teniendo esto presente, el siguiente paso serΓ‘ lograr obtener acceso al sistema. Con lo cual, con la herramienta de nc nos pondremos en escucha para recibir la Reverse Shell.

En Codify, inyectaremos el siguiente cΓ³digo malicioso que nos permitirΓ‘ ejecutar la Reverse Shell.

Verificamos que hemos conseguido el acceso a la mΓ‘quina vΓ­ctima con el usuario svc.

Initial Access

Information Leakage

Revisaremos los grupos a os que formamos parte a travΓ©s del usuario svc, por otro lado, intentamos comprobar si disponemos de permisos de sudoers pero nos requiere proporcionar credenciales que no disponemos.

Revisamos el archivo /etc/passwd y comprobamos los usuarios del sistema que disponen de bash.

Enumerando el directorio de /var/www/contact nos encontramos con el archivo tickets.db de una base de datos de SQLite. Al analizar el archivo, comprobamos que se nos muestran las credenciales del usuario joshua.

Intentaremos crackear el hash obtenido a travΓ©s de hashcaty finalmente logramos obtener las credenciales en texto plano.

Dado que el servicio de SSH se encuentra expuesto, nos conectaremos directamente al equipo y finalmente logramos visualizar la flag de user.txt.

Privilege Escalation

Abusing sudoers privilege

Revisaremos los grupos que forma parte este nuevo usuario que disponemos pero comprobamos que no dispone de ningΓΊn grupo interesante.

Al revisar los permisos de sudoers nos encontramos que podemos ejecutar como usuario sudo el script localizado en /opt/scripts/mysql-backup.sh.

mysql-backup.sh Script Vulnerabilities

Revisaremos el contenido del script mysql-backup.sh.

Este script en Bash realiza las siguientes acciones.

Tratamos de ejecutar el script para verificar el funcionamiento, pero nos pide proporcionar las credenciales del usuario root del MySQL.

Bypass + Monitor (Pspy)

El script original verifica la contraseΓ±a de MySQL con la siguiente condiciΓ³n en Bash:

Sin embargo, esta validaciΓ³n puede ser vulnerable a un bypass cuando se utiliza el carΓ‘cter * en la variable DB_PASS. En Bash, el * es un comodΓ­n que coincide con cualquier valor, lo que hace que la comparaciΓ³n del if siempre sea verdadera, independientemente del valor de la contraseΓ±a ingresada.

Por ejemplo, si un atacante inserta * en la variable USER_PASS, la condiciΓ³n if se evaluarΓ‘ como verdadera, permitiendo el bypass de la verificaciΓ³n.

Posible ExposiciΓ³n de ContraseΓ±a a travΓ©s de Procesos

Tras realizar el bypass, un atacante podrΓ­a intentar observar los procesos en ejecuciΓ³n para obtener las credenciales. Si el script estΓ‘ interactuando con la base de datos o realizando operaciones donde la contraseΓ±a estΓ© presente en los parΓ‘metros o el entorno del proceso, es posible que la contraseΓ±a se pueda ver revisando los procesos del sistema como Pspy.

En este caso, intentamos realizar el Bypass descrito y verificamos que logramos ejecutar el script correctamente ingresando * como credenciales.

En nuestro equipo loca, deberemos de compartir el binario de pspy64.

En el equipo vΓ­ctima, nos descargaremos pspy64y le daremos los permisos correspondientes.

Ejecutaremos en una terminal el pspy64 para analizar todos los procesos que se vayan ejecutando a tiempo real.

Ejecutaremos el script comosudo desde otra terminal distinta(nos conectamos con otra terminal con el usuario joshua).

DespuΓ©s de ejecutar 2-3 veces el script, verificamos que la herramienta de pspy64 logra obtener el proceso de acceder al MySQL con las credenciales que se encuentran en /root/.creds

Intentamos revisar si estas credenciales se reutilizan para el usuario root, logramos convertirnos y visualizar la flag de root.txt.

Última actualización

ΒΏTe fue ΓΊtil?