Blocking main page to steal postmessage
Reading time: 3 minutes
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Winning RCs with Iframes
Laut diesem Terjanq writeup sind Blob-Dokumente, die aus null Ursprüngen erstellt werden, aus Sicherheitsgründen isoliert, was bedeutet, dass, wenn Sie die Hauptseite beschäftigt halten, die Iframe-Seite ausgeführt wird.
Im Grunde wird in dieser Herausforderung ein isoliertes Iframe ausgeführt und direkt nachdem es geladen wurde, wird die Eltern-Seite eine post-Nachricht mit dem Flag senden.
Diese postmessage-Kommunikation ist jedoch anfällig für XSS (das iframe kann JS-Code ausführen).
Daher ist das Ziel des Angreifers, die Elternseite das Iframe erstellen zu lassen, aber bevor die Eltern-Seite die sensiblen Daten (Flag) sendet, sie beschäftigt zu halten und die Payload an das Iframe zu senden. Während die Elternseite beschäftigt ist, führt das Iframe die Payload aus, die ein JS sein wird, das auf die postmessage-Nachricht der Elternseite hört und das Flag leakt.
Schließlich hat das Iframe die Payload ausgeführt und die Elternseite hört auf, beschäftigt zu sein, sodass sie das Flag sendet und die Payload es leakt.
Aber wie könnten Sie die Elternseite beschäftigt halten, direkt nachdem sie das Iframe generiert hat und nur während sie darauf wartet, dass das Iframe bereit ist, die sensiblen Daten zu senden? Im Grunde müssen Sie eine asynchrone Aktion finden, die Sie die Elternseite ausführen lassen können. Zum Beispiel hörte die Elternseite in dieser Herausforderung auf postmessages wie folgt:
window.addEventListener("message", (e) => {
if (e.data == "blob loaded") {
$("#previewModal").modal()
}
})
Es war also möglich, eine große Ganzzahl in einer postmessage zu senden, die in diesem Vergleich in einen String umgewandelt wird, was einige Zeit in Anspruch nehmen wird:
const buffer = new Uint8Array(1e7);
win?.postMessage(buffer, '*', [buffer.buffer]);
Und um genau zu sein und die postmessage genau nach der Erstellung des iframe aber vor dem Bereitsein, um die Daten vom Elternteil zu empfangen, müssen Sie mit den Millisekunden eines setTimeout
spielen.
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.