Bypassing SOP with Iframes - 2
Iframes in SOP-2
Nella soluzione per questa sfida, @Strellic_ propone un metodo simile alla sezione precedente. Vediamolo.
In questa sfida l'attaccante deve eludere questo:
Se lo fa, può inviare un postmessage con contenuto HTML che verrà scritto nella pagina con innerHTML
senza sanificazione (XSS).
Il modo per aggirare il primo controllo è rendere window.calc.contentWindow
uguale a undefined
e e.source
uguale a null
:
window.calc.contentWindow
è in realtàdocument.getElementById("calc")
. Puoi sovrascriveredocument.getElementById
con<img name=getElementById />
(nota che l'API Sanitizer -qui- non è configurata per proteggere contro attacchi di sovrascrittura del DOM nel suo stato predefinito).Pertanto, puoi sovrascrivere
document.getElementById("calc")
con<img name=getElementById /><div id=calc></div>
. Quindi,window.calc
saràundefined
.Ora, abbiamo bisogno che
e.source
siaundefined
onull
(perché viene utilizzato==
invece di===
,null == undefined
èTrue
). Ottenere questo è "facile". Se crei un iframe e invii un postMessage da esso e immediatamente rimuovi l'iframe,e.origin
sarànull
. Controlla il seguente codice
Per aggirare il secondo controllo sul token, è possibile inviare il token
con valore null
e impostare il valore di window.token
su undefined
:
L'invio del
token
tramite postMessage con valorenull
è banale.window.token
viene richiamato dalla funzionegetCookie
che utilizzadocument.cookie
. Si noti che qualsiasi accesso adocument.cookie
nelle pagine di originenull
genera un errore. Ciò farà sì chewindow.token
abbia valoreundefined
.
La soluzione finale proposta da @terjanq è la seguente:
Last updated