Bypassing SOP with Iframes - 2
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Iframes in SOP-2
W rozwiązaniu dla tego wyzwania, @Strellic_ proponuje podobną metodę do poprzedniej sekcji. Sprawdźmy to.
W tym wyzwaniu atakujący musi obejść to:
Jeśli tak zrobi, może wysłać postmessage z treścią HTML, która zostanie zapisana na stronie za pomocą innerHTML
bez sanitacji (XSS).
Sposobem na obejście pierwszej kontroli jest ustawienie window.calc.contentWindow
na undefined
i e.source
na null
:
window.calc.contentWindow
to tak naprawdędocument.getElementById("calc")
. Możesz zniszczyćdocument.getElementById
za pomocą<img name=getElementById />
(zauważ, że API Sanitizer -tutaj- nie jest skonfigurowane, aby chronić przed atakami DOM clobbering w swoim domyślnym stanie).Dlatego możesz zniszczyć
document.getElementById("calc")
za pomocą<img name=getElementById /><div id=calc></div>
. Wtedywindow.calc
będzieundefined
.Teraz potrzebujemy, aby
e.source
byłoundefined
lubnull
(ponieważ używane jest==
zamiast===
,null == undefined
jestTrue
). Uzyskanie tego jest "łatwe". Jeśli stworzysz iframe i wyślesz postMessage z niego, a następnie natychmiast usunięsz iframe,e.origin
będzienull
. Sprawdź poniższy kod
Aby obejść drugą kontrolę dotyczącą tokena, należy wysłać token
z wartością null
i ustawić wartość window.token
na undefined
:
Wysłanie
token
w postMessage z wartościąnull
jest trywialne.window.token
w wywołaniu funkcjigetCookie
, która używadocument.cookie
. Należy zauważyć, że jakiekolwiek odwołanie dodocument.cookie
na stronach onull
pochodzeniu wywołuje błąd. Spowoduje to, żewindow.token
będzie miało wartośćundefined
.
Ostateczne rozwiązanie od @terjanq to następujące:
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Last updated