Τα δεδομένα είναι ένα από τα πιο ζωτικά στοιχεία των συστημάτων πληροφοριών. Οι εφαρμογές Ιστού με βάση τη βάση δεδομένων χρησιμοποιούνται από τον οργανισμό για τη λήψη δεδομένων από πελάτες. Το SQL είναι το αρκτικόλεξο για τη γλώσσα δομημένων ερωτημάτων. Χρησιμοποιείται για την ανάκτηση και χειρισμό δεδομένων στη βάση δεδομένων.
Τι είναι το SQL Injection;
Το SQL Injection είναι μια επίθεση που δηλητηριάζει δυναμικές δηλώσεις SQL για να σχολιάσει ορισμένα μέρη της δήλωσης ή να προσθέσει μια συνθήκη που θα είναι πάντα αληθής. Εκμεταλλεύεται τα σχεδιαστικά ελαττώματα σε κακώς σχεδιασμένες εφαρμογές ιστού για να εκμεταλλευτεί τις δηλώσεις SQL για την εκτέλεση κακόβουλου κώδικα SQL.
Σε αυτό το σεμινάριο, θα μάθετε τεχνικές SQL Injection και πώς μπορείτε να προστατεύσετε εφαρμογές web από τέτοιες επιθέσεις.
- Πώς λειτουργεί το SQL Injection
- Δραστηριότητα εισβολής: SQL Εισαγάγετε μια εφαρμογή Ιστού
- Άλλοι τύποι επίθεσης SQL Injection
- Εργαλεία αυτοματισμού για SQL Injection
- Πώς να αποτρέψετε τις επιθέσεις SQL Injection
- Δραστηριότητα εισβολής: Χρησιμοποιήστε το Havji για SQL Injection
Πώς λειτουργεί το SQL Injection
Οι τύποι επιθέσεων που μπορούν να εκτελεστούν χρησιμοποιώντας SQL injection ποικίλλουν ανάλογα με τον τύπο της μηχανής βάσης δεδομένων. Η επίθεση λειτουργεί σε δυναμικές δηλώσεις SQL . Μια δυναμική δήλωση είναι μια δήλωση που δημιουργείται κατά το χρόνο εκτέλεσης χρησιμοποιώντας τους κωδικούς πρόσβασης παραμέτρων από μια φόρμα ιστού ή μια συμβολοσειρά ερωτήματος URI.
Ας εξετάσουμε μια απλή εφαρμογή Ιστού με μια φόρμα σύνδεσης. Ο κώδικας για τη φόρμα HTML εμφανίζεται παρακάτω.
ΕΔΩ,
- Η παραπάνω φόρμα δέχεται τη διεύθυνση ηλεκτρονικού ταχυδρομείου και τον κωδικό πρόσβασης στη συνέχεια τις υποβάλλει σε ένα αρχείο PHP που ονομάζεται index.php.
- Έχει την επιλογή αποθήκευσης της περιόδου σύνδεσης σε ένα cookie. Αυτό το έχουμε συναγάγει από το πλαίσιο ελέγχου Remember_me. Χρησιμοποιεί τη μέθοδο δημοσίευσης για την υποβολή δεδομένων. Αυτό σημαίνει ότι οι τιμές δεν εμφανίζονται στη διεύθυνση URL.
Ας υποθέσουμε ότι η δήλωση στο backend για τον έλεγχο της ταυτότητας χρήστη έχει ως εξής
ΕΠΙΛΕΞΤΕ * ΑΠΟ χρήστες ΠΟΥ ΕΙΝΑΙ email = $ _POST ['email'] ΚΑΙ κωδικός πρόσβασης = md5 ($ _ POST ['password']);
ΕΔΩ,
- Η παραπάνω δήλωση χρησιμοποιεί τις τιμές του πίνακα $ _POST [] απευθείας χωρίς να τις απολυμαίνει.
- Ο κωδικός πρόσβασης κρυπτογραφείται χρησιμοποιώντας αλγόριθμο MD5.
Θα απεικονίσουμε την επίθεση έγχυσης SQL χρησιμοποιώντας το sqlfiddle. Ανοίξτε τη διεύθυνση URL http://sqlfiddle.com/ στο πρόγραμμα περιήγησης ιστού. Θα λάβετε το ακόλουθο παράθυρο.
Σημείωση: θα πρέπει να γράψετε τις δηλώσεις SQL
Βήμα 1) Εισαγάγετε αυτόν τον κωδικό στο αριστερό παράθυρο
CREATE TABLE `users` (`id` INT NOT NULL AUTO_INCREMENT,`email` VARCHAR(45) NULL,`password` VARCHAR(45) NULL,PRIMARY KEY (`id`));insert into users (email,password) values ('This email address is being protected from spambots. You need JavaScript enabled to view it.',md5('abc'));
Βήμα 2) Κάντε κλικ στο Build Schema
Βήμα 3) Εισαγάγετε αυτόν τον κωδικό στο δεξιό τμήμα του παραθύρου
επιλέξτε * από χρήστες.
Βήμα 4) Κάντε κλικ στο Εκτέλεση SQL. Θα δείτε το ακόλουθο αποτέλεσμα
Ας υποθέσουμε ότι προμήθειες χρήστη Αυτή η διεύθυνση ηλεκτρονικού ταχυδρομείου προστατεύεται από κακόβουλη χρήση. Χρειάζεται να ενεργοποιήσετε τη JavaScript για να τη δείτε. και 1234 ως κωδικός πρόσβασης. Η δήλωση που θα εκτελεστεί στη βάση δεδομένων θα ήταν
ΕΠΙΛΕΞΤΕ * ΑΠΟ χρήστες ΠΟΥ ΕΙΝΑΙ email = ' Αυτή η διεύθυνση email προστατεύεται από κακόβουλη χρήση. Πρέπει να έχετε ενεργοποιημένη τη Javascript για να τη δείτε. " ΚΑΙ κωδικός πρόσβασης = md5 ('1234');
Ο παραπάνω κώδικας μπορεί να αξιοποιηθεί σχολιάζοντας το μέρος του κωδικού πρόσβασης και προσαρτώντας μια συνθήκη που θα ισχύει πάντα. Ας υποθέσουμε ότι ένας εισβολέας παρέχει τα ακόλουθα στοιχεία στο πεδίο διεύθυνσης email.
Αυτή η διεύθυνση ηλεκτρονικού ταχυδρομείου προστατεύεται από κακόβουλη χρήση. Χρειάζεται να ενεργοποιήσετε τη JavaScript για να τη δείτε. " Ή 1 = 1 ΟΡΙΟ 1 - ']
xxx για τον κωδικό πρόσβασης.
Η δυναμική δήλωση που δημιουργείται θα έχει ως εξής.
ΕΠΙΛΕΞΤΕ * ΑΠΟ χρήστες ΠΟΥ ΕΙΝΑΙ email = ' Αυτή η διεύθυνση email προστατεύεται από κακόβουλη χρήση. Πρέπει να έχετε ενεργοποιημένη τη Javascript για να τη δείτε. " Ή 1 = 1 ΟΡΙΟ 1 - '] ΚΑΙ κωδικός πρόσβασης = md5 (' 1234 ');
ΕΔΩ,
- Αυτή η διεύθυνση ηλεκτρονικού ταχυδρομείου προστατεύεται από κακόβουλη χρήση. Χρειάζεται να ενεργοποιήσετε τη JavaScript για να τη δείτε. τελειώνει με ένα μόνο απόσπασμα που συμπληρώνει το απόσπασμα συμβολοσειράς
- Ή 1 = 1 ΟΡΙΟ 1 είναι μια συνθήκη που θα ισχύει πάντα και περιορίζει τα αποτελέσματα που επιστρέφονται σε μία μόνο εγγραφή.
- - «ΚΑΙ… είναι ένα σχόλιο SQL που εξαλείφει το μέρος του κωδικού πρόσβασης.
Αντιγράψτε την παραπάνω δήλωση SQL και επικολλήστε την στο πλαίσιο κειμένου SQL FiddleRun SQL όπως φαίνεται παρακάτω
Δραστηριότητα εισβολής: SQL Εισαγάγετε μια εφαρμογή Ιστού
Έχουμε μια απλή εφαρμογή ιστού στη διεύθυνση http://www.techpanda.org/ που είναι ευάλωτη σε επιθέσεις SQL Injection μόνο για σκοπούς επίδειξης. Ο παραπάνω κώδικας φόρμας HTML προέρχεται από τη σελίδα σύνδεσης. Η εφαρμογή παρέχει βασική ασφάλεια, όπως απολύμανση του πεδίου email. Αυτό σημαίνει ότι ο παραπάνω κωδικός μας δεν μπορεί να χρησιμοποιηθεί για παράκαμψη της σύνδεσης.
Για να το κάνουμε αυτό, μπορούμε να εκμεταλλευτούμε το πεδίο κωδικού πρόσβασης. Το παρακάτω διάγραμμα δείχνει τα βήματα που πρέπει να ακολουθήσετε
Ας υποθέσουμε ότι ένας εισβολέας παρέχει τα ακόλουθα στοιχεία
- Βήμα 1: Εισαγάγετε Αυτή η διεύθυνση ηλεκτρονικού ταχυδρομείου προστατεύεται από κακόβουλη χρήση. Χρειάζεται να ενεργοποιήσετε τη JavaScript για να τη δείτε. ως διεύθυνση email
- Βήμα 2: Εισαγάγετε xxx ') Ή 1 = 1 -]
- Κάντε κλικ στο κουμπί Υποβολή
- Θα κατευθυνθείτε στο ταμπλό
Η δηλωθείσα δήλωση SQL θα έχει ως εξής
ΕΠΙΛΕΞΤΕ * ΑΠΟ χρήστες ΠΟΥ ΕΙΝΑΙ email = ' Αυτή η διεύθυνση email προστατεύεται από κακόβουλη χρήση. Πρέπει να έχετε ενεργοποιημένη τη Javascript για να τη δείτε. " ΚΑΙ κωδικός πρόσβασης = md5 ('xxx') Ή 1 = 1 -] ');
Το παρακάτω διάγραμμα δείχνει ότι η δήλωση έχει δημιουργηθεί.
ΕΔΩ,
- Η δήλωση υποθέτει έξυπνα ότι χρησιμοποιείται κρυπτογράφηση md5
- Ολοκληρώνει τη μεμονωμένη προσφορά και την αγκύλη κλεισίματος
- Προσθέτει μια συνθήκη στη δήλωση που θα είναι πάντα αληθής
Σε γενικές γραμμές, μια επιτυχημένη επίθεση SQL Injection επιχειρεί μια σειρά από διαφορετικές τεχνικές όπως αυτές που παρουσιάστηκαν παραπάνω για να πραγματοποιήσει μια επιτυχή επίθεση.
Άλλοι τύποι επίθεσης SQL Injection
Το SQL Injections μπορεί να κάνει περισσότερο κακό παρά απλώς με το πέρασμα των αλγορίθμων σύνδεσης. Ορισμένες από τις επιθέσεις περιλαμβάνουν
- Διαγραφή δεδομένων
- Ενημέρωση δεδομένων
- Εισαγωγή δεδομένων
- Εκτέλεση εντολών στο διακομιστή που μπορούν να κατεβάσουν και να εγκαταστήσουν κακόβουλα προγράμματα, όπως Trojans
- Εξαγωγή πολύτιμων δεδομένων, όπως στοιχεία πιστωτικής κάρτας, email και κωδικοί πρόσβασης στον απομακρυσμένο διακομιστή του εισβολέα
- Λήψη στοιχείων σύνδεσης χρήστη κ.λπ.
Η παραπάνω λίστα δεν είναι εξαντλητική. σας δίνει απλώς μια ιδέα για το τι SQL Injection
Εργαλεία αυτοματισμού για SQL Injection
Στο παραπάνω παράδειγμα, χρησιμοποιήσαμε τεχνικές χειροκίνητης επίθεσης με βάση τις τεράστιες γνώσεις μας για το SQL. Υπάρχουν αυτοματοποιημένα εργαλεία που μπορούν να σας βοηθήσουν να εκτελέσετε τις επιθέσεις πιο αποτελεσματικά και στο συντομότερο δυνατό χρονικό διάστημα. Αυτά τα εργαλεία περιλαμβάνουν
- SQLSmack - https://securiteam.com/tools/5GP081P75C
- SQLPing 2 - http://www.sqlsecurity.com/downloads/sqlping2.zip?attredirects=0&d=1
- SQLMap - http://sqlmap.org/
Πώς να αποτρέψετε τις επιθέσεις SQL Injection
Ένας οργανισμός μπορεί να υιοθετήσει την ακόλουθη πολιτική για να προστατευτεί από επιθέσεις SQL Injection.
- Η είσοδος χρήστη δεν πρέπει ποτέ να είναι αξιόπιστη - Πρέπει πάντα να απολυμαίνεται πριν χρησιμοποιηθεί σε δυναμικές δηλώσεις SQL.
- Αποθηκευμένες διαδικασίες - αυτές μπορούν να ενσωματώσουν τις δηλώσεις SQL και να αντιμετωπίσουν όλες τις εισόδους ως παραμέτρους.
- Προετοιμασμένες δηλώσεις - έτοιμες δηλώσεις για να λειτουργήσουν δημιουργώντας πρώτα τη δήλωση SQL και στη συνέχεια αντιμετωπίζοντας όλα τα δεδομένα χρήστη που υποβλήθηκαν ως παραμέτρους. Αυτό δεν επηρεάζει τη σύνταξη της δήλωσης SQL.
- Κανονικές εκφράσεις - αυτές μπορούν να χρησιμοποιηθούν για την ανίχνευση πιθανών επιβλαβών κωδικών και την κατάργησή τους πριν από την εκτέλεση των δηλώσεων SQL.
- Δικαιώματα πρόσβασης χρήστη σύνδεσης βάσης δεδομένων - πρέπει να δίνονται μόνο τα απαραίτητα δικαιώματα πρόσβασης σε λογαριασμούς που χρησιμοποιούνται για σύνδεση στη βάση δεδομένων. Αυτό μπορεί να συμβάλει στη μείωση της απόδοσης των δηλώσεων SQL στον διακομιστή.
- Μηνύματα σφάλματος - δεν πρέπει να αποκαλύπτουν ευαίσθητες πληροφορίες και πού ακριβώς προέκυψε ένα σφάλμα. Απλά προσαρμοσμένα μηνύματα σφάλματος όπως "Συγγνώμη, αντιμετωπίζουμε τεχνικά σφάλματα. Έγινε επικοινωνία με την τεχνική ομάδα. Δοκιμάστε ξανά αργότερα "μπορεί να χρησιμοποιηθεί αντί να εμφανιστούν οι δηλώσεις SQL που προκάλεσαν το σφάλμα.
Δραστηριότητα εισβολής: Χρησιμοποιήστε το Havij για SQL Injection
Σε αυτό το πρακτικό σενάριο, θα χρησιμοποιήσουμε το πρόγραμμα Havij Advanced SQL Injection για να σαρώσουμε έναν ιστότοπο για ευπάθειες.
Σημείωση: το πρόγραμμα προστασίας από ιούς ενδέχεται να το επισημάνει λόγω της φύσης του. Πρέπει να το προσθέσετε στη λίστα εξαιρέσεων ή να θέσετε σε παύση το λογισμικό προστασίας από ιούς.
Η παρακάτω εικόνα δείχνει το κύριο παράθυρο του Havij
Το παραπάνω εργαλείο μπορεί να χρησιμοποιηθεί για την εκτίμηση της ευπάθειας μιας ιστοσελίδας / εφαρμογής.
Περίληψη
- Το SQL Injection είναι ένας τύπος επίθεσης που εκμεταλλεύεται κακές δηλώσεις SQL
- Η ένεση SQL μπορεί να χρησιμοποιηθεί για παράκαμψη αλγορίθμων σύνδεσης, ανάκτηση, εισαγωγή και ενημέρωση και διαγραφή δεδομένων.
- Τα εργαλεία έγχυσης SQL περιλαμβάνουν SQLMap, SQLPing και SQLSmack κ.λπ.
- Μια καλή πολιτική ασφάλειας κατά τη σύνταξη δήλωσης SQL μπορεί να βοηθήσει στη μείωση των επιθέσεων έγχυσης SQL.