flagSTTI2 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 Ofuscadosarrow-up-right

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