Pinguinazo
✍️ Autor: El Pingüino de Mario🔍 Dificultad: Fácil 📅 Fecha de creación: 24/06/2024
Last updated
✍️ Autor: El Pingüino de Mario🔍 Dificultad: Fácil 📅 Fecha de creación: 24/06/2024
Last updated
En primer lugar, tras conectarnos a la máquina, utilizamos el comando:
para verificar la conectividad de red.
A continuación, se realiza el comando:
para realizar un escaneo de puertos y servicios detallado en la dirección IP.
Durante el escaneo, se identificó que el puerto 5000/tcp está abierto y asociado al servicio upnp
. El estado del puerto es open
y la razón es syn-ack
.
Para saber más información sobre el puerto abierto, se realiza el siguiente comando:
Parece que estamos tratando con un servidor que utiliza Werkzeug con Flask. Vamos a realizar una inspección manual de este sitio web.
Ahora buscaremos directorios con la herramienta Gobuster a través de:
Hemos encontrado un directorio llamado console
, que en este tipo de servidores podría permitir la ejecución remota de código (RCE). Sin embargo, está protegido por un PIN, así que continuaremos con la enumeración.
Parece que el fuzzeo hasta ahora no ha proporcionado más resultados. Vamos a experimentar con el formulario que encontramos al principio. Observamos que hay una reflexión en el campo del nombre, por lo que probaremos si interpreta el código HTML.
Hemos confirmado que el formulario interpreta etiquetas HTML. Ahora, vamos a probar si es vulnerable a un ataque de SSTI (Server-Side Template Injection) utilizando el payload {{7+7}}
. Si la operación se ejecuta correctamente, esto indicará que es posible inyectar y ejecutar comandos a través de estas plantillas.
Como se ha realizado correctamente inyectaremos una reverse shell y así poder obtener el acceso al sistema.
Después de investigar varios payloads para Jinja2, encontramos uno que permite ejecutar un comando para enviar una shell a nuestra máquina atacante. Utilizamos HackTricks y el repositorio de PayloadAllTheThings para esta investigación. Enviaremos un payload para ver el ID de usuario.
Con esta información, intentaremos establecer una shell utilizando este método. Ejecutaremos el siguiente comando, que hemos adaptado para incluir nuestra propia shell, tal como se detalla en la página mencionada.
Al estar dentro y ejecutar:
aún no somos root, por lo que hacemos:
para ver si hay algo para explotar.
En GTFOBins no encontramos información relevante para nuestro caso, pero hemos encontrado información útil en la siguiente página:
Esta página proporciona una variedad de técnicas y ejemplos para obtener shells reversas en diferentes entornos, lo cual puede ser crucial para nuestra investigación y para implementar un método adecuado para el objetivo.
Nos ponemos en escucha con netcat, esta vez por el puerto 4444 y ejecutamos como sudo el fichero java que hemos creado.
Conseguimos ser root.