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

57 lines
4.2 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
Zgodnie z tym [**opisem Terjanq**](https://gist.github.com/terjanq/7c1a71b83db5e02253c218765f96a710) dokumenty blob utworzone z null origins są izolowane dla korzyści bezpieczeństwa, co oznacza, że jeśli utrzymasz główną stronę zajętą, strona iframe zostanie wykonana.
2022-10-13 00:56:34 +00:00
W zasadzie w tym wyzwaniu **izolowany iframe jest wykonywany** i tuż **po** jego **załadowaniu** strona **rodzicielska** **wyśle** wiadomość **post** z **flagą**.\
Jednak ta komunikacja postmessage jest **vulnerable to XSS** (**iframe** może wykonywać kod JS).
2022-10-13 00:56:34 +00:00
Dlatego celem atakującego jest **sprawić, aby rodzic utworzył iframe**, ale **przed** tym, jak **rodzic** **wyśle** wrażliwe dane (**flag**), **utrzymać go zajętym** i wysłać **ładunek do iframe**. Gdy **rodzic jest zajęty**, **iframe wykonuje ładunek**, który będzie jakimś JS, który będzie nasłuchiwał na **wiadomość postmessage rodzica i wycieknie flagę**.\
Na koniec, iframe wykonał ładunek, a strona rodzicielska przestaje być zajęta, więc wysyła flagę, a ładunek ją wycieka.
2022-10-13 00:56:34 +00:00
Ale jak możesz sprawić, aby rodzic był **zajęty tuż po tym, jak wygenerował iframe i tylko podczas gdy czeka na gotowość iframe do wysłania wrażliwych danych?** W zasadzie musisz znaleźć **asynchroniczną** **akcję**, którą możesz sprawić, aby rodzic **wykonał**. Na przykład, w tym wyzwaniu rodzic **nasłuchiwał** na **postmessages** w ten sposób:
2022-10-13 00:56:34 +00:00
```javascript
window.addEventListener('message', (e) => {
2024-02-11 01:46:25 +00:00
if (e.data == 'blob loaded') {
$("#previewModal").modal();
}
2022-10-13 00:56:34 +00:00
});
```
więc możliwe było wysłanie **dużej liczby całkowitej w postmessage**, która zostanie **przekonwertowana na ciąg** w tym porównaniu, co zajmie trochę czasu:
2022-10-13 00:56:34 +00:00
```bash
const buffer = new Uint8Array(1e7);
win?.postMessage(buffer, '*', [buffer.buffer]);
```
Aby być precyzyjnym i **wysłać** ten **postmessage** tuż **po** utworzeniu **iframe**, ale **przed** tym, jak będzie **gotowy** do odbioru danych od rodzica, będziesz musiał **bawić się milisekundami w `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 %}