hacktricks/pentesting-web/postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md

57 lines
4.4 KiB
Markdown
Raw Normal View History

# Blocking main page to steal postmessage
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-10-13 00:56:34 +00:00
<details>
<summary>Support HackTricks</summary>
2022-10-13 00:56:34 +00:00
* 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.
2022-10-13 00:56:34 +00:00
</details>
{% endhint %}
2022-10-13 00:56:34 +00:00
## Winning RCs with Iframes
2022-10-13 00:56:34 +00:00
이 [**Terjanq writeup**](https://gist.github.com/terjanq/7c1a71b83db5e02253c218765f96a710)에 따르면, null origin에서 생성된 blob 문서는 보안상의 이점으로 격리되어 있으며, 이는 메인 페이지가 바쁘면 iframe 페이지가 실행된다는 것을 의미합니다.
2022-10-13 00:56:34 +00:00
기본적으로 이 도전에서 **격리된 iframe이 실행**되고 바로 **로드된 후** **부모** 페이지가 **플래그**와 함께 **post** 메시지를 **보냅니다**.\
그러나 그 postmessage 통신은 **XSS에 취약**합니다( **iframe**이 JS 코드를 실행할 수 있습니다).
2022-10-13 00:56:34 +00:00
따라서 공격자의 목표는 **부모가 iframe을 생성하게** 하되, **부모** 페이지가 **민감한 데이터(플래그)**를 **보내기 전에** **바쁘게 유지**하고 **payload를 iframe으로 보내는** 것입니다. **부모가 바쁠 때** **iframe은 payload를 실행**하며, 이는 **부모 postmessage 메시지를 듣고 플래그를 유출하는** JS가 될 것입니다.\
마지막으로, iframe이 payload를 실행하고 부모 페이지가 바쁘지 않게 되면, 플래그를 보내고 payload가 이를 유출합니다.
2022-10-13 00:56:34 +00:00
하지만 부모가 **iframe을 생성한 직후에 바쁘게 만들고, 민감한 데이터를 보내기 위해 iframe이 준비되기를 기다리는 동안 어떻게 할 수 있을까요?** 기본적으로 부모가 **실행할 수 있는** **비동기** **작업**을 찾아야 합니다. 예를 들어, 이 도전에서 부모는 다음과 같이 **postmessages**를 **듣고** 있었습니다:
2022-10-13 00:56:34 +00:00
```javascript
window.addEventListener('message', (e) => {
2024-02-10 21:30:13 +00:00
if (e.data == 'blob loaded') {
$("#previewModal").modal();
}
2022-10-13 00:56:34 +00:00
});
```
그래서 **postmessage**에서 **큰 정수를 보내는** 것이 가능했으며, 이는 그 비교에서 **문자열로 변환될** 것이고, 시간이 좀 걸릴 것입니다:
2022-10-13 00:56:34 +00:00
```bash
const buffer = new Uint8Array(1e7);
win?.postMessage(buffer, '*', [buffer.buffer]);
```
정확하게 **postmessage**를 **iframe**이 생성된 **후**에, 그러나 부모로부터 데이터를 받을 준비가 **되기 전에** **setTimeout**의 밀리초를 **조정**해야 합니다.
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-10-13 00:56:34 +00:00
<details>
<summary>Support HackTricks</summary>
2022-10-13 00:56:34 +00:00
* 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.
2022-10-13 00:56:34 +00:00
</details>
{% endhint %}