Bypassing SOP with Iframes - 2
Iframe-ovi u SOP-2
U rešenju za ovaj izazov, @Strellic_ predlaže sličnu metodu kao u prethodnom odeljku. Hajde da proverimo.
U ovom izazovu napadaču je potrebno zaobići ovo:
Ako to uradi, može poslati postmessage sa HTML sadržajem koji će biti upisan na stranici sa innerHTML
bez sanitizacije (XSS).
Način za zaobilaženje prve provere je da se window.calc.contentWindow
postavi na undefined
i e.source
na null
:
window.calc.contentWindow
zapravo predstavljadocument.getElementById("calc")
. Možete zamenitidocument.getElementById
sa<img name=getElementById />
(napomena: Sanitizer API -ovde- nije konfigurisan da zaštiti od napada na DOM zamenu u svom podrazumevanom stanju).Zato možete zameniti
document.getElementById("calc")
sa<img name=getElementById /><div id=calc></div>
. Tada ćewindow.calc
bitiundefined
.Sada nam je potrebno da
e.source
budeundefined
ilinull
(jer se koristi==
umesto===
,null == undefined
jeTrue
). Ovo je "jednostavno" postići. Ako kreirate iframe i pošaljete postMessage iz njega i odmah ga uklonite,e.origin
će bitinull
. Pogledajte sledeći kod.
Da biste zaobišli drugu provjeru u vezi tokena, pošaljite token
sa vrijednošću null
i postavite vrijednost window.token
na undefined
:
Slanje
tokena
u postMessage sa vrijednošćunull
je jednostavno.window.token
se poziva u funkcijigetCookie
koja koristidocument.cookie
. Napomena da svaki pristupdocument.cookie
na stranicama sanull
porijeklom izaziva grešku. To će rezultirati dawindow.token
ima vrijednostundefined
.
Konačno rješenje od @terjanq je sljedeće:
Last updated