mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-24 13:43:24 +00:00
56 lines
5.4 KiB
Markdown
56 lines
5.4 KiB
Markdown
# 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 %}
|