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)
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>
. Wtedy window.calc
będzie undefined
.
Teraz potrzebujemy, aby e.source
było undefined
lub null
(ponieważ używane jest ==
zamiast ===
, null == undefined
jest True
). Uzyskanie tego jest "łatwe". Jeśli stworzysz iframe i wyślesz postMessage z niego, a następnie natychmiast usunięsz iframe, e.origin
będzie null
. 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 funkcji getCookie
, która używa document.cookie
. Należy zauważyć, że jakiekolwiek odwołanie do document.cookie
na stronach o null
pochodzeniu wywołuje błąd. Spowoduje to, że window.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)