Blocking main page to steal postmessage

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Κερδίζοντας RCs με Iframes

Σύμφωνα με αυτό το Terjanq writeup τα αρχεία blob που δημιουργούνται από μηδενικές προέλευσεις είναι απομονωμένα για λόγους ασφαλείας, πράγμα που σημαίνει ότι αν διατηρήσετε απασχολημένη την κύρια σελίδα, η σελίδα iframe θα εκτελεστεί.

Βασικά, σε αυτήν την πρόκληση ένα απομονωμένο iframe εκτελείται και αμέσως μετά την φόρτωσή του η γονική σελίδα θα στείλει ένα μήνυμα post με την σημαία. Ωστόσο, αυτή η επικοινωνία postmessage είναι ευάλωτη σε XSS (το iframe μπορεί να εκτελέσει κώδικα JS).

Επομένως, ο στόχος του επιτιθέμενου είναι να επιτρέψει στη γονική να δημιουργήσει το iframe, αλλά πριν από αυτό ας κρατήσει απασχολημένη τη γονική σελίδα και να στείλει τα ευαίσθητα δεδομένα (σημαία) στο iframe. Ενώ η γονική είναι απασχολημένη, το iframe εκτελεί το φορτίο που θα είναι κάποιος κώδικας JS που θα ακούει για το μήνυμα postmessage της γονικής και θα διαρρεύσει τη σημαία. Τελικά, το iframe έχει εκτελέσει το φορτίο και η γονική σελίδα σταματά να είναι απασχολημένη, οπότε στέλνει τη σημαία και το φορτίο τη διαρρέει.

Αλλά πώς μπορείτε να κρατήσετε τη γονική απασχολημένη αμέσως μετά τη δημιουργία του iframe και μόνο ενώ περιμένει το iframe να είναι έτοιμο να στείλει τα ευαίσθητα δεδομένα; Βασικά, πρέπει να βρείτε μια ασύγχρονη ενέργεια που μπορείτε να κάνετε τη γονική να εκτελέσει. Για παράδειγμα, σε αυτήν την πρόκληση η γονική άκουγε μηνύματα postmessage όπως αυτά:

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

Έτσι ήταν δυνατό να σταλεί ένα μεγάλο ακέραιο αριθμό σε ένα postmessage που θα μετατραπεί σε συμβολοσειρά σε εκείνη τη σύγκριση, η οποία θα πάρει κάποιο χρόνο:

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

Και για να είστε ακριβείς και να στείλετε αυτό το postmessage αμέσως μετά τη δημιουργία του iframe αλλά πριν είναι έτοιμο να λάβει τα δεδομένα από τον γονέα, θα χρειαστεί να παίξετε με τα χιλιοδευτερόλεπτα ενός setTimeout.

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Last updated