Bypassing SOP with Iframes - 2
Iframes in SOP-2
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 είναι η ακόλουθη:
Last updated