SQL INJECTION
System Security projectSapountzi EleniSiganos Marios
University of Central GreeceComputer Science and Biomedical Informatics
ΤΙ ΕΙΝΑΙ;Τεχνική που χρησιμοποιείται συχνά για επιθέσεις σε ΒΔ μέσω
δικτυακού τόπου
Τεχνική έγχυσης (εισαγωγής) κώδικα που εκμεταλλεύεται μία
ευπάθεια ασφαλείας στο λογισμικό ενός ιστοτόπου
Οι επιθέσεις SQL injections εμφανίστηκαν ταυτόχρονα με τις
πρώτες εφαρμογές web
Μεγάλος ο αριθμός των συστημάτων που είναι ευάλωτα στις
επιθέσεις SQL Injections
Εύκολα μπορεί να διερευνηθεί σε μια εφαρμογή και με
κατάλληλη πρόβλεψη να αποφευχθεί
ΚΟΡΥΦΑΙΕΣ 7 ΕΠΙΘΕΣΕΙΣ
ΜΠΟΡΟΥΜΕ ΝΑ ΠΡΑΓΜΑΤΟΠΟΙΗΣΟΥΜΕ ΜΙΑ
ΤΕΤΟΙΑ ΕΠΙΘΕΣΗ;
ΝΑΙ μπορούμε!
ΕΥΑΛΩΤΕΣ ΒΔ ΚΑΙ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ
Σχεδόν όλες οι βάσεις δεδομένων SQL και γλώσσες προγραμματισμού είναι δυνητικά ευάλωτες, πχ:
MS SQL ServerOracle MySQLPostgresDB2 MS Access SybaseInformix, κλπ.
ΕΥΑΛΩΤΕΣ ΒΔ ΚΑΙ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ
Πρόσβαση μέσω εφαρμογών που έχουν αναπτυχθεί
με χρήση:
Perl και CGI scriptsASP, JSP, PHPXML, XSL και XSQLJavascriptVB, MFC, και άλλα ODBC-based εργαλεία και
APIsDB συγκεκριμένη web-based εφαρμογές και το APIReports and DB Applications 3 and 4GL-based languages (C, OCI, Pro * C,
COBOL)
ΑΝΑΛΥΣΗ
Τι χρειαζόμαστε;• Απλά έναν web browser
Τι πρέπει να ψάξουμε;• Σελίδες που επιτρέπουν την εισαγωγή δεδομένων
όπως: • login page • search page• feedback κλπ.
• HTML σελίδες που χρησιμοποιούν POST εντολές γιανα στείλουν τις σχετικές παραμέτρους σε κάποια σελίδα ASP
ΑΝΑΛΥΣΗ
Υπάρχει δυνατότητα απομακρυσμένης εκτέλεσης με
SQL Injection;• Η SQL δίνει την δυνατότητα στους developers να
κάνουν ΤΑ ΠΑΝΤΑ σε ένα σύστημα
• O SQL Server τρέχει σαν SYSTEM, δηλαδή τα δικαιώματα που έχει είναι επιπέδου administrator στο σύστημα
• Οπότε μπορούμε να αποκτήσουμε εύκολα πρόσβαση, αφού μπορούμε να τρέξουμε ότι θέλουμε
ΑΡΧΙΤΕΚΤΟΝΙΚΗ
Web Server
WebPage
Access
Database Server
Injected SQLExecution!
Application Server
InputValidation
Flaw
ΠΩΣ;
Εισάγοντας δηλώσεις SQL στα πεδία καταχώρησης φορμών ιστοσελίδων
• Πχ. αλλαγή ή διαγραφή περιεχομένου σε ΒΔ πιστωτικών καρτών ή κωδικών πρόσβασης
ΕΥΠΑΘΕΙΑ
Ελλιπής ή λανθασμένη επαλήθευση (validation) των δεδομένων εισόδου (input data) μιας εφαρμογής σε:
• φόρμες (μέθοδοι HTTP GET και POST)• links (μέθοδος HTTP GET)
ΑΝΑΛΥΣΗ ΜΙΑΣ ΕΥΠΑΘΟΥΣWEB ΕΦΑΡΜΟΓΗΣ
ΠΑΡΑΔΕΙΓΜΑ 1
Έστω πίνακας «employees» σε μια ΒΔ MySQLΕυπαθές block κώδικα PHP
<?php $qry = "SELECT employeeid, fullname, salary FROM employees " . "WHERE employeeid =" . $_GET['employeeid']; $result = mysql_query($qry); ?>
Σκοπός είναι η εκτέλεση επερώτησεων της μορφής:SELECT employeeid, fullname, salary FROM employees WHERE employeeid = 3SELECT employeeid, fullname, salary FROM employees WHERE employeeid = 352
ΠΑΡΑΔΕΙΓΜΑ 1Το Employeeid είναι το πρωτεύον κλειδί στον πίνακα employees δίνεται μέσω browser, με χρήση της μεθόδου GET του HTTP με link της μορφής: http://www.example.com/employees.php?employeeid=3
Η τιμή της παραμέτρου GET «employeeid» που δίνεται στο URL, ΔΕΝ επαληθεύεται επαρκώς πριν την εκτέλεση της επερώτησης από τον κώδικα http://www.example.com/employees.php?employeeid=3 OR 1=1
Ως αποτέλεσμα θα εκτελεστεί στη βάση δεδομένων η εξής επερώτηση:
•SELECT employeeid, fullname, salary FROM employees WHERE employeeid=3 OR 1=1
Έτσι ενδέχεται ο κακόβουλος χρήστης να δει πληροφορίες που δεν είναι σκόπιμο
ΠΑΡΑΔΕΙΓΜΑ 2
Login formΕυπαθές block κώδικα PHP <?php $username = $_POST['username']; $password = $_POST['password']; $qry = "SELECT userid FROM users" . " WHERE username='$username' AND password='$password'"; $result = mysql_query($qry); if (mysql_numrows($result) > 0) { //log in user... } ?>
ΠΑΡΑΔΕΙΓΜΑ 2
Οι τιμές username και password δίνονται με χρήση μιας τυπικής web login φόρμας με τη μέθοδο HTTP POST
Αν δώσουμε στο πεδίο password: bar' OR 1=1 OR username='
έχουμε την εκτέλεση της επερώτησης:•SELECT userid FROM users WHERE username='foo'
AND password='bar' OR 1=1 OR username='';
Έτσι ενδέχεται η πρόσβαση στην εφαρμογή (login)
από άτομα που δεν είναι εξουσιοδοτημένα
ΠΑΡΑΔΕΙΓΜΑ 3
Πολλαπλές εντολές SQL ως μια επερώτηση στο σύστημαΟ μεγαλύτερος κίνδυνος στα SQL Injections!!!
Παράδειγμα ευπαθούς block κώδικα PHP <?php $qry = "SELECT employeeid, fullname, salary
FROM employees " . "WHERE employeeid =" . $_GET['employeeid']; $result = pg_query($qry); ?>
ΠΑΡΑΔΕΙΓΜΑ 3
Δεδομένα εισόδου από links της μορφής: http://www.example.com/employees.php?employeeid=3
Αποτέλεσμα η εκτέλεση της επερώτησης: SELECT employeeid, fullname, salary FROM employees WHERE employeeid = 3
ΠΑΡΑΔΕΙΓΜΑ 3
Ο κακόβουλος χρήστης δίνει τo εξής URL http://www.example.com/employees.php?employeeid=3;
DELETE FROM users;
Έτσι θα εκτελεστούν οι 2 εντολές: SELECT employeeid, fullname, salary FROM employees WHERE employeeid = 3; DELETE FROM users;
Διαγραφή όλων των δεδομένων του πίνακα users από τη βάση!
ΑΝΑΖΗΤΗΣΗ ΕΥΠΑΘΩΝ ΙΣΤΕΣΕΛΙΔΩΝ ΧΡΗΣΙΜΟΠΟΙΩΝΤΑΣ
GOOGLE DORKS
Αναζήτηση με τα
παρακάτω:
inurl:index.php?id=
inurl:index.php?catid=
inurl:news.php?id=
inurl:news.php?catid=
inurl:product.php?id=
Προσθέτουμε ’ στο τέλος του url και αν εμφανίσει error τότε η ιστοσελίδα είναι ευάλωτη σε SQLi επιθέσεις
Η ΔΥΝΑΜΗ ΤΟΥ «’»
Κλείνει την παράμετρο συμβολοσειράς
Ό,τι ακολουθεί θεωρείται μέρος της εντολής SQL
Παραπλανητικές προτάσεις Διαδικτύου περιλαμβάνουν:• Αποφύγετε το! : Αντικαταστήστε το με ’’
Τα αλφαριθμητικά πεδία είναι πολύ συχνά, αλλά
υπάρχουν και άλλα είδη πεδίων:• Αριθμητικά• Ημερομηνίες
ΑΝΑΖΗΤΗΣΗ ΙΣΤΟΣΕΛΙΔΩΝ ΕΥΠΑΘΩΝ ΣΕ SQL INJECTION
Automated and heuristic web vulnerability
scanner
Ανώφελο να ανιχνεύσουμε μόνο τις
αδυναμίες των γνωστών εφαρμογών
Πιο ευπαθείς είναι οι εφαρμογές που
προσαρμόζονται από τον χρήστη
SQLMAP
Open Source penetration testing tool
Αυτοματοποιεί τον εντοπισμό και την αξιοποίηση
των ελαττωμάτων SQLi και την ανάληψη των
εξυπηρετητών ΒΔ
Υποστήριξη για απαρίθμηση των χρηστών της ΒΔ,
«password hashes» των χρηστών, προνόμια, τους
ρόλους των χρηστών, ΒΔ, πίνακες και στήλες
SQLMAP
Αναγνώριση της μορφής των «password
hashes» και υποστηρίζονται για να
σπάσουν με επίθεση λεξικού
Εντοπισμός των πινάκων που περιέχουν
διαπιστευτήρια όπου τα ονόματα αντίστοιχων
στηλών περιέχουν συμβολοσειρές όπως
το name και pass
SQLMAP - ΤΕΧΝΙΚΕΣ
Boolean-based blind SQL injection ή inferential
SQL injection
Time-based blind SQL injection ή blind SQL
injection
Error-based SQL injection
UNION query SQL injection ή inband SQL
injection
Stacked queries SQL injection ή multiple
statements SQL injection
ΠΩΣ ΑΠΟΦΕΥΓΟΥΜΕSQL INJECTIONS;
Αποφεύγουμε χαρακτήρες όπως:• quotes, slash, backslash, semicolon, NULL, new line, κλπ
που εντοπίζονται σε:• πεδία από φόρμες εισαγωγής από τους χρήστες
• παραμέτρους στο URL
• τιμές από cookies
ΠΩΣ ΑΠΟΦΕΥΓΟΥΜΕSQL INJECTIONS;
Όλα τα νούμερα μετατρέπονται σε ακεραίους
Διαγραφή των stored procedures που δεν σας αρέσουν και δεν χρειάζεστε όπως:
• master..Xp_cmdshell,
• xp_startmail,
• xp_sendmail,
• sp_makewebtask
ΣΥΜΠΕΡΑΣΜΑΤΑ
Η SQL Injection είναι συναρπαστική και
επικίνδυνη ευπάθεια
Όλες οι γλώσσες προγραμματισμού και ΒΔ
SQL είναι δυνητικά ευάλωτες
Προστασία από SQLi απαιτεί:• ανθεκτικό σχεδιασμό• σωστή επικύρωση των δεδομένων εισόδου
ΣΑΣ ΕΥΧΑΡΙΣΤΟΥΜΕ!
Απορίες;;
Top Related