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

56 lines
5.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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)
<details>
<summary>Support HackTricks</summary>
* 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.
</details>
{% endhint %}
## Winning RCs with Iframes
Згідно з цим [**Terjanq writeup**](https://gist.github.com/terjanq/7c1a71b83db5e02253c218765f96a710) блоб-документи, створені з нульових джерел, ізольовані для безпеки, що означає, що якщо ви зайняті основною сторінкою, сторінка iframe буде виконана.
В основному, у цьому виклику **ізольований iframe виконується** і відразу **після** його **завантаження** **батьківська** сторінка **надішле** повідомлення **post** з **флагом**.\
Однак ця комунікація postmessage є **вразливою до XSS** (**iframe** може виконувати JS-код).
Отже, мета зловмисника полягає в тому, щоб **дозволити батьківській сторінці створити iframe**, але **перед тим**, як **батьківська** сторінка **надішле** чутливі дані (**флаг**), **тримати її зайнятою** і надіслати **payload до iframe**. Поки **батьківська сторінка зайнята**, **iframe виконує payload**, який буде деяким JS, що слухатиме **повідомлення postmessage батьківської сторінки і витікатиме флаг**.\
Нарешті, iframe виконав payload, і батьківська сторінка перестає бути зайнятою, тому вона надсилає флаг, а payload його витікає.
Але як ви могли б змусити батьківську сторінку бути **зайнятою відразу після того, як вона згенерувала iframe і лише поки чекає, щоб iframe був готовий надіслати чутливі дані?** В основному, вам потрібно знайти **асинхронну** **дію**, яку ви могли б змусити батьківську сторінку **виконати**. Наприклад, у цьому виклику батьківська сторінка **слухала** **postmessages** ось так:
```javascript
window.addEventListener('message', (e) => {
if (e.data == 'blob loaded') {
$("#previewModal").modal();
}
});
```
тому було можливо надіслати **велике ціле число в postmessage**, яке буде **перетворено на рядок** в цьому порівнянні, що займе деякий час:
```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)
<details>
<summary>Support HackTricks</summary>
* 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.
</details>
{% endhint %}