# XS-Search/XS-Leaks
Tumia [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kujenga na **kutumia workflows** kwa urahisi zinazotumia zana za **jamii ya juu zaidi** duniani.\ Pata Ufikiaji Leo: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)! Njia nyingine za kusaidia HackTricks: * Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJISAJILI**](https://github.com/sponsors/carlospolop)! * Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com) * Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) za kipekee * **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
## Taarifa Msingi XS-Search ni njia inayotumika kwa **kuchimba taarifa za msalaba-mwanzo** kwa kutumia **mapungufu ya njia ya pembeni**. Vipengele muhimu vinavyohusika katika shambulio hili ni pamoja na: * **Tovuti Isiyolindwa**: Tovuti ya lengo ambayo taarifa inakusudiwa kuchimbuliwa. * **Tovuti ya Mshambuliaji**: Tovuti ya madhara iliyoanzishwa na mshambuliaji, ambayo muathiriwa anatembelea, ikimiliki shambulio. * **Mbinu ya Kuingiza**: Mbinu inayotumiwa kuingiza Tovuti Isiyolindwa katika Tovuti ya Mshambuliaji (k.m., window.open, iframe, fetch, tag ya HTML na href, n.k.). * **Mbinu ya Kuvuja**: Mbinu zinazotumika kutambua tofauti katika hali ya Tovuti Isiyolindwa kulingana na taarifa iliyokusanywa kupitia mbinu ya kuingiza. * **Hali**: Hali mbili za uwezekano wa Tovuti Isiyolindwa, ambazo mshambuliaji analenga kutofautisha. * **Tofauti Zinazoweza Kugundulika**: Mabadiliko yanayoweza kuonekana ambayo mshambuliaji anategemea kufikiria hali ya Tovuti Isiyolindwa. ### Tofauti Zinazoweza Kugundulika Vipengele kadhaa vinaweza kuchambuliwa kwa kutofautisha hali za Tovuti Isiyolindwa: * **Msimbo wa Hali**: Kutofautisha kati ya **mimbo mbalimbali ya hali ya majibu ya HTTP** za msalaba-mwanzo, kama makosa ya seva, makosa ya mteja, au makosa ya uthibitishaji. * **Matumizi ya API**: Kutambua **matumizi ya API za Wavuti** kwenye kurasa, kufunua ikiwa ukurasa wa msalaba-mwanzo unatumia API maalum ya JavaScript ya Wavuti. * **Uelekezaji**: Kugundua mabadiliko kwenye kurasa tofauti, si tu mwelekeo wa HTTP lakini pia wale wanaosababishwa na JavaScript au HTML. * **Yaliyomo kwenye Ukurasa**: Kuchunguza **mabadiliko katika mwili wa majibu ya HTTP** au katika rasilimali za kurasa, kama **idadi ya fremu zilizojumuishwa** au tofauti za ukubwa katika picha. * **Kichwa cha HTTP**: Kuzingatia uwepo au labda thamani ya **kichwa maalum cha majibu ya HTTP**, ikiwa ni pamoja na vichwa kama X-Frame-Options, Content-Disposition, na Cross-Origin-Resource-Policy. * **Muda**: Kugundua tofauti za muda thabiti kati ya hali mbili. ### Mbinu za Kuingiza * **Vipengele vya HTML**: HTML inatoa vipengele mbalimbali kwa **kuingiza rasilimali za msalaba-mwanzo**, kama vile maandishi ya mtindo, picha, au hati, ikilazimisha kivinjari kuomba rasilimali isiyo ya HTML. Orodha ya vipengele vya HTML vinavyowezekana kwa kusudi hili inaweza kupatikana kwenye [https://github.com/cure53/HTTPLeaks](https://github.com/cure53/HTTPLeaks). * **Fremu**: Vipengele kama **iframe**, **object**, na **embed** vinaweza kuingiza rasilimali za HTML moja kwa moja kwenye ukurasa wa mshambuliaji. Ikiwa ukurasa **haujamilindwa na fremu**, JavaScript inaweza kupata upatikanaji wa mali ya fremu iliyoframewa kupitia mali ya contentWindow. * **Pop-ups**: Mbinu ya **`window.open`** inafungua rasilimali kwenye kichupo kipya au dirisha, ikitoa **kushughulikia dirisha** kwa JavaScript kuingiliana na mbinu na mali zinazofuata SOP. Pop-ups, mara nyingi hutumika katika kuingia moja, hupuuza ulinzi wa fremu na vizuizi vya vidakuzi vya rasilimali ya lengo. Walakini, vivinjari vya kisasa vinazuia uundaji wa pop-up kwa hatua fulani za mtumiaji. * **Maombi ya JavaScript**: JavaScript inaruhusu maombi moja kwa moja kwa rasilimali za lengo kwa kutumia **XMLHttpRequests** au **Fetch API**. Mbinu hizi hutoa udhibiti sahihi juu ya ombi, kama kuchagua kufuata mwelekeo wa HTTP. ### Mbinu za Kuvuja * **Mfumo wa Tukio**: Mbinu ya kuvuja ya kawaida katika XS-Leaks, ambapo wachakataji wa matukio kama **onload** na **onerror** hutoa ufahamu kuhusu mafanikio au kushindwa kwa kupakia rasilimali. * **Ujumbe wa Makosa**: Mifano ya JavaScript au kurasa maalum za makosa zinaweza kutoa taarifa ya kuvuja moja kwa moja kutoka kwa ujumbe wa makosa au kwa kutofautisha kati ya uwepo wake na kutokuwepo kwake. * **Vikwazo vya Kimataifa**: Vikwazo vya kimwili vya kivinjari, kama uwezo wa kumbukumbu au vikwazo vingine vilivyowekwa na kivinjari, vinaweza kuashiria wakati kizingiti kinapofikiwa, kutumika kama mbinu ya kuvuja. * **Hali ya Kimataifa**: Mwingiliano unaoonekana na **hali za kimataifa za vivinjari** (k.m., kiolesura cha Historia) unaweza kutumiwa. Kwa mfano, **idadi ya vipengele** katika historia ya kivinjari inaweza kutoa viashiria kuhusu kurasa za msalaba. * **API ya Utendaji**: API hii hutoa **maelezo ya utendaji wa ukurasa wa sasa**, ikiwa ni pamoja na wakati wa mtandao kwa hati na rasilimali zilizopakiwa, kuruhusu uchambuzi kuhusu rasilimali zilizoombwa. * **Mali za Kusomwa**: Baadhi ya sifa za HTML ni **soma kwa msalaba-mwanzo** na zinaweza kutumika kama mbinu ya kuvuja. Kwa mfano, mali ya `window.frame.length` inaruhusu JavaScript kuhesabu fremu zilizojumuishwa kwenye ukurasa wa msalaba. ## Zana ya XSinator & Karatasi XSinator ni zana ya moja kwa moja ya **kuangalia vivinjari dhidi ya XS-Leaks kadhaa zinazojulikana** zilizoainishwa katika karatasi yake: [**https://xsinator.com/paper.pdf**](https://xsinator.com/paper.pdf) Unaweza **kupata zana hiyo kwenye** [**https://xsinator.com/**](https://xsinator.com/) {% hint style="warning" %} **XS-Leaks Zilizotengwa**: Tulilazimika kutenga XS-Leaks zinazotegemea **wafanyakazi wa huduma** kwani wangeweza kuingilia kati na uvujaji mwingine katika XSinator. Zaidi ya hayo, tulichagua **kutenga XS-Leaks zinazotegemea mipangilio isiyofaa na kasoro katika programu-jalizi ya wavuti maalum**. Kwa mfano, mipangilio isiyofaa ya Kushirikiana Rasilimali (CORS), uvujaji wa ujumbe wa postMessage au Udukuzi wa Kuvuka-Tovuti. Aidha, tulitenga XS-Leaks zinazotegemea wakati kwani mara nyingi hupata ugumu wa kuwa polepole, kelele, na kutokuwa sahihi. {% endhint %}
\ Tumia [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kujenga na **kutumia workflows** zinazotumia zana za **jamii ya juu zaidi** duniani.\ Pata Ufikiaji Leo: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} ## **Mbinu za Teknolojia za Muda** Baadhi ya mbinu zifuatazo zitatumia muda kama sehemu ya mchakato wa kugundua tofauti katika hali zinazowezekana za kurasa za wavuti. Kuna njia tofauti za kupima muda katika kivinjari cha wavuti. **Saa**: API ya [performance.now()](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) inaruhusu watengenezaji kupata vipimo vya muda vya azimio kubwa.\ Kuna idadi kubwa ya APIs ambazo wadukuzi wanaweza kutumia vibaya kujenga saa za kimya: [Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API), [Message Channel API](https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel), [requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame), [setTimeout](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout), michoro ya CSS, na zingine.\ Kwa habari zaidi: [https://xsleaks.dev/docs/attacks/timing-attacks/clocks](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/). ## Mbinu za Msimamizi wa Matukio ### Onload/Onerror * **Njia za Kuingiza**: Fremu, Elementi za HTML * **Tofauti Inayoweza Kugundulika**: Msimbo wa Hali * **Maelezo Zaidi**: [https://www.usenix.org/conference/usenixsecurity19/presentation/staicu](https://www.usenix.org/conference/usenixsecurity19/presentation/staicu), [https://xsleaks.dev/docs/attacks/error-events/](https://xsleaks.dev/docs/attacks/error-events/) * **Muhtasari**: ikiwa jaribio la kupakia rasilimali linapotokea kosa/kupakia matukio yanahusishwa na rasilimali kupakiwa kwa mafanikio/kwa kushindwa, inawezekana kugundua msimbo wa hali. * **Mfano wa Msimbo**: [https://xsinator.com/testing.html#Event%20Handler%20Leak%20(Script)](https://xsinator.com/testing.html#Event%20Handler%20Leak%20\(Script\)) {% content-ref url="xs-search/cookie-bomb-+-onerror-xs-leak.md" %} [cookie-bomb-+-onerror-xs-leak.md](xs-search/cookie-bomb-+-onerror-xs-leak.md) {% endcontent-ref %} Mfano wa msimbo unajaribu **kupakia vitu vya skripti kutoka JS**, lakini **vitambulisho vingine** kama vitu, maandishi ya mtindo, picha, sauti pia vinaweza kutumika. Zaidi ya hayo, pia inawezekana kuingiza **lebo moja kwa moja** na kutangaza matukio ya `onload` na `onerror` ndani ya lebo (badala ya kuingiza kutoka JS). Pia kuna toleo lisilo na skripti la shambulio hili: ```html ``` Katika kesi hii ikiwa `example.com/404` haipatikani `attacker.com/?error` itapakia. ### Wakati wa Kupakia * **Njia za Kuingiza**: Vitu vya HTML * **Tofauti Inayoweza Kugundulika**: Wakati (kwa ujumla kutokana na Yaliyomo kwenye Ukurasa, Msimbo wa Hali) * **Maelezo Zaidi**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) * **Muhtasari:** [**performance.now()**](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) **API** inaweza kutumika kupima muda gani unachukua kufanya ombi. Hata hivyo, saa nyingine zingine zinaweza kutumika, kama vile [**PerformanceLongTaskTiming API**](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongTaskTiming) ambayo inaweza kutambua kazi zinazoendelea kwa zaidi ya 50ms. * **Mfano wa Msimbo**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) mfano mwingine katika: {% content-ref url="xs-search/performance.now-example.md" %} [performance.now-example.md](xs-search/performance.now-example.md) {% endcontent-ref %} #### Wakati wa Kupakia + Kazi Kubwa Iliyolazimishwa Mbinu hii ni kama ile iliyotangulia, lakini **mshambuliaji** pia atalazimisha hatua fulani ichukue **muda muhimu** wakati **jibu ni chanya au hasi** na kupima muda huo. {% content-ref url="xs-search/performance.now-+-force-heavy-task.md" %} [performance.now-+-force-heavy-task.md](xs-search/performance.now-+-force-heavy-task.md) {% endcontent-ref %} ### Wakati wa Kutopakia/Kabla ya Kutopakia * **Njia za Kuingiza**: Fremu * **Tofauti Inayoweza Kugundulika**: Wakati (kwa ujumla kutokana na Yaliyomo kwenye Ukurasa, Msimbo wa Hali) * **Maelezo Zaidi**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events) * **Muhtasari:** [Saa ya SharedArrayBuffer](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#sharedarraybuffer-and-web-workers) inaweza kutumika kupima muda gani unachukua kufanya ombi. Saa nyingine zinaweza kutumika. * **Mfano wa Msimbo**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events) Muda unaochukuliwa kufikia rasilimali unaweza kupimwa kwa kutumia matukio ya [`unload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/unload\_event) na [`beforeunload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload\_event). Tukio la **`beforeunload`** hutokea wakati kivinjari kinapojiandaa kuelekea ukurasa mpya, wakati tukio la **`unload`** hutokea wakati uhamisho unafanyika kwa kweli. Tofauti ya muda kati ya matukio haya mawili inaweza kuhesabiwa kujua **muda ambao kivinjari kilitumia kufikia rasilimali**. ### Wakati wa Fremu Iliyofungwa + kupakia * **Njia za Kuingiza**: Fremu * **Tofauti Inayoweza Kugundulika**: Wakati (kwa ujumla kutokana na Yaliyomo kwenye Ukurasa, Msimbo wa Hali) * **Maelezo Zaidi**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks) * **Muhtasari:** [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) API inaweza kutumika kupima muda gani unachukua kufanya ombi. Saa nyingine zinaweza kutumika. * **Mfano wa Msimbo**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks) Imeonekana kwamba bila [Kinga za Fremu](https://xsleaks.dev/docs/defenses/opt-in/xfo/), muda unaohitajika kwa ukurasa na rasilimali zake kupakia kupitia mtandao unaweza kupimwa na mshambuliaji. Kipimo hiki kwa kawaida kinawezekana kwa sababu kivinjari cha `onload` cha fremu kinachochujwa tu baada ya kukamilika kwa upakiaji wa rasilimali na utekelezaji wa JavaScript. Ili kuepuka mabadiliko yanayoletwa na utekelezaji wa script, mshambuliaji anaweza kutumia sifa ya [`sandbox`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) ndani ya ` ``` ### #ID + error + onload * **Njia za Kuingiza**: Fremu * **Tofauti Inayoweza Kugundulika**: Yaliyomo kwenye Ukurasa * **Maelezo Zaidi**: * **Muhtasari**: Ikiwa unaweza kufanya ukurasa uwe na kosa wakati yaliyomo sahihi yanafikiwa na kufanya iweze kupakia kwa usahihi wakati yaliyomo yoyote inafikiwa, basi unaweza kufanya mzunguko wa kutoa taarifa zote bila kupima wakati. * **Mfano wa Kanuni**: Fikiria unaweza **kuweka** **ukurasa** wenye **yaliyomo ya siri ndani ya Iframe**. Unaweza **kufanya mhanga atafute** faili inayoitwa "_**flag**_" kutumia **Iframe** (kwa mfano kwa kutumia CSRF). Ndani ya Iframe unajua kwamba _**tukio la onload**_ litatekelezwa **angalau mara moja daima**. Kisha, unaweza **badilisha** **URL** ya **iframe** lakini kubadilisha tu **yaliyomo** ya **hash** ndani ya URL. Kwa mfano: 1. **URL1**: www.attacker.com/xssearch#jaribu1 2. **URL2**: www.attacker.com/xssearch#jaribu2 Ikiwa URL ya kwanza ilipakia **kwa mafanikio**, basi, wakati **kubadilisha** sehemu ya **hash** ya URL tukio la **onload** **halitazinduliwa** tena. Lakini **ikiwa** ukurasa ulikuwa na aina fulani ya **kosa** wakati wa **upakiaji**, basi, tukio la **onload** litazinduliwa **tena**. Kisha, unaweza **kutofautisha kati ya** ukurasa uliopakiwa **kwa usahihi** au ukurasa ambao una **kosa** wakati unafikiwa. ### Utekelezaji wa Javascript * **Njia za Kuingiza**: Fremu * **Tofauti Inayoweza Kugundulika**: Yaliyomo kwenye Ukurasa * **Maelezo Zaidi**: * **Muhtasari:** Ikiwa **ukurasa** unarudisha **yaliyomo nyeti**, **au** **yaliyomo** ambayo inaweza **kudhibitiwa** na mtumiaji. Mtumiaji anaweza kuweka **msimbo wa JS sahihi katika kesi hasi**, na **kila jaribio** kila wakati ndani ya **`