# 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 sa htARTE (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 ` ``` ### #ID + greška + onload * **Metode uključivanja**: Okviri * **Detektovana razlika**: Sadržaj stranice * **Više informacija**: * **Sažetak**: Ako možete da izazovete grešku na stranici kada se pristupi ispravnom sadržaju i da je pravilno učitate kada se pristupi bilo kom sadržaju, tada možete napraviti petlju za izvlačenje svih informacija bez merenja vremena. * **Primer koda**: Pretpostavimo da možete **ubaciti** **stranicu** koja ima **tajni** sadržaj **unutar Iframe-a**. Možete **naterati žrtvu da traži** datoteku koja sadrži "_**flag**_" koristeći **Iframe** (na primer, iskorišćavajući CSRF). Unutar Iframe-a znate da će se _**onload događaj**_ **uvek izvršiti barem jednom**. Zatim možete **promeniti** **URL** Iframe-a, ali menjajući samo **sadržaj** **hash-a** unutar URL-a. Na primer: 1. **URL1**: www.napadac.com/xssearch#probaj1 2. **URL2**: www.napadac.com/xssearch#probaj2 Ako je prvi URL **uspešno učitan**, tada, kada se **promeni** **hash** dela URL-a, **onload** događaj **neće biti ponovo pokrenut**. Ali **ako** je stranica imala neku vrstu **greške** prilikom **učitavanja**, tada će se **onload** događaj ponovo **pokrenuti**. Tako možete **razlikovati** između **ispravno** učitane stranice ili stranice koja ima **grešku** prilikom pristupa. ### Izvršenje JavaScript-a * **Metode uključivanja**: Okviri * **Detektovana razlika**: Sadržaj stranice * **Više informacija**: * **Sažetak**: Ako **stranica** vraća **osetljiv** sadržaj, **ili** sadržaj koji može biti **kontrolisan** od strane korisnika. Korisnik može postaviti **validan JS kod u negativnom slučaju**, i **učitati** svaki pokušaj unutar **`