Bypassing SOP with Iframes - 2
Iframes dans SOP-2
Dans la solution de ce challenge, @Strellic_ propose une méthode similaire à la section précédente. Vérifions cela.
Dans ce défi, l'attaquant doit contourner ceci:
Si c'est le cas, il peut envoyer un postmessage avec du contenu HTML qui sera écrit dans la page avec innerHTML
sans assainissement (XSS).
La façon de contourner le premier contrôle est de définir window.calc.contentWindow
sur undefined
et e.source
sur null
:
window.calc.contentWindow
est en faitdocument.getElementById("calc")
. Vous pouvez écraserdocument.getElementById
avec<img name=getElementById />
(notez que l'API Sanitizer -ici- n'est pas configurée pour protéger contre les attaques de substitution de DOM dans son état par défaut).Par conséquent, vous pouvez écraser
document.getElementById("calc")
avec<img name=getElementById /><div id=calc></div>
. Ensuite,window.calc
seraundefined
.Maintenant, nous devons faire en sorte que
e.source
soitundefined
ounull
(car==
est utilisé au lieu de===
,null == undefined
estTrue
). Obtenir cela est "facile". Si vous créez un iframe et envoyez un postMessage depuis celui-ci et retirez immédiatement l'iframe,e.origin
seranull
. Vérifiez le code suivant
Pour contourner le deuxième contrôle concernant le jeton, il suffit d'envoyer token
avec la valeur null
et de définir la valeur de window.token
sur undefined
:
Envoyer
token
dans le postMessage avec la valeurnull
est trivial.window.token
appelle la fonctiongetCookie
qui utilisedocument.cookie
. Notez que tout accès àdocument.cookie
dans les pages d'originenull
déclenche une erreur. Cela fera en sorte quewindow.token
ait la valeurundefined
.
La solution finale proposée par @terjanq est la suivante :
Last updated