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)
Na solução para este desafio, @Strellic_ propõe um método semelhante à seção anterior. Vamos verificar.
Neste desafio, o atacante precisa bypass isso:
Se ele fizer isso, ele pode enviar um postmessage com conteúdo HTML que será escrito na página com innerHTML
sem sanitização (XSS).
A maneira de contornar a primeira verificação é tornando window.calc.contentWindow
undefined
e e.source
null
:
window.calc.contentWindow
é na verdade document.getElementById("calc")
. Você pode sobrescrever document.getElementById
com <img name=getElementById />
(note que a Sanitizer API -aqui- não está configurada para proteger contra ataques de DOM clobbering em seu estado padrão).
Portanto, você pode sobrescrever document.getElementById("calc")
com <img name=getElementById /><div id=calc></div>
. Então, window.calc
será undefined
.
Agora, precisamos que e.source
seja undefined
ou null
(porque ==
é usado em vez de ===
, null == undefined
é True
). Conseguir isso é "fácil". Se você criar um iframe e enviar um postMessage dele e imediatamente remover o iframe, e.origin
será null
. Verifique o seguinte código
Para contornar a segunda verificação sobre o token, enviamos token
com o valor null
e fazemos o valor de window.token
ser undefined
:
Enviar token
no postMessage com o valor null
é trivial.
window.token
ao chamar a função getCookie
que usa document.cookie
. Note que qualquer acesso a document.cookie
em páginas de origem null
aciona um erro. Isso fará com que window.token
tenha o valor undefined
.
A solução final de @terjanq é a seguinte:
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)