hacktricks/pentesting-web/postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md
2024-02-10 13:03:23 +00:00

4.6 KiB

Bloccare la pagina principale per rubare postmessage

Impara l'hacking di AWS da zero a esperto con htARTE (HackTricks AWS Red Team Expert)!

Vincere RC con Iframes

Secondo questo articolo di Terjanq i blob dei documenti creati da origini nulle sono isolati per motivi di sicurezza, il che significa che se mantieni occupata la pagina principale, la pagina iframe verrà eseguita.

In sostanza, in quella sfida viene eseguita un'iframe isolata e subito dopo che è caricata, la pagina principale invia un messaggio post con la flag.
Tuttavia, questa comunicazione postmessage è vulnerabile a XSS (l'iframe può eseguire codice JS).

Pertanto, l'obiettivo dell'attaccante è far sì che il genitore crei l'iframe, ma prima di farlo, far sì che la pagina genitore invii i dati sensibili (flag) mantenendola occupata e inviando il payload all'iframe. Mentre il genitore è occupato, l'iframe esegue il payload che sarà un po' di codice JS che ascolterà il messaggio postmessage del genitore e ruberà la flag.
Infine, l'iframe ha eseguito il payload e la pagina genitore smette di essere occupata, quindi invia la flag e il payload la ruba.

Ma come potresti far sì che il genitore sia occupato subito dopo aver generato l'iframe e solo mentre aspetta che l'iframe sia pronto per inviare i dati sensibili? Fondamentalmente, devi trovare un'azione asincrona che il genitore possa eseguire. Ad esempio, in quella sfida il genitore stava ascoltando i messaggi post in questo modo:

window.addEventListener('message', (e) => {
if (e.data == 'blob loaded') {
$("#previewModal").modal();
}
});

Quindi era possibile inviare un grande intero in un postmessage che verrà convertito in stringa in quel confronto, il quale richiederà del tempo:

const buffer = new Uint8Array(1e7);
win?.postMessage(buffer, '*', [buffer.buffer]);

E per essere precisi e inviare quel postmessage subito dopo che l'iframe viene creato ma prima che sia pronto per ricevere i dati dal genitore, sarà necessario giocare con i millisecondi di un setTimeout.

Impara l'hacking di AWS da zero a esperto con htARTE (HackTricks AWS Red Team Expert)!