javascript injection tutorial
Τι είναι το Javascript Injection;
Το Javascript είναι μια από τις πιο δημοφιλείς τεχνολογίες και χρησιμοποιείται ευρύτερα για ιστοσελίδες και εφαρμογές ιστού.
Μπορεί να χρησιμοποιηθεί για την πραγματοποίηση διαφορετικών λειτουργιών του ιστότοπου. Ωστόσο, αυτή η τεχνολογία μπορεί να φέρει ορισμένα ζητήματα ασφαλείας, για τα οποία ο προγραμματιστής και ο υπεύθυνος δοκιμών πρέπει να γνωρίζουν.
Το JavaScript μπορεί να χρησιμοποιηθεί όχι μόνο για καλό σκοπό, αλλά και για ορισμένες κακόβουλες επιθέσεις. Ένα από αυτά είναι το Javascript Injection. Η ουσία του JS Injection είναι να εισαγάγετε τον κώδικα Javascript, ο οποίος θα εκτελείται από την πλευρά του πελάτη.
Σε αυτό το σεμινάριο, θα μάθουμε περισσότερα για το πώς να ελέγξουμε εάν είναι δυνατή η έγχυση Javascript, πώς μπορεί να εκτελεστεί το JS Injection και ποιες είναι οι συνέπειες που μπορεί να έχει το JS Injection.
Τι θα μάθετε:
- Κίνδυνοι της ένεσης JavaScript
- Γιατί είναι σημαντικό να δοκιμάσετε το JS Injection;
- Σύγκριση με άλλες επιθέσεις
- Έλεγχος για ένεση JavaScript
- Τροποποίηση παραμέτρων
- Τροποποίηση σχεδίασης ιστότοπου
- Πώς να δοκιμάσετε την ένεση JavaScript
- Πιθανή προστασία από αυτήν την επίθεση
- συμπέρασμα
- Συνιστώμενη ανάγνωση
Κίνδυνοι της ένεσης JavaScript
Το JS Injection προσφέρει πολλές πιθανότητες σε έναν κακόβουλο χρήστη να τροποποιήσει το σχεδιασμό του ιστότοπου, να αποκτήσει τις πληροφορίες του ιστότοπου, να αλλάξει τις πληροφορίες του ιστότοπου που εμφανίζεται και να χειριστεί με τις παραμέτρους (για παράδειγμα, cookie). Επομένως, αυτό μπορεί να προκαλέσει σοβαρές ζημιές στον ιστότοπο, διαρροή πληροφοριών και ακόμη και παραβίαση.
Ο κύριος σκοπός του JS Injection είναι να αλλάξει την εμφάνιση του ιστότοπου και να χειριστεί τις παραμέτρους. Οι συνέπειες του JS Injection μπορεί να είναι πολύ διαφορετικές - από την καταστροφή του σχεδιασμού του ιστότοπου έως την πρόσβαση στον λογαριασμό κάποιου άλλου.
Γιατί είναι σημαντικό να δοκιμάσετε το JS Injection;
Πολλοί θα ρωτούσαν εάν η δοκιμή για JS Injection είναι πραγματικά απαραίτητη.
Ο έλεγχος για ευπάθειες JS Injection είναι μέρος του ελέγχου ασφαλείας. Ο έλεγχος ασφαλείας πραγματοποιείται συνήθως μόνο εάν συμπεριλαμβανόταν στον προγραμματισμό του έργου, καθώς απαιτεί χρόνο, πολλή προσοχή και έλεγχο πολλαπλών λεπτομερειών.
Παρατήρησα ότι κατά τη διάρκεια της υλοποίησης του έργου είναι πολύ συνηθισμένο να παραλείψουμε τις δοκιμές ενάντια σε πιθανές επιθέσεις - συμπεριλαμβανομένου του JS Injection. Με αυτόν τον τρόπο οι ομάδες προσπαθούν να εξοικονομήσουν χρόνο στο έργο. Ωστόσο, αυτή η πρακτική συχνά τελειώνει με παράπονα πελατών.
Πρέπει να είναι γνωστό, ότι ο έλεγχος ασφαλείας συνιστάται ιδιαίτερα ακόμα κι αν δεν περιλαμβάνεται στα σχέδια του έργου. Ο έλεγχος για κύριες πιθανές επιθέσεις πρέπει να εκτελεστεί - ταυτόχρονα πρέπει να ελέγξει για πιθανές ευπάθειες JS Injection.
Αφήνοντας απλό Javascript Ευπάθειες ενέσεων στο προϊόν μπορεί να κοστίσει την ποιότητα του προϊόντος και τη φήμη της εταιρείας. Όποτε έχω μάθει να δοκιμάζω πιθανές επιθέσεις και γενικά δοκιμές ασφαλείας, δεν παραλείπω ποτέ αυτό το μέρος των δοκιμών. Με αυτόν τον τρόπο είμαι πιο σίγουρος για την ποιότητα του προϊόντος.
Σύγκριση με άλλες επιθέσεις
Πρέπει να αναφερθεί ότι το JS Injection δεν είναι τόσο επικίνδυνο όσο SQL Injection , καθώς εκτελείται από την πλευρά του πελάτη και δεν φτάνει στη βάση δεδομένων του συστήματος όπως συμβαίνει κατά τη διάρκεια της επίθεσης SQL Injection. Επίσης, δεν είναι τόσο επικίνδυνο όσο η επίθεση XSS.
Κατά τη διάρκεια αυτής της επίθεσης κατά καιρούς, μόνο η εμφάνιση του ιστότοπου μπορεί να αλλάξει, ενώ ο κύριος σκοπός της επίθεσης XSS είναι η παραβίαση δεδομένων σύνδεσης άλλων.
Ωστόσο, το JS Injection μπορεί επίσης να προκαλέσει σοβαρές ζημιές στον ιστότοπο. Δεν μπορεί μόνο να καταστρέψει την εμφάνιση του ιστότοπου, αλλά και να αποτελέσει μια καλή βάση για την παραβίαση των δεδομένων σύνδεσης άλλων ατόμων.
Έλεγχος για ένεση JavaScript
Όταν αρχίζετε να δοκιμάζετε το JS Injection, το πρώτο πράγμα που πρέπει να κάνετε είναι να ελέγξετε εάν το JS Injection είναι πιθανό ή όχι. Ο έλεγχος για αυτόν τον τύπο πιθανότητας έγχυσης είναι πολύ εύκολος - όταν πλοηγηθείτε στον ιστότοπο, πρέπει να πληκτρολογήσετε τον γραμμικό κώδικα διευθύνσεων του προγράμματος περιήγησης ως εξής:
javascript: alert ('Εκτελέστηκε!');
Εάν εμφανιστεί ένα αναδυόμενο παράθυρο με ένα μήνυμα 'Executed!', Τότε ο ιστότοπος είναι ευάλωτος στο JS Injection.
Στη συνέχεια, στη γραμμή διευθύνσεων του ιστότοπου, μπορείτε να δοκιμάσετε διάφορες εντολές Javascript.
Πρέπει να αναφερθεί ότι το JS Injection δεν είναι δυνατό μόνο από τη γραμμή διευθύνσεων του ιστότοπου. Υπάρχουν διάφορα άλλα στοιχεία του ιστότοπου, τα οποία ενδέχεται να είναι ευάλωτα στο JS Injection. Το πιο σημαντικό είναι να γνωρίζετε ακριβώς τα μέρη του ιστότοπου που μπορούν να επηρεαστούν από το Javascript Injection και πώς να το ελέγξετε.
Οι τυπικοί στόχοι JS Injection είναι:
- Διάφορα φόρουμ
- Πεδία σχολίων του άρθρου
- Βιβλία επισκεπτών
- Οποιεσδήποτε άλλες μορφές όπου μπορεί να εισαχθεί κείμενο.
Για να ελέγξετε εάν αυτή η επίθεση είναι δυνατή για τη φόρμα αποθήκευσης κειμένου, παρά την παροχή κανονικού κειμένου, πληκτρολογήστε τον κώδικα Javascript όπως αναφέρεται παρακάτω και αποθηκεύστε το κείμενο στη φόρμα και ανανεώστε τη σελίδα.
javascript: alert ('Εκτελέστηκε!');
Εάν στη σελίδα που άνοιξε πρόσφατα περιλαμβάνει ένα πλαίσιο κειμένου με το μήνυμα «Εκτελέστηκε!», Τότε αυτός ο τύπος επίθεσης με ένεση είναι δυνατός για τη δοκιμασμένη φόρμα.
Εάν και με τους δύο τρόπους εμφανίζεται ένα πλαίσιο κειμένου με το μήνυμα, μπορείτε να προσπαθήσετε να σπάσετε τον ιστότοπο με πιο δύσκολες μεθόδους JS Injection. Στη συνέχεια, μπορείτε να δοκιμάσετε διαφορετικούς τύπους έγχυσης - τροποποίηση παραμέτρων ή τροποποίηση σχεδίασης.
Φυσικά, η τροποποίηση παραμέτρων θεωρείται πιο επικίνδυνη από την τροποποίηση του σχεδιασμού. Επομένως, ενώ δοκιμάζουμε περισσότερη προσοχή πρέπει να αφιερωθεί στην τροποποίηση των παραμέτρων.
Επίσης, πρέπει να θυμάστε ότι τα πιο ευάλωτα μέρη του ιστότοπου για Javascript Injection είναι πεδία εισαγωγής, όπου αποθηκεύεται οποιοσδήποτε τύπος δεδομένων.
Τροποποίηση παραμέτρων
Όπως αναφέρθηκε προηγουμένως, μία από τις πιθανές ζημιές Javascript Injection είναι η τροποποίηση παραμέτρων.
Κατά τη διάρκεια αυτής της επίθεσης ένεσης ένας κακόβουλος χρήστης μπορεί να αποκτήσει πληροφορίες παραμέτρων ή να αλλάξει οποιαδήποτε τιμή παραμέτρων( Παράδειγμα ,ρυθμίσεις cookie). Αυτό μπορεί να προκαλέσει σοβαρούς κινδύνους καθώς ένας κακόβουλος χρήστης μπορεί να αποκτήσει ευαίσθητο περιεχόμενο. Ένας τέτοιος τύπος ένεσης μπορεί να εκτελεστεί χρησιμοποιώντας μερικές εντολές Javascript.
Ας θυμηθούμε, ότι η εντολή Javascript που επιστρέφει το τρέχον cookie περιόδου λειτουργίας γράφεται αναλόγως:
javascript: alert (document.cookie);
Εισαχθεί στη γραμμή διευθύνσεων URL του προγράμματος περιήγησης, θα επιστρέψει ένα αναδυόμενο παράθυρο με τα τρέχοντα cookie περιόδου σύνδεσης.
Εάν ο ιστότοπος χρησιμοποιεί cookie, μπορούμε να διαβάσουμε πληροφορίες όπως το αναγνωριστικό περιόδου λειτουργίας διακομιστή ή άλλα δεδομένα χρήστη που είναι αποθηκευμένα στα cookie.
Πρέπει να αναφερθεί, ότι αντί για ειδοποίηση () μπορεί να χρησιμοποιηθεί οποιαδήποτε άλλη συνάρτηση Javascript.
Για παράδειγμα ,αν έχουμε βρει έναν ευάλωτο ιστότοπο, αποθηκεύει το αναγνωριστικό περιόδου σύνδεσης στην παράμετρο cookie «session_id». Στη συνέχεια μπορούμε να γράψουμε μια συνάρτηση, που αλλάζει το τρέχον αναγνωριστικό περιόδου λειτουργίας:
javascript: void (document.cookie = “session_id =<>');
Με αυτόν τον τρόπο θα αλλάξει η τιμή αναγνωριστικού περιόδου σύνδεσης. Επίσης, είναι δυνατοί και άλλοι τρόποι αλλαγής παραμέτρων.
Για παράδειγμα, ένας κακόβουλος χρήστης θέλει να συνδεθεί ως άλλα άτομα. Για να πραγματοποιήσετε σύνδεση, ο κακόβουλος χρήστης θα αλλάξει πρώτα τις ρυθμίσεις cookie εξουσιοδότησης σε true. Εάν οι ρυθμίσεις cookie δεν έχουν οριστεί ως 'true', τότε η τιμή cookie μπορεί να επιστραφεί ως 'undefined'.
καλύτερο πρόγραμμα για τη δημιουργία διαγραμμάτων ροής
Για να αλλάξετε αυτές τις τιμές cookie, ένας κακόβουλος χρήστης θα εκτελέσει σύμφωνα με την εντολή Javascript από τη γραμμή URL στο πρόγραμμα περιήγησης:
javascript: void (document.cookie = 'εξουσιοδότηση = true');
Στο αποτέλεσμα, η τρέχουσα παράμετρος cookie εξουσιοδότηση = false θα αλλάξει σε εξουσιοδότηση = true. Με αυτόν τον τρόπο ένας κακόβουλος χρήστης θα μπορεί να αποκτήσει πρόσβαση στο ευαίσθητο περιεχόμενο.
Επίσης, πρέπει να αναφερθεί, ότι μερικές φορές ο κώδικας Javascript επιστρέφει αρκετά ευαίσθητες πληροφορίες.
javascript: alert (document.cookie);
Για παράδειγμα, Εάν ο προγραμματιστής ενός ιστότοπου δεν ήταν αρκετά προσεκτικός, μπορεί να επιστρέψει επίσης ονόματα και τιμές παραμέτρων χρήστη και κωδικού πρόσβασης. Στη συνέχεια, αυτές οι πληροφορίες μπορούν να χρησιμοποιηθούν για παραβίαση του ιστότοπου ή απλώς αλλαγή της τιμής της ευαίσθητης παραμέτρου.
Για παράδειγμα, με τον παρακάτω κώδικα μπορούμε να αλλάξουμε την τιμή ονόματος χρήστη:
javascript: void (document.cookie = 'όνομα χρήστη = otherUser');
Με αυτόν τον τρόπο οποιαδήποτε άλλη τιμή παραμέτρων μπορεί επίσης να τροποποιηθεί.
Τροποποίηση σχεδίασης ιστότοπου
Το Javascript μπορεί επίσης να χρησιμοποιηθεί για την τροποποίηση της φόρμας κάθε ιστότοπου και γενικά του σχεδιασμού του ιστότοπου.
Για παράδειγμα, με το Javascript μπορείτε να αλλάξετε οποιαδήποτε πληροφορία εμφανίζεται στον ιστότοπο:
- Εμφανιζόμενο κείμενο.
- Ιστορικό ιστότοπου.
- Εμφάνιση φόρμας ιστότοπου.
- Εμφάνιση του αναδυόμενου παραθύρου.
- Εμφάνιση οποιουδήποτε άλλου στοιχείου ιστότοπου.
Για παράδειγμα, Για να αλλάξετε την εμφανιζόμενη διεύθυνση email στον ιστότοπο, θα πρέπει να χρησιμοποιείται η κατάλληλη εντολή Javascript:
javascript: void (document.forms (0) .email.value = 'Test@test.com') ;
Λίγοι πολύπλοκοι χειρισμοί με το σχεδιασμό του ιστότοπου είναι επίσης δυνατοί. Με αυτήν την επίθεση μπορούμε να έχουμε πρόσβαση και να αλλάξουμε επίσης την κατηγορία CSS του ιστότοπου.
Για παράδειγμα, εάν θέλουμε να αλλάξουμε την εικόνα φόντου του ιστότοπου με JS Injection, τότε η εντολή θα πρέπει να εκτελεστεί ανάλογα:
javascript: void (έγγραφο. background-image: url ('other-image.jpg');
Επίσης, ένας κακόβουλος χρήστης μπορεί να γράψει κώδικα Javascript Injection που αναφέρεται παρακάτω στη φόρμα εισαγωγής κειμένου και να τον αποθηκεύσει.
javascript: void (ειδοποίηση ('Γεια!'));
Στη συνέχεια, κάθε φορά που ανοίγει μια σελίδα, εμφανίζεται ένα πλαίσιο κειμένου με το μήνυμα 'Γεια!'
Ο σχεδιασμός του αλλαγμένου ιστότοπου με Javascript Injection είναι λιγότερο επικίνδυνος από την τροποποίηση παραμέτρων. Ωστόσο, εάν ο σχεδιασμός του ιστότοπου θα αλλάξει με κακόβουλο τρόπο, τότε μπορεί να κοστίσει τη φήμη της εταιρείας.
Πώς να δοκιμάσετε την ένεση JavaScript
Μπορεί να δοκιμαστεί με τους ακόλουθους τρόπους:
- Χειροκίνητα
- Με εργαλεία δοκιμών
- Με προσθήκες προγράμματος περιήγησης
Πιθανές ευπάθειες Javascript μπορούν να ελεγχθούν χειροκίνητα εάν έχετε καλή γνώση του τρόπου με τον οποίο πρέπει να εκτελεστεί. Επίσης, μπορεί να δοκιμαστεί με διάφορα εργαλεία αυτοματισμού.
Για παράδειγμα, εάν έχετε αυτοματοποιήσει τις δοκιμές σας σε επίπεδο API με το εργαλείο SOAP UI, τότε είναι επίσης δυνατό να εκτελέσετε δοκιμές Javascript Injection με UI σαπουνιού .
Ωστόσο, μπορώ να σχολιάσω μόνο από τη δική μου εμπειρία, ότι θα έπρεπε πραγματικά να έχετε καλή γνώση σχετικά με το εργαλείο SOAP UI για να το δοκιμάσετε για JS Injection, καθώς όλα τα βήματα δοκιμής πρέπει να γράφονται χωρίς λάθη. Εάν κάποιο βήμα δοκιμής δεν έχει γραφτεί σωστά, μπορεί να προκαλέσει λάθος αποτελέσματα δοκιμών ασφαλείας.
Επίσης, μπορείτε να βρείτε διάφορα πρόσθετα του προγράμματος περιήγησης για έλεγχο πιθανής επίθεσης. Ωστόσο, συνιστάται να μην ξεχάσετε να ελέγξετε αυτήν την επίθεση με μη αυτόματο τρόπο, καθώς συνήθως επιστρέφει πιο ακριβή αποτελέσματα.
Θα ήθελα να πω, ότι η μη αυτόματη δοκιμή κατά του Javascript Injection με κάνει να νιώθω πιο σίγουρος και σίγουρος για την ασφάλεια του ιστότοπου. Με αυτόν τον τρόπο μπορείτε να είστε σίγουροι, ότι δεν χάθηκε καμία φόρμα κατά τη δοκιμή και όλα τα αποτελέσματα είναι ορατά σε εσάς.
Για να δοκιμάσετε το Javascript Injection θα πρέπει να έχετε γενικές γνώσεις για το Javascript και πρέπει να γνωρίζετε ποια τμήματα του ιστότοπου είναι πιο ευάλωτα. Επίσης, πρέπει να θυμάστε ότι ο ιστότοπος ενδέχεται να προστατεύεται από το JS Injection και κατά τη δοκιμή θα πρέπει να προσπαθήσετε να παραβιάσετε αυτήν την προστασία.
Με αυτόν τον τρόπο θα είστε σίγουροι εάν η προστασία από αυτήν την επίθεση είναι αρκετά ισχυρή ή όχι.
Πιθανή προστασία από αυτήν την επίθεση
Πρώτον, για να αποφευχθεί αυτή η επίθεση, κάθε εισερχόμενη εισαγωγή θα πρέπει να επικυρώνεται. Η είσοδος πρέπει να επικυρώνεται κάθε φορά και όχι μόνο όταν τα δεδομένα είναι αρχικά αποδεκτά.
Συνιστάται ιδιαίτερα να μην βασίζεστε στην επικύρωση του πελάτη. Επίσης, συνιστάται να εκτελείτε μια σημαντική λογική από την πλευρά του διακομιστή.
Πολλοί προσπαθούν να προστατεύσουν από το Javascript Injection αλλάζοντας τα εισαγωγικά σε διπλάσιο και ο κώδικας Javascript δεν πρέπει να εκτελείται με αυτόν τον τρόπο.
Για παράδειγμα, αν γράψετε στο πεδίο σχολίων οτιδήποτε με εισαγωγικά…, αυτά τα αποσπάσματα θα αντικατασταθούν με διπλά -<>...<>. Με αυτόν τον τρόπο δεν θα εκτελεστεί ο κωδικός Javascript που έχει εισαχθεί.
Παρατήρησα, ότι η αντικατάσταση των εισαγωγικών με διπλά εισαγωγικά είναι μια πολύ κοινή πρακτική για την αποφυγή πιθανών επιθέσεων JS Injection. Ωστόσο, υπάρχουν μερικοί τρόποι για την κωδικοποίηση των εισαγωγικών για την εκτέλεση του κώδικα JS Injection. Επομένως, η αλλαγή εισαγωγικών σε διπλάσιο δεν είναι ο τέλειος τρόπος προστασίας από αυτήν την επίθεση.
συμπέρασμα
Πρέπει πάντα να έχουμε κατά νου, ότι το Javascript Injection είναι μια από τις πιθανές επιθέσεις εναντίον ιστότοπων, καθώς το Javascript είναι μια από τις πιο ευρέως χρησιμοποιούμενες τεχνολογίες για τους ιστότοπους. Επομένως, ενώ δοκιμάζουμε ιστότοπους ή άλλες τεχνολογίες ιστού, δεν πρέπει να ξεχνάμε να δοκιμάζουμε αυτήν την επίθεση.
Κατά την εκτέλεση δοκιμών ασφαλείας, το JS Injection δεν πρέπει να ξεχνάμε. Μερικοί άνθρωποι θεωρούν αυτό το τεστ ως μια λιγότερο επικίνδυνη επίθεση, όπως πραγματοποιείται από την πλευρά του πελάτη.
Ωστόσο, είναι λανθασμένη προσέγγιση και πρέπει να θυμόμαστε πάντα, ότι το Javascript Injection μπορεί να προκαλέσει σοβαρές ζημιές στον ιστότοπο όπως διαρροή ευαίσθητων πληροφοριών, αλλαγή παραμέτρων ή παραβίαση λογαριασμών χρηστών.
Επομένως, πρέπει να το θεωρήσουμε αυτό ως σημαντικό μέρος της δοκιμής και αποτελεί μέρος της επένδυσης για τη φήμη του καλού προϊόντος και της εταιρείας.
Ο έλεγχος για JS Injection δεν είναι πολύ δύσκολος. Πρώτον, θα πρέπει να έχετε γενικές γνώσεις για το Javascript και πρέπει να ξέρετε πώς να ελέγξετε εάν αυτή η επίθεση είναι δυνατή για την τρέχουσα διαδικτυακή λύση ή όχι.
Επίσης κατά τη δοκιμή θα πρέπει να θυμάστε, ότι ένας ιστότοπος μπορεί να έχει προστασία από αυτόν τον τύπο επίθεσης, αλλά μπορεί να είναι πολύ αδύναμος - θα πρέπει επίσης να ελεγχθεί. Ένα άλλο σημαντικό πράγμα που πρέπει να θυμάστε είναι ότι υπάρχουν διαφορετικοί τύποι επιθέσεων Javascript Injection και κανένας από αυτούς δεν πρέπει να ξεχάσει να δοκιμάσει.
Έχετε πραγματοποιήσει Javascript Injection Testing ;; Θα χαρούμε να σας ακούσουμε, μη διστάσετε να μοιραστείτε τις εμπειρίες σας στην παρακάτω ενότητα σχολίων.
Συνιστώμενη ανάγνωση
- Εκμάθηση έκλειψης σε βάθος για αρχάριους
- Πώς να ρυθμίσετε το Node.js Testing Framework: Node.js Tutorial
- Tutorial HTML Injection: Τύποι & πρόληψη με παραδείγματα
- Εκμάθηση δοκιμών SQL Injection (Παράδειγμα και πρόληψη της επίθεσης SQL Injection)
- Εκμάθηση Java Reflection με παραδείγματα
- Εκπαιδευτικό πρόγραμμα SVN: Διαχείριση πηγαίου κώδικα χρησιμοποιώντας ανατροπή
- Εκμάθηση Python DateTime με παραδείγματα
- Tutorial Tortoise SVN: Αναθεωρήσεις στο αποθετήριο κώδικα