mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-28 07:31:10 +00:00
Translated ['pentesting-web/ssti-server-side-template-injection/README.m
This commit is contained in:
parent
5a2a17ec19
commit
d6a550a4a8
1 changed files with 23 additions and 23 deletions
|
@ -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
|
||||||
|
@ -660,10 +660,10 @@ URLencoded:
|
||||||
|
|
||||||
| **Template** | **Descrição** |
|
| **Template** | **Descrição** |
|
||||||
| ------------ | --------------------------------------- |
|
| ------------ | --------------------------------------- |
|
||||||
| | Avalia e renderiza a saída |
|
| | Avalia e renderiza a saída |
|
||||||
| | Avalia e renderiza a saída codificada em HTML |
|
| | Avalia e renderiza a saída codificada em HTML |
|
||||||
| | Comentário |
|
| | Comentário |
|
||||||
| e | Permite código (desativado por padrão) |
|
| e | Permite código (desativado por padrão) |
|
||||||
|
|
||||||
* \= 49
|
* \= 49
|
||||||
|
|
||||||
|
@ -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>
|
||||||
|
|
Loading…
Reference in a new issue