Guitjapeo
Máquina "GuitJapeo" de TheHackersLabs
Autor: Lenam
Dificultad: Experto

RECONOCIMIENTO
En mi caso la ip de la máquina es: 192.168.152.163
Comenzamos con un escaneo de nmap:
El puerto 80 y 443 están corriendo: nginx 1.22.1
El puerto 22 está corriendo: OpenSSH 9.2p1
Y estamos frente a un linux debian.
Puerto 80:

Al parecer es una página que hace una animación y podemos escribir para que la haga con la frase o palabra que le digamos.
Ahora usaremos gobuster para ver si encontramos algo útil:

Eso es lo que encontramos y lo único que necesitamos, por lo que vamos a /login y veremos un panel de login, como no tenemos usuario nos registraremos y luego iniciaremos sesion. Una vez dentro estaremos en /messages y veremos lo siguiente:

Al parecer podemos enviarle mensajes al administrador y con una url, podriamos ponernos con un servidor http.server de python y ver si realmente entra o trata de otra cosa. Para esto haremos lo siguiente:
•Primero nos montamos el servidor con python3:
•Segundo, le enviamos el siguiente link al administrador (reemplaza la ip por la tuya):
Una vez hecho eso, esperamos y recibiremos lo siguiente:

Como vemos, hemos confirmado que el administrador entra al link. Ahora podriamos probar en robar su cookie, pero el problema es que la cookie tiene activado httponly:

Esto significa que no podremos robársela al administrador. Explicacion completa
También si nos fijamos con burpsuite, veremos que cuando enviamos un mensaje, envia la peticion a /api/messages. Viendo que existe esa carpeta, podriamos usar gobuster en ella:

Como vemos tenemos un info y users, pero lo que nos importa es info, ya que si entramos desde el navegador veremos lo siguiente:

Como vemos, muestra la cookie, por lo que ya tenemos algo muy útil. Ahora si revisamos la página del principio, veremos que en donde se puede poner texto para la animacion es vulnerable a XSS, esto nos podria ayudar a robar la cookie del administrador, pero si nos fijamos, está protegido por un Content-Security-Policy. Si vamos a Csp-evaluator y pegamos las que encontramos, nos dirá lo siguiente:

Como vemos tenemos uno crítico el cual nos permitirá robar la cookie del administrador.
INTRUSION
Ahora probaremos si es posible robar la cookie, para esto tendremos que hacer lo siguiente:
• Crearnos una cuenta de github si no tenemos
• Crear un repositorio público (luego lo borramos)
• Crear un archivo .js con el siguiente contenido pero reemplazando la ip por la tuya:
Este código realiza una solicitud GET a https://guitjapeo.thl/api/info, y espera que el servidor responda con un objeto JSON que contenga una propiedad cookie. Una vez que recibe la respuesta, redirige al usuario a http://192.168.56.216/?data=, pasando la cookie obtenida codificada en Base64 como un parámetro de consulta.
• Una vez subido el archivo, montamos un servidor http con python3:
• Ahora solo nos quedaría desde el navegador, poner el siguiente XSS:
En mi caso seria así:
Usaremos "cdn.jsdelivr.net" porque si nos fijamos en el CSP el script-src permitia la carga de scripts desde ese dominio.
Mas información sobre el tema: HackTricks
Una vez hecho todo eso recibiremos esto en el servidor:

Como vemos, el robo de cookies es correcto, por lo que ahora simplemente le enviamos este enlace al administrador:
Ahora conseguimos la cookie del administrador:

Ahora solo vamos al panel e iniciamos sesion, luego cambiamos nuestra cookie por la del administrador.

Como vemos, en su panel hay un nuevo boton para limpiar usuarios, el cual nos manda a https://guitjapeo.thl/api/command/?cmd=clearUsers(), al parecer está ejecutando codigo javascript, por lo que enviaremos una reverse shell con este payload:
Solo que en url encode.
(Claramente antes hay que escuchar con netcat: sudo nc -nlvp 443)
ESCALADA DE PRIVILEGIOS
Lenam
Estando dentro seremos el usuario Lenam.
Si revisamos un poco, veremos que la web tiene un .git, esto significa que pueden haber commits o archivos borrados que todavia se pueden restaurar. Para ver eso ejecutamos en el mismo directorio esto:
Como vemos hay dos archivos borrados, uno es "archivo.zip" y el otro es "password.txt", por lo que los restauramos de la siguiente manera:
Una vez restaurados, tendremos que pasarnos ambos a nuestra máquina atacante, ya que no contamos ni con zip ni 7z. Como tampoco contamos con python3, haremos lo siguiente:
Primero escuchamos con netcat de la siguiente manera:
Luego desde la máquina victima ejecutamos lo siguiente:
y hacemos lo mismo para el password.txt.
Ahora si nos fijamos, el archivo.zip tiene contraseña, pero nos la dan en el password.txt al ejecutar ese archivo con el lenguaje que nos dice en el comentario de la primera línea. El problema de esto, es que parecen ser muchisimos archivos así, y que siempre el password.txt está o en python, ruby, php o javascript, por lo que sabiendo esto crearemos un script en python que lo que haga sea revisar el password.txt, ver en que lenguaje está y luego ejecutar el password.txt según el lenguaje que corresponda.
Script:
Para este script se necesita tener instaladas las siguientes herramientas:
• Node
• Php
• Python
• Ruby
• 7z
Una vez ejecutado veremos lo siguiente:
Al parecer la contraseña del usuario lenam es {[XY2P_oODN). Ahora si ejecutamos sudo -l y ponemos la contraseña, veremos que podemos ejecutar git como root. Por lo que luego de buscar una escalada, encontré esta que en mi caso funcionó:
Una vez hecho eso, ya seremos root y podremos leer las flags:

Gracias por leer....
Última actualización