STTI2 PicoCTF (Intermediate)
Contexto de la maquina
Trayectoria STTI2

Descripción
Este reto de PicoCTF presenta una aplicación web vulnerable a Server-Side Template Injection (SSTI) utilizando el motor de plantillas Jinja2. El objetivo es identificar la vulnerabilidad, evadir los mecanismos de filtrado implementados por el servidor y ejecutar comandos del sistema para obtener la flag final.
Objetivo del reto:
Explotar una vulnerabilidad SSTI para lograr ejecución remota de comandos y leer el archivo que contiene la flag.
Tipo de máquina
Web
Linux
Vulnerabilidad de inyección en templates (SSTI)
Habilidades evaluadas
Identificación de SSTI en aplicaciones web
Comprensión de Jinja2 y su modelo de objetos
Bypass de filtros y blacklists
Ejecución remota de comandos
Automatización básica con Python
Enumeración y análisis de vulnerabilidades

Despliegue del CTF
En la propia pagina buscaremos el CTF, dentro veremos un boton llamado Launch Instance, una ves desplegado nos aparecera here donde se encuentra el dominio junto con el puerto asociado al mismo.
El objetivo de estos CTFs es encontrar la flag final.
STTI

Al acceder al dominio, se observa un formulario que procesa la entrada del usuario y devuelve el resultado renderizado en la página.

Para comprobar si el backend evalúa expresiones, se introduce una prueba básica de SSTI:
La respuesta devuelta es 49, lo que confirma que la entrada está siendo interpretada por un motor de plantillas.
Al intentar un payload más avanzado orientado a ejecución de comandos:
El servidor responde con el mensaje:
Esto indica la presencia de una blacklist que bloquea atributos y funciones consideradas peligrosas. A partir de pruebas y documentación externa, se identifican los siguientes elementos filtrados:
Blacklist
Para evadir estas restricciones, se recurre a técnicas de ofuscación de atributos usando secuencias hexadecimales y el filtro attr.
La referencia utilizada para estos bypasses fue:
URL = Info Payloads Ofuscados
Se prueba el siguiente payload ofuscado:
Respuesta:

Para facilitar la ejecución de comandos, se adapta el payload funcional dentro de un script en Python que actúa como una shell interactiva básica.
shell.py
Ejecución del script:
Una vez dentro, se verifica el usuario y el contenido del directorio actual:
Se identifica el archivo flag en el mismo directorio y se procede a leerlo:
Resultado:
Con esto podremos dar por terminada la maquina.
flag
Last updated