# XS-Soek/XS-Lekke
Gebruik [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) om maklik te bou en **outomatiseer werkstrome** aangedryf deur die wêreld se **mees gevorderde** gemeenskapshulpmiddels.\
Kry Toegang Vandag:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Leer AWS hak van nul tot held methtARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling van eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
## Basiese Inligting
XS-Soek is 'n metode wat gebruik word vir **die onttrek van kruis-oorsprong inligting** deur gebruik te maak van **sykanaal kwesbaarhede**.
Belangrike komponente betrokke by hierdie aanval sluit in:
* **Kwesbare Web**: Die teikenwebwerf waarvandaan inligting bedoel word om onttrek te word.
* **Aanvaller se Web**: Die skadelike webwerf geskep deur die aanvaller, wat die slagoffer besoek, wat die uitbuiting aanbied.
* **Insluitingsmetode**: Die tegniek wat gebruik word om die Kwesbare Web in die Aanvaller se Web in te sluit (bv. window.open, iframe, fetch, HTML-tag met href, ens.).
* **Lek Tegniek**: Tegnieke wat gebruik word om verskille in die toestand van die Kwesbare Web te onderskei gebaseer op inligting wat deur die insluitingsmetode ingesamel is.
* **Toestande**: Die twee potensiële toestande van die Kwesbare Web, wat die aanvaller beoog om te onderskei.
* **Waargeneembare Verskille**: Waarneembare variasies waarop die aanvaller staatmaak om die toestand van die Kwesbare Web af te lei.
### Waargeneembare Verskille
Verskeie aspekte kan geanaliseer word om die toestande van die Kwesbare Web te onderskei:
* **Status Kode**: Onderskeiding tussen **verskeie HTTP-antwoordstatuskodes** kruis-oorsprong, soos bedieningsfoute, kliëntfoute, of outentiseringsfoute.
* **API Gebruik**: Identifisering van **gebruik van Web-API's** oor bladsye, wat onthul of 'n kruis-oorsprongbladsy 'n spesifieke JavaScript Web-API gebruik.
* **Herleiings**: Opmerking van navigasies na verskillende bladsye, nie net HTTP-herleiings nie, maar ook dié wat deur JavaScript of HTML geaktiveer word.
* **Bladsy Inhoud**: Waarneming van **variasies in die HTTP-antwoordliggaam** of in bladsy sub-hulpbronne, soos die **aantal ingeslote rame** of grootteverskille in beelde.
* **HTTP Kop**: Opmerking van die teenwoordigheid of moontlik die waarde van 'n **spesifieke HTTP-antwoordkop**, insluitend koppe soos X-Frame-Options, Content-Disposition, en Cross-Origin-Resource-Policy.
* **Tydsberekening**: Opmerking van konsekwente tydverskille tussen die twee toestande.
### Insluitingsmetodes
* **HTML Elemente**: HTML bied verskeie elemente vir **kruis-oorsprong hulpbron insluiting**, soos stylesheet, beelde, of skripte, wat die blaaier dwing om 'n nie-HTML-hulpbron aan te vra. 'n Samestelling van potensiële HTML-elemente vir hierdie doel kan gevind word by [https://github.com/cure53/HTTPLeaks](https://github.com/cure53/HTTPLeaks).
* **Rame**: Elemente soos **iframe**, **object**, en **embed** kan HTML-hulpbronne direk in die aanvaller se bladsy inbed. As die bladsy **ramebeskerming ontbreek**, kan JavaScript toegang kry tot die vensterobjek van die ingeslote hulpbron via die contentWindow-eienskap.
* **Pop-ups**: Die **`window.open`** metode open 'n hulpbron in 'n nuwe lêer of venster, wat 'n **vensterhandvatsel** vir JavaScript bied om met metodes en eienskappe te interaksioneer volgens die SOP. Pop-ups, dikwels gebruik in enkel aanmelding, omseil rame en koekiebeperkings van 'n teikenhulpbron. Moderne blaaier beperk egter die skep van pop-ups tot sekere gebruikeraksies.
* **JavaScript Versoeke**: JavaScript maak direkte versoeke na teikenhulpbronne moontlik deur gebruik te maak van **XMLHttpRequests** of die **Fetch API**. Hierdie metodes bied presiese beheer oor die versoek, soos die opsie om HTTP-herleiings te volg.
### Lek Tegnieke
* **Gebeurtenishanterer**: 'n klassieke lek tegniek in XS-Lekke, waar gebeurtenishanterers soos **onload** en **onerror** insigte bied oor die sukses of mislukking van hulpbronlaaiing.
* **Foutboodskappe**: JavaScript-uitsonderings of spesiale foutbladsye kan lekinligting verskaf of direk vanuit die foutboodskap of deur onderskeiding tussen die teenwoordigheid en afwesigheid daarvan.
* **Globale Limiete**: Fisiese beperkings van 'n blaaier, soos geheuekapasiteit of ander afgedwonge blaaierlimiete, kan aandui wanneer 'n drempel bereik word, as 'n lek tegniek dien.
* **Globale Toestand**: Waargeneembare interaksies met blaaier se **globale toestande** (bv. die Geskiedenis-koppelvlak) kan uitgebuit word. Byvoorbeeld kan die **aantal inskrywings** in 'n blaaier se geskiedenis aanwysings bied oor kruis-oorsprongbladsye.
* **Prestasie-API**: Hierdie API verskaf **prestasiebesonderhede van die huidige bladsy**, insluitend netwerktiming vir die dokument en gelaai hulpbronne, wat afleidings moontlik maak oor aangevraagde hulpbronne.
* **Leesbare Eienskappe**: Sommige HTML-eienskappe is **leesbaar kruis-oorsprong** en kan as 'n lek tegniek gebruik word. Byvoorbeeld, die `window.frame.length` eienskap laat JavaScript toe om die rame in 'n bladsy kruis-oorsprong te tel.
## XSinator Gereedskap & Dokument
XSinator is 'n outomatiese gereedskap om **blaaier teen verskeie bekende XS-Lekke te toets** soos verduidelik in sy dokument: [**https://xsinator.com/paper.pdf**](https://xsinator.com/paper.pdf)
Jy kan **toegang tot die gereedskap kry by** [**https://xsinator.com/**](https://xsinator.com/)
{% hint style="warning" %}
**Uitgeslote XS-Lekke**: Ons moes XS-Lekke uitsluit wat staatmaak op **dienswerkers** aangesien hulle met ander lekke in XSinator sou bots. Verder het ons gekies om **XS-Lekke uit te sluit wat staatmaak op verkeerde konfigurasies en foute in 'n spesifieke webtoepassing**. Byvoorbeeld, CrossOrigin Resource Sharing (CORS) verkeerde konfigurasies, postMessage lekkasies of Cross-Site Scripting. Daarbenewens het ons tydgebaseerde XS-Lekke uitgesluit aangesien hulle dikwels stadig, lawaaierig en onakkuraat is.
{% endhint %}
\
Gebruik [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) om maklik te bou en **outomatiseer werkstrome** aangedryf deur die wêreld se **mees gevorderde** gemeenskapshulpmiddels.\
Kry Toegang Vandag:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## **Tydgebaseerde tegnieke**
Sommige van die volgende tegnieke gaan tyd gebruik as deel van die proses om verskille in die moontlike toestande van die webbladsye op te spoor. Daar is verskillende maniere om tyd in 'n webblaaier te meet.
**Horlosies**: Die [performance.now()](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) API stel ontwikkelaars in staat om hoë-resolusie tydmetings te kry.\
Daar is 'n aansienlike aantal APIs wat aanvallers kan misbruik om implisiete horlosies te skep: [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), CSS-animasies, en ander.\
Vir meer inligting: [https://xsleaks.dev/docs/attacks/timing-attacks/clocks](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/).
## Gebeurtenishanterings tegnieke
### Onload/Onerror
* **Insluitingsmetodes**: Rame, HTML-elemente
* **Opmerkbare Verskil**: Statuskode
* **Meer inligting**: [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/)
* **Opsomming**: as 'n poging gedoen word om 'n hulpbron te laai, word onerror/onload-gebeurtenisse geaktiveer wanneer die hulpbron suksesvol/onsuksesvol gelaai word, is dit moontlik om die statuskode uit te vind.
* **Kodevoorbeeld**: [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 %}
Die kodevoorbeeld probeer **skripsvoorwerpe vanaf JS laai**, maar **ander etikette** soos voorwerpe, stylesheets, beelde, klank kan ook gebruik word. Daarbenewens is dit ook moontlik om die **etiket direk** in te spuit en die `onload` en `onerror`-gebeurtenisse binne die etiket te verklaar (in plaas daarvan om dit vanaf JS in te spuit).
Daar is ook 'n skriptlose weergawe van hierdie aanval:
```html
```
In hierdie geval, as `example.com/404` nie gevind word nie, sal `attacker.com/?error` gelaai word.
### Onload Timing
* **Insluitingsmetodes**: HTML-elemente
* **Opmerkbare Verskil**: Tydsberekening (gewoonlik as gevolg van Bladsy-inhoud, Statuskode)
* **Meer inligting**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events)
* **Opsomming:** Die [**performance.now()**](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) **API** kan gebruik word om te meet hoeveel tyd dit neem om 'n versoek uit te voer. Ander klokke kan egter ook gebruik word, soos die [**PerformanceLongTaskTiming API**](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongTaskTiming) wat take kan identifiseer wat vir langer as 50ms hardloop.
* **Kodevoorbeeld**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) 'n ander voorbeeld in:
{% content-ref url="xs-search/performance.now-example.md" %}
[performance.now-example.md](xs-search/performance.now-example.md)
{% endcontent-ref %}
#### Onload Timing + Gedwonge Swaar Taak
Hierdie tegniek is net soos die vorige een, maar die **aanvaller** sal ook **'n paar aksies dwing** om 'n **relevante hoeveelheid tyd** te neem wanneer die **antwoord positief of negatief** is en meet daardie tyd.
{% 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 %}
### unload/beforeunload Timing
* **Insluitingsmetodes**: Raamwerke
* **Opmerkbare Verskil**: Tydsberekening (gewoonlik as gevolg van Bladsy-inhoud, Statuskode)
* **Meer inligting**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events)
* **Opsomming:** Die [SharedArrayBuffer-klok](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#sharedarraybuffer-and-web-workers) kan gebruik word om te meet hoeveel tyd dit neem om 'n versoek uit te voer. Ander klokke kan ook gebruik word.
* **Kodevoorbeeld**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events)
Die tyd wat dit neem om 'n hulpbron op te haal, kan gemeet word deur die [`unload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/unload\_event) en [`beforeunload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload\_event) gebeure te gebruik. Die **`beforeunload`**-gebeurtenis word afgevuur wanneer die blaaier besig is om na 'n nuwe bladsy te navigeer, terwyl die **`unload`**-gebeurtenis plaasvind wanneer die navigasie werklik plaasvind. Die tydsverskil tussen hierdie twee gebeure kan bereken word om die **duur te bepaal wat die blaaier spandeer het om die hulpbron op te haal**.
### Sandboxed Frame Timing + onload
* **Insluitingsmetodes**: Raamwerke
* **Opmerkbare Verskil**: Tydsberekening (gewoonlik as gevolg van Bladsy-inhoud, Statuskode)
* **Meer inligting**: [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)
* **Opsomming:** Die [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) API kan gebruik word om te meet hoeveel tyd dit neem om 'n versoek uit te voer. Ander klokke kan ook gebruik word.
* **Kodevoorbeeld**: [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)
Daar is waargeneem dat in die afwesigheid van [Raamwerkbeskerming](https://xsleaks.dev/docs/defenses/opt-in/xfo/), die tyd wat nodig is vir 'n bladsy en sy subhulpbronne om oor die netwerk te laai, deur 'n aanvaller gemeet kan word. Hierdie meting is tipies moontlik omdat die `onload`-hanterer van 'n ifram slegs geaktiveer word nadat die hulpbronlaaiing en JavaScript-uitvoering voltooi is. Om die variasie wat deur skrips uitvoering ingebring word, te omseil, kan 'n aanvaller die [`sandbox`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) eienskap binne die `