Bypassing SOP with Iframes - 2
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
In the λύση for this πρόκληση, @Strellic_ proposes a similar method to the previous section. Let's check it.
In this challenge the attacker needs to bypass this:
Αν το κάνει, μπορεί να στείλει ένα postmessage με περιεχόμενο HTML που θα γραφτεί στη σελίδα με innerHTML
χωρίς καθαρισμό (XSS).
Ο τρόπος για να παρακάμψετε τον πρώτο έλεγχο είναι να κάνετε το window.calc.contentWindow
undefined
και το e.source
null
:
window.calc.contentWindow
είναι στην πραγματικότητα document.getElementById("calc")
. Μπορείτε να καταστρέψετε το document.getElementById
με <img name=getElementById />
(σημειώστε ότι το Sanitizer API -εδώ- δεν είναι ρυθμισμένο για να προστατεύει από επιθέσεις DOM clobbering στην προεπιλεγμένη του κατάσταση).
Επομένως, μπορείτε να καταστρέψετε το document.getElementById("calc")
με <img name=getElementById /><div id=calc></div>
. Τότε, το window.calc
θα είναι undefined
.
Τώρα, χρειαζόμαστε το e.source
να είναι undefined
ή null
(επειδή χρησιμοποιείται το ==
αντί για το ===
, null == undefined
είναι True
). Το να το αποκτήσετε είναι "εύκολο". Αν δημιουργήσετε ένα iframe και στείλετε ένα postMessage από αυτό και αμέσως αφαιρέσετε το iframe, το e.origin
θα είναι null
. Ελέγξτε τον παρακάτω κώδικα
Για να παρακαμφθεί ο δεύτερος έλεγχος σχετικά με το token, στέλνουμε token
με τιμή null
και κάνουμε την τιμή window.token
undefined
:
Η αποστολή του token
στο postMessage με τιμή null
είναι απλή.
window.token
κατά την κλήση της συνάρτησης getCookie
που χρησιμοποιεί document.cookie
. Σημειώστε ότι οποιαδήποτε πρόσβαση στο document.cookie
σε σελίδες null
προέλευσης προκαλεί ένα error. Αυτό θα κάνει την window.token
να έχει τιμή undefined
.
Η τελική λύση από @terjanq είναι η ακόλουθη:
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)