# XS-Pretraga/XS-Procuri
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da lako izgradite i **automatizujete radne tokove** pokretane najnaprednijim alatima zajednice.\
Pristupite danas:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Naučite hakovanje AWS-a od nule do heroja sahtARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** Proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podelite svoje hakovanje trikova slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
## Osnovne Informacije
XS-Pretraga je metoda korišćena za **izvlačenje informacija preko granica porekla** iskorišćavanjem **ranjivosti bočnog kanala**.
Ključni komponenti uključeni u ovaj napad su:
* **Ranjiva Veb Stranica**: Ciljna veb stranica sa koje se namerava izvući informacija.
* **Veb Napadača**: Zlonamerna veb stranica kreirana od strane napadača, koju žrtva posećuje, na kojoj se nalazi eksploatacija.
* **Metod Uključivanja**: Tehnika koja se koristi za uključivanje Ranjive Veb Stranice u Veb Napadača (npr. window.open, iframe, fetch, HTML oznaka sa href, itd.).
* **Tehnika Procurenja**: Tehnike korišćene za razlikovanje razlika u stanju Ranjive Veb Stranice na osnovu informacija prikupljenih putem metoda uključivanja.
* **Stanja**: Dva potencijalna stanja Ranjive Veb Stranice, koja napadač pokušava razlikovati.
* **Detektovive Razlike**: Opservabilne varijacije na koje se napadač oslanja da bi zaključio stanje Ranjive Veb Stranice.
### Detektovive Razlike
Neke aspekte mogu se analizirati radi razlikovanja stanja Ranjive Veb Stranice:
* **Statusni Kod**: Razlikovanje između **različitih HTTP odgovora statusnih kodova** preko granica porekla, kao što su serverske greške, klijentske greške ili autentikacione greške.
* **Korišćenje API-ja**: Identifikacija **korišćenja Web API-ja** preko stranica, otkrivajući da li preko granica porekla stranica koristi određeni JavaScript Web API.
* **Preusmeravanja**: Detektovanje navigacija ka različitim stranicama, ne samo HTTP preusmeravanja već i onih pokrenutih JavaScript-om ili HTML-om.
* **Sadržaj Stranice**: Opservacija **varijacija u telu HTTP odgovora** ili u pod-resursima stranice, kao što su **broj ugrađenih okvira** ili dispariteti u veličini slika.
* **HTTP Zaglavlje**: Primećivanje prisustva ili možda vrednosti **specifičnog HTTP odgovora zaglavlja**, uključujući zaglavlja poput X-Frame-Options, Content-Disposition, i Cross-Origin-Resource-Policy.
* **Vreme**: Primećivanje konzistentnih vremenskih dispariteta između dva stanja.
### Metodi Uključivanja
* **HTML Elementi**: HTML nudi različite elemente za **uključivanje resursa preko granica porekla**, poput stilova, slika ili skripti, prisiljavajući pregledač da zatraži ne-HTML resurs. Kompilacija potencijalnih HTML elemenata u tu svrhu može se pronaći na [https://github.com/cure53/HTTPLeaks](https://github.com/cure53/HTTPLeaks).
* **Okviri**: Elementi poput **iframe**, **object**, i **embed** mogu ugraditi HTML resurse direktno na stranicu napadača. Ako stranica **nema zaštitu okvira**, JavaScript može pristupiti window objektu ugrađenog resursa putem contentWindow svojstva.
* **Iskačući Prozori**: Metoda **`window.open`** otvara resurs u novom tabu ili prozoru, pružajući **ručku prozora** za JavaScript da interaguje sa metodama i svojstvima prateći SOP. Iskačući prozori, često korišćeni u jednokratnoj prijavi, zaobilaze ograničenja okvira i kolačića ciljnog resursa. Međutim, moderni pregledači ograničavaju kreiranje iskačućih prozora na određene korisničke akcije.
* **JavaScript Zahtevi**: JavaScript dozvoljava direktno zahteve ka ciljnim resursima korišćenjem **XMLHttpRequests** ili **Fetch API-ja**. Ove metode nude preciznu kontrolu nad zahtevom, kao što je opcija praćenja HTTP preusmeravanja.
### Tehnike Procurenja
* **Rukovalac Događajima**: Klasika tehnika procurenja u XS-Procurama, gde rukovaoci događajima poput **onload** i **onerror** pružaju uvide o uspehu ili neuspehu učitavanja resursa.
* **Poruke o Greškama**: JavaScript izuzeci ili posebne stranice grešaka mogu pružiti informacije o procurivanju ili razlikovanju između prisustva i odsustva greške.
* **Globalna Ograničenja**: Fizička ograničenja pregledača, poput kapaciteta memorije ili drugih nametnutih ograničenja pregledača, mogu signalizirati kada je dostignut prag, služeći kao tehnika procurivanja.
* **Globalno Stanje**: Detektovive interakcije sa **globalnim stanjima pregledača** (npr. History interfejs) mogu biti iskorišćene. Na primer, **broj unosa** u istoriju pregledača može pružiti tragove o stranicama preko granica porekla.
* **Performance API**: Ovaj API pruža **detalje o performansama trenutne stranice**, uključujući mrežno vreme za dokument i učitane resurse, omogućavajući zaključke o traženim resursima.
* **Čitljivi Atributi**: Neki HTML atributi su **čitljivi preko granica porekla** i mogu se koristiti kao tehnika procurivanja. Na primer, svojstvo `window.frame.length` omogućava JavaScript-u da prebroji okvire uključene na stranici preko granica porekla.
## XSinator Alat & Rad
XSinator je automatski alat za **proveru pregledača protiv nekoliko poznatih XS-Procura** objašnjenih u njegovom radu: [**https://xsinator.com/paper.pdf**](https://xsinator.com/paper.pdf)
Možete **pristupiti alatu na** [**https://xsinator.com/**](https://xsinator.com/)
{% hint style="warning" %}
**Isključeni XS-Procuri**: Morali smo isključiti XS-Procuri koji se oslanjaju na **servisne radnike** jer bi ometali druge procure u XSinatoru. Takođe, odlučili smo da **isključimo XS-Procuri koji se oslanjaju na loše konfiguracije i greške u određenoj veb aplikaciji**. Na primer, CrossOrigin Resource Sharing (CORS) loše konfiguracije, postMessage procurivanje ili Cross-Site Scripting. Dodatno, isključili smo vremenski zasnovane XS-Procuri jer često imaju problema sa sporim, bučnim i netačnim rezultatima.
{% endhint %}
\
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da lako izgradite i **automatizujete radne tokove** pokretane najnaprednijim alatima zajednice.\
Pristupite danas:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## **Tehnike zasnovane na vremenu**
Neke od sledećih tehnika koristiće vreme kao deo procesa za otkrivanje razlika u mogućim stanjima web stranica. Postoje različiti načini merenja vremena u web pregledaču.
**Satovi**: API [performance.now()](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) omogućava programerima da dobiju merenja visoke rezolucije vremena.\
Postoji značajan broj API-ja koje napadači mogu zloupotrebiti kako bi kreirali implicitne satove: [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 animacije i drugi.\
Za više informacija: [https://xsleaks.dev/docs/attacks/timing-attacks/clocks](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/).
## Tehnike rukovaoca događajima
### Onload/Onerror
* **Metodi uključivanja**: Okviri, HTML elementi
* **Detektovana razlika**: Kod statusa
* **Više informacija**: [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/)
* **Rezime**: ako se pokuša učitavanje resursa i događaji onerror/onload se pokrenu kada se resurs uspešno/neuspešno učita, moguće je saznati kod statusa.
* **Primer koda**: [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 %}
Primer koda pokušava da **učita objekte skriptova iz JS-a**, ali se **drugi tagovi** poput objekata, stilova, slika, zvukova takođe mogu koristiti. Takođe, moguće je direktno ubaciti **tag** i deklarisati događaje `onload` i `onerror` unutar taga (umesto da se ubacuje iz JS-a).
Postoji i verzija ovog napada bez skripti:
```html
```
U ovom slučaju, ako se `example.com/404` ne pronađe, učitaće se `attacker.com/?error`.
### Vreme učitavanja
* **Metode uključivanja**: HTML elementi
* **Detektibilna razlika**: Vreme (obično zbog sadržaja stranice, statusnog koda)
* **Više informacija**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events)
* **Rezime:** [**performance.now()**](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) **API** se može koristiti za merenje vremena potrebnog za izvršavanje zahteva. Međutim, mogu se koristiti i drugi časovnici, poput [**PerformanceLongTaskTiming API**](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongTaskTiming) koji može identifikovati zadatke koji se izvršavaju duže od 50ms.
* **Primer koda**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) još jedan primer u:
{% content-ref url="xs-search/performance.now-example.md" %}
[performance.now-example.md](xs-search/performance.now-example.md)
{% endcontent-ref %}
#### Vreme učitavanja + Prisilni težak zadatak
Ova tehnika je slična prethodnoj, ali će **napadač** takođe **prisiliti** neku akciju da traje **relevantno dugo vreme** kada je **odgovor pozitivan ili negativan** i meriti to vreme.
{% 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 %}
### Vreme istovara/pre istovara
* **Metode uključivanja**: Frejmovi
* **Detektibilna razlika**: Vreme (obično zbog sadržaja stranice, statusnog koda)
* **Više informacija**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events)
* **Rezime:** [SharedArrayBuffer časovnik](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#sharedarraybuffer-and-web-workers) se može koristiti za merenje vremena potrebnog za izvršavanje zahteva. Mogu se koristiti i drugi časovnici.
* **Primer koda**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events)
Vreme potrebno za preuzimanje resursa može se meriti korišćenjem događaja [`unload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/unload\_event) i [`beforeunload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload\_event). Događaj **`beforeunload`** se pokreće kada se pregledač sprema da pređe na novu stranicu, dok se događaj **`unload`** dešava kada se navigacija zapravo odvija. Razlika u vremenu između ova dva događaja može se izračunati kako bi se odredilo **koliko je vremena pregledač proveo preuzimajući resurs**.
### Vreme frejma sa peskom + učitavanje
* **Metode uključivanja**: Frejmovi
* **Detektibilna razlika**: Vreme (obično zbog sadržaja stranice, statusnog koda)
* **Više informacija**: [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)
* **Rezime:** [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) API se može koristiti za merenje vremena potrebnog za izvršavanje zahteva. Mogu se koristiti i drugi časovnici.
* **Primer koda**: [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)
Primećeno je da u odsustvu [Zaštitnih okvira](https://xsleaks.dev/docs/defenses/opt-in/xfo/), vreme potrebno za učitavanje stranice i njenih podresursa preko mreže može biti mereno od strane napadača. Ovo merenje je obično moguće jer se `onload` rukovalac iframe-a pokreće tek nakon završetka učitavanja resursa i izvršavanja JavaScript-a. Da bi zaobišli varijabilnost koju uvodi izvršavanje skripti, napadač može koristiti atribut [`sandbox`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) unutar `