Έχουμε ήδη αναφέρει δύο τύπους εκμεταλλεύσεων XSS : ανακλώμενα και αποθηκευμένα. Όλα έχουν το κοινό χαρακτηριστικό ότι ο επικίνδυνος κώδικας, αφού εισαχθεί, θα εκτελεστεί μετά την απόκριση του διακομιστή, πράγμα που σημαίνει ότι το σφάλμα βρίσκεται στην πλευρά του διακομιστή.διακομιστής.διακομιστής. Υπάρχει ένας άλλος τύπος εκμετάλλευσης XSS που έρχεται σε αντίθεση με αυτό το χαρακτηριστικό, ο κακόβουλος κώδικας εκτελείται αμέσως από την πλευρά του πελάτη χωρίς να περάσει από τον διακομιστή, γνωστό ως DOM Based XSS ή γνωστό και ως type 0 XSS.
Πρώτα από όλα πρέπει να ξέρουμε τι είναι το DOM;
Το DOM, συντομογραφία του Document Object Model, είναι μια τυπική μορφή του W3C (http://www.w3.org/DOM/) που προτείνεται για την ανάκτηση και τον χειρισμό δεδομένων δομημένων εγγράφων όπως HTML και XML. Αυτό το μοντέλο αναπαριστά τα έγγραφα ως μια ιεραρχική δομή δέντρου. Όλα τα στοιχεία σε HTML και XML θεωρούνται κόμβος.
Το XSS που βασίζεται στο DOM είναι μια τεχνική εκμετάλλευσης XSS που βασίζεται στην αλλαγή της δομής DOM του εγγράφου, και συγκεκριμένα του HTML.
Ας δούμε ένα συγκεκριμένο παράδειγμα παρακάτω:
Ένας ιστότοπος έχει την ακόλουθη διεύθυνση URL στη σελίδα εγγραφής:
example.com/register.php?message=Please fill in the form
Όταν έχουμε πρόσβαση σε αυτό, βλέπουμε μια πολύ κανονική Φόρμα:

Μπορείτε εύκολα να συναγάγετε την παράμετρο του μηνύματος που μεταβιβάστηκε στο περιεχόμενο ειδοποίησης στη φόρμα, κοιτάξτε προσεκτικά τον πηγαίο κώδικα αυτής της ειδοποίησης:

Το τμήμα JavaScript είναι υπεύθυνο για τη λήψη της τιμής από την παράμετρο του μηνύματος και την εκτύπωσή της. Από αυτόν τον χαλαρό έλεγχο εισόδου, είναι απολύτως δυνατό να εξαπατηθούν οι χρήστες ώστε να έχουν πρόσβαση σε επικίνδυνες διευθύνσεις URL.
Αντί για κάστινγκ:
message=Please fill in the form
μετά μετάδοση:
message=GenderMaleFemale
function show(){alert();}
Τότε η φόρμα εγγραφής θα μοιάζει με αυτό:

Οι χρήστες δεν θα είναι ύποπτοι για μια "κανονική" φόρμα όπως αυτή και όταν επιλέγουν το φύλο, το Σενάριο θα εκτελείται:

Θα εξηγήσω λίγο περισσότερα σχετικά με την τιμή που μεταβιβάστηκε στην παράμετρο μηνύματος:
GenderMaleFemale
function show(){alert();}
Ο κύριος σκοπός της είναι να εκτελεί τη συνάρτηση show() κάθε φορά που υπάρχει ένα συμβάν onchage στην ετικέτα Select. Η συνάρτηση show() εδώ απλά εμφανίζεται για να δείξει ότι το σενάριο έχει εκτελεστεί. Ωστόσο, στην πραγματικότητα, οι χάκερ χρησιμοποιούν συχνά αυτήν τη συνάρτηση show() για να εκτελέσουν ένα σενάριο που μεταδίδει την τιμή του cookie χρήστη σε έναν προκαθορισμένο διακομιστή. Οι αναγνώστες μπορούν να διαβάσουν το άρθρο Reflected XSS που αναφέρει πώς δημιουργούν οι χάκερ Πώς μοιάζει αυτό το αίτημα;
Αυτό το παράδειγμα μας δίνει δύο σημαντικά συμπεράσματα. Πρώτον, ο κακόβουλος κώδικας εκτελέστηκε αμέσως μόλις έκανε κλικ στην τιμή στην ετικέτα επιλογής, που σημαίνει ότι εκτελέστηκε ακριβώς στην πλευρά του πελάτη χωρίς να περάσει από την απόκριση του διακομιστή. Δεύτερον, η δομή HTML έχει αλλάξει με το σενάριο που πέρασε. Και μπορούμε επίσης να δούμε το πραγματικό σενάριο εκμετάλλευσης, το DOM Based είναι κάπως πιο παρόμοιο με το Reflected παρά με το Stored XSS όταν πρόκειται να εξαπατήσει τους χρήστες να αποκτήσουν πρόσβαση σε μια διεύθυνση URL ενσωματωμένη με κακόβουλο κώδικα.
Το παρακάτω σχήμα περιγράφει κάθε βήμα στην εφαρμογή της τεχνικής επίθεσης XSS με βάση το DOM:

Παρακάτω είναι ένα βίντεο ενός μέλους του φόρουμ WhiteHat.vn που εκτελεί μια εκμετάλλευση μέσω του XSS που βασίζεται στο DOM:
Καλή τύχη!