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