# Bypassing SOP with Iframes - 2
{% hint style="success" %}
Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 馃挰 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 馃惁 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}
## Iframes in SOP-2
En la [**soluci贸n**](https://github.com/project-sekai-ctf/sekaictf-2022/tree/main/web/obligatory-calc/solution) para este [**desaf铆o**](https://github.com/project-sekai-ctf/sekaictf-2022/tree/main/web/obligatory-calc)**,** [**@Strellic\_**](https://twitter.com/Strellic\_) propone un m茅todo similar a la secci贸n anterior. Vamos a revisarlo.
En este desaf铆o, el atacante necesita **bypassar** esto:
```javascript
if (e.source == window.calc.contentWindow && e.data.token == window.token) {
```
Si lo hace, puede enviar un **postmessage** con contenido HTML que se va a escribir en la p谩gina con **`innerHTML`** sin saneamiento (**XSS**).
La forma de eludir la **primera verificaci贸n** es haciendo que **`window.calc.contentWindow`** sea **`undefined`** y **`e.source`** sea **`null`**:
* **`window.calc.contentWindow`** es en realidad **`document.getElementById("calc")`**. Puede sobrescribir **`document.getElementById`** con **``** (tenga en cuenta que la API de Saneamiento -[aqu铆](https://wicg.github.io/sanitizer-api/#dom-clobbering)- no est谩 configurada para proteger contra ataques de sobrescritura de DOM en su estado predeterminado).
* Por lo tanto, puede sobrescribir **`document.getElementById("calc")`** con **`
`**. Luego, **`window.calc`** ser谩 **`undefined`**.
* Ahora, necesitamos que **`e.source`** sea **`undefined`** o **`null`** (porque se usa `==` en lugar de `===`, **`null == undefined`** es **`True`**). Obtener esto es "f谩cil". Si crea un **iframe** y **env铆a** un **postMessage** desde 茅l y luego **elimina** el iframe, **`e.origin`** ser谩 **`null`**. Verifique el siguiente c贸digo
```javascript
let iframe = document.createElement('iframe');
document.body.appendChild(iframe);
window.target = window.open("http://localhost:8080/");
await new Promise(r => setTimeout(r, 2000)); // wait for page to load
iframe.contentWindow.eval(`window.parent.target.postMessage("A", "*")`);
document.body.removeChild(iframe); //e.origin === null
```
Para eludir la **segunda verificaci贸n** sobre el token, se env铆a **`token`** con el valor `null` y se hace que el valor de **`window.token`** sea **`undefined`**:
* Enviar `token` en el postMessage con el valor `null` es trivial.
* **`window.token`** al llamar a la funci贸n **`getCookie`** que utiliza **`document.cookie`**. Tenga en cuenta que cualquier acceso a **`document.cookie`** en p谩ginas de origen **`null`** provoca un **error**. Esto har谩 que **`window.token`** tenga un valor de **`undefined`**.
La soluci贸n final de [**@terjanq**](https://twitter.com/terjanq) es la [**siguiente**](https://gist.github.com/terjanq/0bc49a8ef52b0e896fca1ceb6ca6b00e#file-calc-html):
```html
```
{% hint style="success" %}
Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Apoya a HackTricks
* Revisa los [**planes de suscripci贸n**](https://github.com/sponsors/carlospolop)!
* **脷nete al** 馃挰 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **s铆guenos** en **Twitter** 馃惁 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
{% endhint %}