🟢Codify
En esta ocasión vamos a hacer el writeup de la máquina Codify de Hack the Box, una máquina Linux de dificultad easy.
Primer acceso
Accedemos a la IP 10.10.11.239 a través del navegador. Está bloqueado, a si que añadimos el host a nuestro /etc/hosts:
sudo nano /etc/hostsAhora ya se muestra la web en el navegador:

A primera vista parece una web para probar código en JS desde el navegador, un sandbox.

Nos encontramos con algunas limitaciones en el entorno:

Escaneo con Nmap
Encontramos un puerto 3000 abierto que corre un servicio de Node.js
Fuzzing
Al fuzzear con gobuster o dirsearch no encontramos ningún directorio interesante. En la página About Us encontramos un link interesante a un repositorio de github sobre la versión utilizada en el editor de codigo:

Exploit
Mientras buscaba vulnerabilidades recientes en la biblioteca vm2, encontré una rastreada como CVE-2023–30547 . Esta vulnerabilidad permite eludir las restricciones de la zona de pruebas, lo que permite la ejecución de código arbitrario en el contexto del host.
Creamos un archivo exploit.js con el siguiente script, modificando nuestra IP tun0 con un puerto 8000 abierto:
También vamos a crear un archivo index.html que va a contener una reverse shell que se ejecutará automáticamente al enviar el script al sandbox:
Abrimos un python http server, un listener de netcat, y enviamos el script por el sandbox, obteneniendo una reverse shell:


Somos el usuario svc , tambien hay otro usuario joshua al que no podemos acceder:
En el directorio var/www/contact, encontré un archivo de base de datos SQLite que contiene un nombre de usuario y un hash de contraseña de bcrypt.
Hashcat estaba tardando demasiado en descifrar, así que intenté usar John y logró descifrar la contraseña en solo unos minutos.
Ya tenemos usuario y contraseña:
Vamos a acceder por SSH y obtenemos el user flag:
Escalada de privilegios
Vemos los permisos que tiene joshua:
Este es el script que puede ejecutar:
No podemos ejecutarlo directamente:
Mientras investigaba posibles riesgos de seguridad en los scripts Bash, descubrí una práctica insegura en el script bash de MySQL: la comparación de variables sin comillas.
Según la información proporcionada, si el lado derecho de == en un script de Bash no está encerrado entre comillas, Bash interpretará la expresión como una coincidencia de patrones en lugar de tratarla como una cadena.
En este contexto, aprovecharemos este comportamiento mediante el patrón {valid_password_char}{*}. Esto sugiere que cualquier carácter seguido de cualquier número de caracteres podría coincidir potencialmente.
Al explotar este patrón, es posible manipular la comparación de variables para aceptar una gama más amplia de entradas, posiblemente eludiendo las comprobaciones de contraseñas o logrando un comportamiento no deseado en el script.
Puede intentarse adivinar o forzar el carácter de contraseña inicial seguido de * para omitir la solicitud de contraseña. Además, es viable aplicar fuerza bruta de manera sistemática a cada carácter de la contraseña hasta identificar con éxito todos los caracteres.
A continuación, se presenta el script en Python que utilicé para llevar a cabo la fuerza bruta y extraer la contraseña de root:
Vamos a crear un directorio temporal para ejecutar el script de bruteforce en python:
El script funciona y al ejecutar el comando su y introducir el password ya somos root:
Última actualización
¿Te fue útil?