# 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 (HackTricks AWS Red Team Expert)! Njia nyingine za kusaidia HackTricks: * Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](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: * **Tovuti Isiyolindwa**: Tovuti ya lengo ambayo taarifa inakusudiwa kuchimbuliwa. * **Tovuti ya Mshambuliaji**: Tovuti mbaya iliyoanzishwa na mshambuliaji, ambayo muathiriwa anatembelea, ikihifadhi 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 ndogo za ukurasa, 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. * **Wakati**: Kugundua tofauti za wakati 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 vinavyoweza kutumika 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 kufikia 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. Hata hivyo, vivinjari vya kisasa vinaizuia kujenga 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 mifumo ya tukio kama **onload** na **onerror** hutoa ufahamu kuhusu mafanikio au kushindwa kwa kupakia rasilimali. * **Ujumbe wa Makosa**: Mifumo 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, kikitumika 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, ikiruhusu uchambuzi kuhusu rasilimali zilizoombwa. * **Mali Zinazoweza Kusomwa**: Baadhi ya sifa za HTML ni **soma msalaba-mwanzo** na zinaweza kutumika kama mbinu ya kuvuja. Kwa mfano, mali ya `window.frame.length` inaruhusu JavaScript kuhesabu fremu zilizojumuishwa kwenye ukurasa wa wavuti msalaba-mwanzo. ## 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 zingeingilia XSinator. Zaidi, tulichagua **kutenga XS-Leaks zinazotegemea mipangilio mibovu na kasoro katika programu-jalizi ya wavuti maalum**. Kwa mfano, mipangilio mibovu ya Kushirikiana Rasilimali za Asili (CORS), uvujaji wa ujumbe wa post 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 Kulingana na 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 wachambuzi 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 kwenye matukio ya onerror/onload linachochea na rasilimali inapakia kwa mafanikio/visivyo na mafanikio, 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 la skripti la shambulio hili: ```html ``` Katika kesi hii ikiwa `example.com/404` haipatikani `attacker.com/?error` itapakiwa. ### Wakati wa Kupakia * **Njia za Kuingiza**: Vitu vya HTML * **Tofauti Inayoweza Kugundulika**: Wakati (kwa ujumla kutokana na Yaliyomo kwenye Ukurasa, Kodi ya 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 zinaweza kutumika, kama vile [**PerformanceLongTaskTiming API**](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongTaskTiming) ambayo inaweza kutambua kazi zinazoendesha kwa zaidi ya 50ms. * **Mfano wa Kodi**: [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 ya awali, 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, Kodi ya 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 Kodi**: [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 urambazaji unafanyika kwa kweli. Tofauti ya muda kati ya matukio haya mawili inaweza kuhesabiwa kujua **muda ambao kivinjari kilitumia kupakia rasilimali**. ### Wakati wa Fremu Iliyofungwa + kupakia * **Njia za Kuingiza**: Fremu * **Tofauti Inayoweza Kugundulika**: Wakati (kwa ujumla kutokana na Yaliyomo kwenye Ukurasa, Kodi ya 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 Kodi**: [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 kawaida kinawezekana kwa sababu kivinjari cha `onload` cha fremu kinachochujwa tu baada ya kukamilika kwa kupakia rasilimali na utekelezaji wa JavaScript. Ili kuepuka tofauti inayoletwa 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 inapopatikana na kufanya iweze kupakia kwa usahihi wakati yaliyomo yoyote inapopatikana, basi unaweza kufanya mzunguko wa kutoa taarifa zote bila kupima wakati. * **Mfano wa Kanuni**: Fikiria unaweza **kuweka** **ukurasa** una **yaliyomo ya siri ndani ya Iframe**. Unaweza **kufanya muathiriwe kutafuta** 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 wa **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 unapopatikana. ### 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** ndani ya **`