Bypassing SOP with Iframes - 2
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 rešenju za ovaj izazov, @Strellic_ predlaže sličnu metodu kao u prethodnom odeljku. Hajde da proverimo.
U ovom izazovu napadač treba da bypass ovo:
Ako to učini, može poslati postmessage sa HTML sadržajem koji će biti napisan na stranici sa innerHTML
bez sanitizacije (XSS).
Način da se zaobiđe prva provera je da se window.calc.contentWindow
postavi na undefined
i e.source
na null
:
window.calc.contentWindow
je zapravo document.getElementById("calc")
. Možete prebrisati document.getElementById
sa <img name=getElementById />
(napomena da Sanitizer API -ovde- nije konfiguran da štiti od DOM clobbering napada u svom podrazumevanom stanju).
Stoga, možete prebrisati document.getElementById("calc")
sa <img name=getElementById /><div id=calc></div>
. Tada će window.calc
biti undefined
.
Sada, potrebno je da e.source
bude undefined
ili null
(jer se koristi ==
umesto ===
, null == undefined
je True
). Dobijanje ovoga je "lako". Ako kreirate iframe i pošaljete postMessage iz njega i odmah uklonite iframe, e.origin
će biti null
. Proverite sledeći kod
Da bi se zaobišao drugi proveren o tokenu, potrebno je poslati token
sa vrednošću null
i postaviti vrednost window.token
na undefined
:
Slanje token
u postMessage sa vrednošću null
je trivijalno.
window.token
se koristi u pozivu funkcije getCookie
koja koristi document.cookie
. Imajte na umu da svaki pristup document.cookie
na stranicama sa null
poreklom izaziva grešku. Ovo će učiniti da window.token
ima vrednost undefined
.
Konačno rešenje od @terjanq je sledeće:
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)