Bypassing SOP with Iframes - 2
Iframes in SOP-2
In der Lösung für diese Herausforderung, schlägt @Strellic_ eine ähnliche Methode wie im vorherigen Abschnitt vor. Schauen wir es uns an.
In dieser Herausforderung muss der Angreifer Folgendes umgehen:
Wenn er das tut, kann er eine postmessage mit HTML-Inhalt senden, der ohne Säuberung (XSS) in der Seite mit innerHTML
geschrieben wird.
Die Möglichkeit, die erste Überprüfung zu umgehen, besteht darin, window.calc.contentWindow
auf undefined
und e.source
auf null
zu setzen:
window.calc.contentWindow
ist eigentlichdocument.getElementById("calc")
. Sie könnendocument.getElementById
mit<img name=getElementById />
überschreiben (beachten Sie, dass die Sanitizer-API -hier- nicht so konfiguriert ist, dass sie in ihrem Standardzustand vor DOM-Überschreibungsangriffen schützt).Daher können Sie
document.getElementById("calc")
mit<img name=getElementById /><div id=calc></div>
überschreiben. Dann wirdwindow.calc
zuundefined
.Jetzt müssen wir sicherstellen, dass
e.source
undefined
odernull
ist (weil==
anstelle von===
verwendet wird, istnull == undefined
True
). Dies ist "einfach" zu erreichen. Wenn Sie ein iframe erstellen und eine postMessage daraus senden und das iframe sofort entfernen, wirde.origin
null
sein. Überprüfen Sie den folgenden Code:
Um die zweite Überprüfung des Tokens zu umgehen, sendet man den token
mit dem Wert null
und setzt den Wert von window.token
auf undefined
:
Das Senden des
token
in der postMessage mit dem Wertnull
ist trivial.window.token
wird in der FunktiongetCookie
aufgerufen, diedocument.cookie
verwendet. Beachten Sie, dass jeder Zugriff aufdocument.cookie
auf Seiten mitnull
Ursprung einen Fehler auslöst. Dadurch erhältwindow.token
den Wertundefined
.
Die endgültige Lösung von @terjanq ist die folgende:
Last updated