Perfection
#easy #linux

https://app.hackthebox.com/machines/Perfection
Enumeración de puertos y servicios

La página web utiliza WEBrick una librería de Ruby para crear servidores web.
Probar ingresar a un endpoint que no existe arroja nueva información http://10.129.86.107/test

Sinatra es un framework de Ruby para crear aplicaciones web y API's
El endpoint http://10.129.86.107/weighted-grade permite ingresar datos que se reflejan en la página

SSTI



Para bypasear la validación se puede agregar al input un salto de línea urlencodeado %0a seguido de la inyección de código para verificar si la validación no chequea una segunda línea.

Remote Code Execution (RCE)
Sabiendo que se pueden ejecutar comandos, buscamos obtener una reverse shell. Nos ponemos en escucha en la máquina atacante
Y ejecutamos el comando para obtener la reverse shell

User flag
c3a8************************dcfc
El archivo .sqlite_history nos indica la existencia de una base de datos. El directorio Migration parece interesante.
Buscamos identificar el hash de la contraseña del usuario Susan Miller
En el directorio /var/mail encontramos información considerable
Con la información obtenida podemos crackear el hash, el modo 1400 determinado por el binario hashid, el modo de ataque permite agregar una wordlist y verificar cada número generado por la máscara con cada palabra de la wordlist.
La contraseña está formada por el nombre del usuario, un guión bajo, el nombre del usuario a la inversa, otro guión bajo y un número generado aleatoriamente entre 1 y 1.000.000.000, quedando susan_nasus_randomnumber.
Con la contraseña del usuario susan podemos ver sus privilegios
Pudiendo ejecutar cualquier comando como cualquier usuario y/o grupo pasando su contraseña, podemos cambiar de usuario con el comando sudo su y obtener una shell como root
Root flag
ba88************************5191
Vulnerabilidad en el input de las categorías
El problema está en como se validan las categorías
Se validan letras minúsculas, mayúsculas, números, la barra y espacio, indicando que tiene que empezar ^ y terminar $ en la misma línea con alguno de esos caracteres. Al ingresar un salto de línea no chequea una segunda línea entonces al validar la primer parte como true pasa la validación ejecutando la segunda parte del input.
Last updated