Translated ['pentesting-web/ssti-server-side-template-injection/README.m

This commit is contained in:
Translator 2024-03-26 07:58:54 +00:00
parent 5a2a17ec19
commit d6a550a4a8

View file

@ -1,13 +1,13 @@
# SSTI (Server Side Template Injection) # Injeção de Modelo do Lado do Servidor (SSTI)
<details> <details>
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprenda hacking na AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Outras maneiras de apoiar o HackTricks: Outras maneiras de apoiar o HackTricks:
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com) * Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github. * **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
@ -20,9 +20,9 @@ Outras maneiras de apoiar o HackTricks:
{% embed url="https://www.rootedcon.com/" %} {% embed url="https://www.rootedcon.com/" %}
## O que é SSTI (Server-Side Template Injection) ## O que é SSTI (Injeção de Modelo do Lado do Servidor)
A injeção de modelo no lado do servidor é uma vulnerabilidade que ocorre quando um atacante pode injetar código malicioso em um modelo que é executado no servidor. Essa vulnerabilidade pode ser encontrada em várias tecnologias, incluindo Jinja. A injeção de modelo do lado do servidor é uma vulnerabilidade que ocorre quando um atacante pode injetar código malicioso em um modelo que é executado no servidor. Essa vulnerabilidade pode ser encontrada em várias tecnologias, incluindo Jinja.
Jinja é um mecanismo de modelo popular usado em aplicações web. Vamos considerar um exemplo que demonstra um trecho de código vulnerável usando Jinja: Jinja é um mecanismo de modelo popular usado em aplicações web. Vamos considerar um exemplo que demonstra um trecho de código vulnerável usando Jinja:
```python ```python
@ -63,8 +63,8 @@ tinja url -u "http://example.com/" -d "username=Kirlia" -c "PHPSESSID=ABC123...
### [SSTImap](https://github.com/vladko312/sstimap) ### [SSTImap](https://github.com/vladko312/sstimap)
```bash ```bash
python3 sstimap.py -i -l 5 python3 sstimap.py -i -l 5
python3 sstimap.py -u "http://example.com/ --crawl 5 --forms python3 sstimap.py -u "http://example.com/" --crawl 5 --forms
python3 sstimap.py -u 'https://example.com/page?name=John' -s python3 sstimap.py -u "https://example.com/page?name=John" -s
``` ```
### [Tplmap](https://github.com/epinna/tplmap) ### [Tplmap](https://github.com/epinna/tplmap)
```python ```python
@ -167,7 +167,7 @@ $out.read()
### Thymeleaf ### Thymeleaf
No Thymeleaf, um teste comum para vulnerabilidades de SSTI é a expressão `${7*7}`, que também se aplica a esse mecanismo de template. Para possíveis execuções de código remoto, podem ser usadas expressões como as seguintes: No Thymeleaf, um teste comum para vulnerabilidades de SSTI é a expressão `${7*7}`, que também se aplica a este mecanismo de template. Para possíveis execuções de código remoto, podem ser usadas expressões como as seguintes:
* SpringEL: * SpringEL:
@ -182,9 +182,9 @@ ${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
Thymeleaf requer que essas expressões sejam colocadas dentro de atributos específicos. No entanto, o _inline de expressão_ é suportado para outras localizações de template, usando sintaxe como `[[...]]` ou `[(...)]`. Assim, um payload de teste de SSTI simples pode se parecer com `[[${7*7}]]`. Thymeleaf requer que essas expressões sejam colocadas dentro de atributos específicos. No entanto, o _inline de expressão_ é suportado para outras localizações de template, usando sintaxe como `[[...]]` ou `[(...)]`. Assim, um payload de teste de SSTI simples pode se parecer com `[[${7*7}]]`.
No entanto, a probabilidade desse payload funcionar é geralmente baixa. A configuração padrão do Thymeleaf não suporta geração dinâmica de templates; os templates devem ser predefinidos. Os desenvolvedores precisariam implementar seu próprio `TemplateResolver` para criar templates a partir de strings dinamicamente, o que é incomum. No entanto, a probabilidade deste payload funcionar é geralmente baixa. A configuração padrão do Thymeleaf não suporta geração dinâmica de templates; os templates devem ser predefinidos. Os desenvolvedores precisariam implementar seu próprio `TemplateResolver` para criar templates a partir de strings dinamicamente, o que é incomum.
Thymeleaf também oferece _pré-processamento de expressão_, onde expressões dentro de dois sublinhados duplos (`__...__`) são pré-processadas. Esse recurso pode ser utilizado na construção de expressões, como demonstrado na documentação do Thymeleaf: Thymeleaf também oferece _pré-processamento de expressão_, onde expressões dentro de dois sublinhados duplos (`__...__`) são pré-processadas. Este recurso pode ser utilizado na construção de expressões, como demonstrado na documentação do Thymeleaf:
```java ```java
#{selection.__${sel.code}__} #{selection.__${sel.code}__}
``` ```
@ -294,7 +294,7 @@ Nova versão do Pebble:
``` ```
### Jinjava (Java) ### Jinjava (Java)
Jinjava é uma biblioteca Java para análise e renderização de modelos de texto. Ele fornece suporte para injeção de modelo do lado do servidor (SSTI) em aplicativos da web Java. Jinjava é uma ótima ferramenta para explorar vulnerabilidades de SSTI em aplicativos Java e pode ser usado durante testes de penetração para identificar e explorar possíveis vulnerabilidades. Jinjava é uma biblioteca Java para análise e renderização de modelos de texto. Ele suporta a injeção de código no lado do servidor (SSTI) e é comumente usado em aplicativos da web Java para processar modelos dinâmicos. Ao explorar vulnerabilidades de injeção de modelo no lado do servidor, os testadores de penetração podem encontrar e explorar vulnerabilidades de SSTI em aplicativos da web Java.
```java ```java
{{'a'.toUpperCase()}} would result in 'A' {{'a'.toUpperCase()}} would result in 'A'
{{ request }} would return a request object like com.[...].context.TemplateContextRequest@23548206 {{ request }} would return a request object like com.[...].context.TemplateContextRequest@23548206
@ -382,7 +382,7 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
* `${{7*7}}` - 49 * `${{7*7}}` - 49
* `${{request}}, ${{session}}, {{faceContext}}` * `${{request}}, ${{session}}, {{faceContext}}`
A Linguagem de Expressão (EL) é um recurso fundamental que facilita a interação entre a camada de apresentação (como páginas da web) e a lógica da aplicação (como beans gerenciados) em JavaEE. É amplamente utilizada em várias tecnologias JavaEE para otimizar essa comunicação. As principais tecnologias JavaEE que utilizam EL incluem: A Linguagem de Expressão (EL) é um recurso fundamental que facilita a interação entre a camada de apresentação (como páginas da web) e a lógica da aplicação (como beans gerenciados) em JavaEE. É amplamente utilizado em várias tecnologias JavaEE para simplificar essa comunicação. As principais tecnologias JavaEE que utilizam EL incluem:
* **JavaServer Faces (JSF)**: Emprega EL para vincular componentes em páginas JSF aos dados e ações de backend correspondentes. * **JavaServer Faces (JSF)**: Emprega EL para vincular componentes em páginas JSF aos dados e ações de backend correspondentes.
* **JavaServer Pages (JSP)**: EL é usado em JSP para acessar e manipular dados dentro das páginas JSP, facilitando a conexão dos elementos da página aos dados da aplicação. * **JavaServer Pages (JSP)**: EL é usado em JSP para acessar e manipular dados dentro das páginas JSP, facilitando a conexão dos elementos da página aos dados da aplicação.
@ -486,12 +486,12 @@ array("first_name" => $user.first_name)
``` ```
**Mais informações** **Mais informações**
* Na seção Twig e Twig (Sandboxed) em [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection) * Na seção Twig e Twig (Sandboxed) de [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection)
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#twig](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#twig) * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#twig](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#twig)
### Plates (PHP) ### Plates (PHP)
Plates é um mecanismo de modelagem nativo do PHP, inspirado no Twig. No entanto, ao contrário do Twig, que introduz uma nova sintaxe, o Plates utiliza código PHP nativo nos modelos, tornando-o intuitivo para desenvolvedores PHP. Plates é um mecanismo de modelagem nativo do PHP, inspirado no Twig. No entanto, ao contrário do Twig, que introduz uma nova sintaxe, o Plates utiliza código PHP nativo nos modelos, tornando-o intuitivo para os desenvolvedores PHP.
Controlador: Controlador:
```php ```php
@ -775,7 +775,7 @@ Confira a seguinte página para aprender truques sobre **execução de comandos
[Site oficial](http://jinja.pocoo.org) [Site oficial](http://jinja.pocoo.org)
> Jinja2 é um mecanismo de modelo completo para Python. Possui suporte total a Unicode, um ambiente de execução integrado e isolado opcional, amplamente utilizado e licenciado sob a BSD. > Jinja2 é um mecanismo de modelo completo para Python. Possui suporte total a Unicode, um ambiente de execução integrado opcionalmente isolado, amplamente utilizado e licenciado sob a BSD.
* `{{7*7}} = Erro` * `{{7*7}} = Erro`
* `${7*7} = ${7*7}` * `${7*7} = ${7*7}`
@ -799,7 +799,7 @@ Confira a seguinte página para aprender truques sobre **execução de comandos
{{4*4}}[[5*5]] {{4*4}}[[5*5]]
{{7*'7'}} would result in 7777777 {{7*'7'}} would result in 7777777
``` ```
**Jinja2 - Formato do Template** **Jinja2 - Formato de Template**
```python ```python
{% raw %} {% raw %}
{% extends "layout.html" %} {% extends "layout.html" %}
@ -885,7 +885,7 @@ Mesmo sendo perl, ele usa tags como ERB em Ruby.
No mecanismo de template do Go, a confirmação de seu uso pode ser feita com payloads específicos: No mecanismo de template do Go, a confirmação de seu uso pode ser feita com payloads específicos:
* `{{ . }}`: Revela a estrutura de dados de entrada. Por exemplo, se um objeto com um atributo `Password` for passado, `{{ .Password }}` poderia expô-lo. * `{{ . }}`: Revela a entrada da estrutura de dados. Por exemplo, se um objeto com um atributo `Password` for passado, `{{ .Password }}` poderia expô-lo.
* `{{printf "%s" "ssti" }}`: Espera-se exibir a string "ssti". * `{{printf "%s" "ssti" }}`: Espera-se exibir a string "ssti".
* `{{html "ssti"}}`, `{{js "ssti"}}`: Esses payloads devem retornar "ssti" sem adicionar "html" ou "js". Mais diretivas podem ser exploradas na documentação do Go [aqui](https://golang.org/pkg/text/template). * `{{html "ssti"}}`, `{{js "ssti"}}`: Esses payloads devem retornar "ssti" sem adicionar "html" ou "js". Mais diretivas podem ser exploradas na documentação do Go [aqui](https://golang.org/pkg/text/template).
@ -913,7 +913,7 @@ return string(out)
### Mais Exploits ### Mais Exploits
Confira o restante em [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) para mais exploits. Você também pode encontrar informações interessantes sobre tags em [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI) Verifique o restante em [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) para mais exploits. Você também pode encontrar informações interessantes sobre tags em [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI)
## BlackHat PDF ## BlackHat PDF
@ -955,10 +955,10 @@ Se você achar útil, leia:
Outras maneiras de apoiar o HackTricks: Outras maneiras de apoiar o HackTricks:
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com) * Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Compartilhe seus truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>