Bypassing SOP with Iframes - 1
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
U ovom izazovu koji su kreirali NDevTK i Terjanq potrebno je da iskoristite XSS u kodiranom
Glavni problem je što glavna stranica koristi DomPurify za slanje data.body
, tako da da biste poslali svoje vlastite html podatke u taj kod, morate bypass e.origin !== window.origin
.
Hajde da vidimo rešenje koje predlažu.
Kada je //example.org
ugrađen u sandboxed iframe, tada će origin stranice biti null
, tj. window.origin === null
. Tako da samo ugrađivanjem iframe-a putem <iframe sandbox="allow-scripts" src="https://so-xss.terjanq.me/iframe.php">
možemo prisiliti null
origin.
Ako je stranica bila embeddable, mogli biste na taj način zaobići tu zaštitu (kolačići takođe mogu biti postavljeni na SameSite=None
).
Manje poznata činjenica je da kada je sandbox vrednost allow-popups
postavljena, tada će otvoreni popup naslediti sve sandboxed atribute osim ako nije postavljeno allow-popups-to-escape-sandbox
.
Dakle, otvaranje popupa iz null origin će učiniti da window.origin
unutar popupa takođe bude null
.
Stoga, za ovaj izazov, moglo bi se napraviti iframe, otvoriti popup na stranicu sa ranjivim XSS kodom (/iframe.php
), pošto je window.origin === e.origin
jer su oba null
, moguće je poslati payload koji će iskoristiti XSS.
Taj payload će dobiti identifikator i poslati XSS nazad na glavnu stranicu (stranicu koja je otvorila popup), koja će promeniti lokaciju na ranjivi /iframe.php
. Pošto je identifikator poznat, nije važno što uslov window.origin === e.origin
nije zadovoljen (zapamtite, origin je popup iz iframe-a koji ima origin null
) jer data.identifier === identifier
. Tada će se XSS ponovo aktivirati, ovaj put u ispravnom originu.
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)