Usage

Publicado: 22 de Mayo de 2025 Autor: Josรฉ Miguel Romero aKa x3m1Sec Dificultad: โญ Easy

๐Ÿ“ Descripciรณn

En esta mรกquina de Hack The Box llamada Usage, nos enfrentamos a una aplicaciรณn web construida con el framework PHP Laravel, alojada en un servidor nginx sobre un sistema Linux. A travรฉs de una fase inicial de reconocimiento, identificamos rรกpidamente que el sitio hace uso de virtual hosting.

La clave para avanzar radica en una vulnerabilidad SQL Injection a ciegas (Blind SQLi) detectada en la funcionalidad de recuperaciรณn de contraseรฑa del sitio principal. Mediante el uso de payloads manuales y scripts automatizados en Python, conseguimos explotar dicha vulnerabilidad para exfiltrar informaciรณn sensible directamente desde la base de datos.

Esta mรกquina es ideal para practicar tรฉcnicas de inyecciรณn SQL a ciegas, explotaciรณn web en entornos Laravel y scripting para automatizaciรณn de tareas ofensivas.

๐Ÿ”ญ Reconocimiento

Ping para verificaciรณn en base a TTL

๐Ÿ’ก Nota: El TTL cercano a 64 sugiere que probablemente sea una mรกquina Linux.

Escaneo de puertos

Enumeraciรณn de servicios


โš ๏ธ Importante: Detectamos durante la fase de enumeraciรณn con nmap que se estรก realizando virtual hosting. Debemos aรฑadir el siguiente vhost a nuestro fichero /etc/hosts

๐ŸŒ Enumeraciรณn Web

80 HTTP (usage.htb - admin.usage.htb)

http://usage.htb

Usamos la opciรณn de Registro y nos autenticamos pero no vemos nada interesante a priori:

Usamos Wappalyzer para enumerar un poco las tecnologรญas usadas y vemos que el framework principal que se ha usado para el sitio es Laravel, un framework de php.

Vamos a analizar un poco la opciรณn de Reset Password para ver quรฉ estรก realizando por detrรกs:

Verificamos si alguno de los campos del formulario es vulnerable a algรบn tipo de inyecciรณn.

Al introducir una comilla en el campo e-mail obtenemos un error 500, seรฑal de que el backend no estรก manejando correctamente ni sanitizando el campo de entrada:

Confirmamos la vulnerabilidad SQLi con el siguiente payload:

No vemos ningรบn tipo de error reflejado que nos pueda aportar informaciรณn sobre el nombre de la base de datos o algรบn otro campo, por lo que se trata de una inyecciรณn a ciegas (blind sqli)

Aquรญ podrรญamos usar sqlmap o tambiรฉn podemos realizalo de forma manual montar unos script en python que mediante la funciรณn substring nos permita mediante fuerza bruta ir adivinando el nombre de la base de datos y las tablas:

Enumeraciรณn de base de datos

Bรกsicamente este script automatiza la peticiรณn que hemos visto anteriormente al endpoint forget-password y aplica la siguiente inyecciรณn test' OR substring(database(),{i},1)='{character}'-- - para ir determinando el carรกcter que corresponde a cada posiciรณn del nombre de la base de datos.

Para saber si el carรกcter es correcto evalรบa si la cadena "We have e-mailed your password" llega en la respuesta.

Vemos que el script funciona y ya tenemos el nombre de la base de datos:

Ahora que ya tenemos el nombre de la base de datos, si ahora quisiรฉramos averiguar las tablas de dicha base de datos podemos jugar con una nested query. Para ello hacemos algunos cambios en el script anterior dejรกndolo de la siguiente forma:

Enumeraciรณn de tablas de una base de datos especรญfica

Bรกsicamente realizamos algunos ajustes y cambiamos el payload de la inyecciรณn para que en el substring en lugar del nombre de la base de datos, usamos group_concat para retornar los nombres de las tablas separados por coma y vamos comparando con cada carรกcter en cada iteraciรณn del bucle:

![[Pasted image 20250522193104.png]]

Encontramos una tabla interesante llamada admin_users de la cual nos podrรญa interesar extraer su contenido.

Enumeraciรณn de columnas de una tabla

Hemos realizado unos ajustes al script anterior y modificado el payload para consultar las columnas especificando el nombre de la base de datos y el nombre de la tabla:

Ahora que ya tenemos los nombres de las columnas, รบnicamente nos queda extraer su contenido, asรญ que volvemos a modificar el script:

Obtenemos el usuario y la contraseรฑa en formato hash:

Usamos la herramienta nth para comprobar quรฉ tipo de hash es aunque a priori viรฉndolo ya parece que es bcrypt:

Usamos hashcat y rockyou para crackearlo:

Obtenemos la contraseรฑa de admin: whatever1

http://admin.usage.htb

Probamos a autenticarnos en el panel de administraciรณn con las credenciales admin:whatever1

๐Ÿ’ป Explotaciรณn

CVE-2023-24249

Tras verificar las versiones de Laravel y PHP no parece haber exploits, aunque sรญ que encontramos algo interesante para una de las dependencias que estamos enumerando

Parece que hay un CVE-2023-24249 con una vulnerabilidad de tipo arbitrary file upload relacionada con el componente de administraciรณn que permite cambiar la foto de perfil:

Hay documentaciรณn sobre cรณmo explotar esta vulnerabilidad:

https://flyd.uk/post/cve-2023-24249/

Subimos una imagen cualquiera jpg e interceptamos la peticiรณn con burp y cambiamos la extensiรณn del archivo aรฑadiendo un .php al final y reemplazamos el contenido por una php bash one liner:

Vemos la ruta donde se ha subido el archivo:

Iniciamos un listener con netcat

Foothold

Accedemos al recurso que hemos subido en /uploads/images/cat.jpg.php y obtenemos acceso a la mรกquina como usuario dash:

Obtenemos la primera flag en el directorio de usuario de dash:

๐Ÿ‘‘ Escalada de privilegios

Comenzamos a enumerar la mรกquina y encontramos las credenciales de base de datos en la siguiente ubicaciรณn:

Probamos a reutilizarla con los usuarios dash y xander pero no funciona.

En el directorio del usuario dash existe un fichero .monitrc en el que tambiรฉn hay otra contraseรฑa:

Usamos esta credencial para autenticarnos como xander y tenemos รฉxito:

Verificamos si hay algรบn usuario que pueda ejecutar algรบn binario como root

Comprobamos que el usuario xander tiene permisos de lectura y ejecuciรณn sobre este binario

Ejecutamos la herramienta probando las 3 opciones aunque no nos permite hacer gran cosa por temas de permisos.

Usamos el comando strings con el binario para ver si vemos algo interesante:

Aquรญ podrรญa haber algo, ya que se estรก haciendo uso de wildcard. Hay un artรญculo interesante sobre esto en HackTricks

https://book.hacktricks.wiki/en/linux-hardening/privilege-escalation/wildcards-spare-tricks.html

Seguimos los pasos indicados en la documentaciรณn y creamos un archivo @id_rsa, a continuaciรณn creamos un enlace simbรณlico al archivo /root/.ssh/id_rsa y finalmente lo movemos al directorio del que lee el comando 7za que es /var/www/html:

Hemos creado un enlace simbรณlico en este caso al id_rsa de root para que se ejecute la herramienta y vaya a comprimir todo lo que hay en el directorio /var/www/html pues tambiรฉn procese nuestro archivo id_rsa que apunta a la clave ssh del usuario root

Vemos la clave privada de root que podemos copiar en el directorio /tmp de la mรกquina, darle permisos 600 y usar para conectarnos a la mรกquina como root

id_rsa

Last updated