Perfection

#easy #linux

https://app.hackthebox.com/machines/Perfectionarrow-up-right


Enumeración de puertos y servicios

http://10.129.86.107/arrow-up-right

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/testarrow-up-right

Sinatra es un framework de Ruby para crear aplicaciones web y API's

El endpoint http://10.129.86.107/weighted-gradearrow-up-right permite ingresar datos que se reflejan en la página

SSTI

https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Template%20Injection/Ruby.mdarrow-up-right

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

Shell interactiva estable

User flag

circle-check

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

circle-check

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