STTI1 PicoCTF (Easy)
Contexto de la maquina
Trayectoria STTI1

Descripción general
La máquina SSTI1 es un desafío de picoCTF enfocado en Server-Side Template Injection (SSTI) en aplicaciones web basadas en Python y Flask. La aplicación web expone un formulario donde los usuarios pueden enviar contenido que luego es procesado y renderizado mediante Jinja2, el motor de plantillas de Flask.
Este escenario simula un entorno real donde la mala validación de entradas en plantillas puede derivar en ejecución remota de código (RCE), incluso con privilegios elevados, lo que permite comprometer completamente el sistema y acceder a información sensible como la flag del CTF.
El laboratorio permite practicar:
Identificación y explotación de SSTI
Escalada de privilegios a nivel de proceso web (root)
Automatización de la explotación mediante scripts Python
Vulnerabilidades identificadas

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

En este caso no es necesario realizar un escaneo de nmap ya que directamente nos dan el puerto y el dominio resuelto, si entramos a dicho dominio veremos lo siguiente.

Vemos un campo en el que podremos ingresar palabras, vamos a utilizar whatweb para ver que tecnologias hay por detras.
Info:
Veremos que hay un python3 por detras lo que podemos creer que es un servidor de flask el cual ya nos da una pista de que puede ser vulnerable a un SSTI y generalmente estas aplicaciones corren por detras un jinja2.
Vamos a probar a meter el siguiente payload:
Info:

Veremos que se esta ejecutando de forma correcta, por lo que probaremos algo mas avanzado:
Info:

Vemos que sigue funcionando y encima lo esta corriendo como root, por lo que vamos a montarnos un pequeño script para tener una shell interactiva en la cual podamos enviar comandos y recibir dicho output desde python3.
Explotación
shell.py
Ahora vamos a ejecutarlo de esta forma:
Info:
Veremos que esta funcionando y si listamos el directorio veremos la flag directamente, la cual si leemos la obtendremos de forma correcta.
flag
Last updated