sql injection
DESCRIPTION
SQL Injection Project for lecture "Computer Systems Security" You can find a SQL Injection Attack with sqlmap here: http://www.youtube.com/watch?v=wAwUv5dzwLk It was performed for educational purposes ONLY.TRANSCRIPT
![Page 1: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/1.jpg)
SQL INJECTION
System Security projectSapountzi EleniSiganos Marios
University of Central GreeceComputer Science and Biomedical Informatics
![Page 2: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/2.jpg)
ΤΙ ΕΙΝΑΙ;Τεχνική που χρησιμοποιείται συχνά για επιθέσεις σε ΒΔ μέσω
δικτυακού τόπου
Τεχνική έγχυσης (εισαγωγής) κώδικα που εκμεταλλεύεται μία
ευπάθεια ασφαλείας στο λογισμικό ενός ιστοτόπου
Οι επιθέσεις SQL injections εμφανίστηκαν ταυτόχρονα με τις
πρώτες εφαρμογές web
Μεγάλος ο αριθμός των συστημάτων που είναι ευάλωτα στις
επιθέσεις SQL Injections
Εύκολα μπορεί να διερευνηθεί σε μια εφαρμογή και με
κατάλληλη πρόβλεψη να αποφευχθεί
![Page 3: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/3.jpg)
ΚΟΡΥΦΑΙΕΣ 7 ΕΠΙΘΕΣΕΙΣ
![Page 4: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/4.jpg)
ΜΠΟΡΟΥΜΕ ΝΑ ΠΡΑΓΜΑΤΟΠΟΙΗΣΟΥΜΕ ΜΙΑ
ΤΕΤΟΙΑ ΕΠΙΘΕΣΗ;
ΝΑΙ μπορούμε!
![Page 5: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/5.jpg)
ΕΥΑΛΩΤΕΣ ΒΔ ΚΑΙ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ
Σχεδόν όλες οι βάσεις δεδομένων SQL και γλώσσες προγραμματισμού είναι δυνητικά ευάλωτες, πχ:
MS SQL ServerOracle MySQLPostgresDB2 MS Access SybaseInformix, κλπ.
![Page 6: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/6.jpg)
ΕΥΑΛΩΤΕΣ ΒΔ ΚΑΙ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ
Πρόσβαση μέσω εφαρμογών που έχουν αναπτυχθεί
με χρήση:
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)
![Page 7: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/7.jpg)
ΑΝΑΛΥΣΗ
Τι χρειαζόμαστε;• Απλά έναν web browser
Τι πρέπει να ψάξουμε;• Σελίδες που επιτρέπουν την εισαγωγή δεδομένων
όπως: • login page • search page• feedback κλπ.
• HTML σελίδες που χρησιμοποιούν POST εντολές γιανα στείλουν τις σχετικές παραμέτρους σε κάποια σελίδα ASP
![Page 8: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/8.jpg)
ΑΝΑΛΥΣΗ
Υπάρχει δυνατότητα απομακρυσμένης εκτέλεσης με
SQL Injection;• Η SQL δίνει την δυνατότητα στους developers να
κάνουν ΤΑ ΠΑΝΤΑ σε ένα σύστημα
• O SQL Server τρέχει σαν SYSTEM, δηλαδή τα δικαιώματα που έχει είναι επιπέδου administrator στο σύστημα
• Οπότε μπορούμε να αποκτήσουμε εύκολα πρόσβαση, αφού μπορούμε να τρέξουμε ότι θέλουμε
![Page 9: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/9.jpg)
ΑΡΧΙΤΕΚΤΟΝΙΚΗ
Web Server
WebPage
Access
Database Server
Injected SQLExecution!
Application Server
InputValidation
Flaw
![Page 10: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/10.jpg)
ΠΩΣ;
Εισάγοντας δηλώσεις SQL στα πεδία καταχώρησης φορμών ιστοσελίδων
• Πχ. αλλαγή ή διαγραφή περιεχομένου σε ΒΔ πιστωτικών καρτών ή κωδικών πρόσβασης
![Page 11: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/11.jpg)
ΕΥΠΑΘΕΙΑ
Ελλιπής ή λανθασμένη επαλήθευση (validation) των δεδομένων εισόδου (input data) μιας εφαρμογής σε:
• φόρμες (μέθοδοι HTTP GET και POST)• links (μέθοδος HTTP GET)
![Page 12: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/12.jpg)
ΑΝΑΛΥΣΗ ΜΙΑΣ ΕΥΠΑΘΟΥΣWEB ΕΦΑΡΜΟΓΗΣ
![Page 13: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/13.jpg)
ΠΑΡΑΔΕΙΓΜΑ 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
![Page 14: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/14.jpg)
ΠΑΡΑΔΕΙΓΜΑ 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
Έτσι ενδέχεται ο κακόβουλος χρήστης να δει πληροφορίες που δεν είναι σκόπιμο
![Page 15: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/15.jpg)
ΠΑΡΑΔΕΙΓΜΑ 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... } ?>
![Page 16: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/16.jpg)
ΠΑΡΑΔΕΙΓΜΑ 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)
από άτομα που δεν είναι εξουσιοδοτημένα
![Page 17: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/17.jpg)
ΠΑΡΑΔΕΙΓΜΑ 3
Πολλαπλές εντολές SQL ως μια επερώτηση στο σύστημαΟ μεγαλύτερος κίνδυνος στα SQL Injections!!!
Παράδειγμα ευπαθούς block κώδικα PHP <?php $qry = "SELECT employeeid, fullname, salary
FROM employees " . "WHERE employeeid =" . $_GET['employeeid']; $result = pg_query($qry); ?>
![Page 18: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/18.jpg)
ΠΑΡΑΔΕΙΓΜΑ 3
Δεδομένα εισόδου από links της μορφής: http://www.example.com/employees.php?employeeid=3
Αποτέλεσμα η εκτέλεση της επερώτησης: SELECT employeeid, fullname, salary FROM employees WHERE employeeid = 3
![Page 19: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/19.jpg)
ΠΑΡΑΔΕΙΓΜΑ 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 από τη βάση!
![Page 20: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/20.jpg)
ΑΝΑΖΗΤΗΣΗ ΕΥΠΑΘΩΝ ΙΣΤΕΣΕΛΙΔΩΝ ΧΡΗΣΙΜΟΠΟΙΩΝΤΑΣ
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 επιθέσεις
![Page 21: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/21.jpg)
Η ΔΥΝΑΜΗ ΤΟΥ «’»
Κλείνει την παράμετρο συμβολοσειράς
Ό,τι ακολουθεί θεωρείται μέρος της εντολής SQL
Παραπλανητικές προτάσεις Διαδικτύου περιλαμβάνουν:• Αποφύγετε το! : Αντικαταστήστε το με ’’
Τα αλφαριθμητικά πεδία είναι πολύ συχνά, αλλά
υπάρχουν και άλλα είδη πεδίων:• Αριθμητικά• Ημερομηνίες
![Page 22: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/22.jpg)
ΑΝΑΖΗΤΗΣΗ ΙΣΤΟΣΕΛΙΔΩΝ ΕΥΠΑΘΩΝ ΣΕ SQL INJECTION
Automated and heuristic web vulnerability
scanner
Ανώφελο να ανιχνεύσουμε μόνο τις
αδυναμίες των γνωστών εφαρμογών
Πιο ευπαθείς είναι οι εφαρμογές που
προσαρμόζονται από τον χρήστη
![Page 23: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/23.jpg)
SQLMAP
Open Source penetration testing tool
Αυτοματοποιεί τον εντοπισμό και την αξιοποίηση
των ελαττωμάτων SQLi και την ανάληψη των
εξυπηρετητών ΒΔ
Υποστήριξη για απαρίθμηση των χρηστών της ΒΔ,
«password hashes» των χρηστών, προνόμια, τους
ρόλους των χρηστών, ΒΔ, πίνακες και στήλες
![Page 24: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/24.jpg)
SQLMAP
Αναγνώριση της μορφής των «password
hashes» και υποστηρίζονται για να
σπάσουν με επίθεση λεξικού
Εντοπισμός των πινάκων που περιέχουν
διαπιστευτήρια όπου τα ονόματα αντίστοιχων
στηλών περιέχουν συμβολοσειρές όπως
το name και pass
![Page 25: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/25.jpg)
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
![Page 26: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/26.jpg)
ΠΩΣ ΑΠΟΦΕΥΓΟΥΜΕSQL INJECTIONS;
Αποφεύγουμε χαρακτήρες όπως:• quotes, slash, backslash, semicolon, NULL, new line, κλπ
που εντοπίζονται σε:• πεδία από φόρμες εισαγωγής από τους χρήστες
• παραμέτρους στο URL
• τιμές από cookies
![Page 27: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/27.jpg)
ΠΩΣ ΑΠΟΦΕΥΓΟΥΜΕSQL INJECTIONS;
Όλα τα νούμερα μετατρέπονται σε ακεραίους
Διαγραφή των stored procedures που δεν σας αρέσουν και δεν χρειάζεστε όπως:
• master..Xp_cmdshell,
• xp_startmail,
• xp_sendmail,
• sp_makewebtask
![Page 28: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/28.jpg)
ΣΥΜΠΕΡΑΣΜΑΤΑ
Η SQL Injection είναι συναρπαστική και
επικίνδυνη ευπάθεια
Όλες οι γλώσσες προγραμματισμού και ΒΔ
SQL είναι δυνητικά ευάλωτες
Προστασία από SQLi απαιτεί:• ανθεκτικό σχεδιασμό• σωστή επικύρωση των δεδομένων εισόδου
![Page 29: SQL Injection](https://reader037.vdocuments.net/reader037/viewer/2022102618/544fd0dfaf7959cb398b89e6/html5/thumbnails/29.jpg)
ΣΑΣ ΕΥΧΑΡΙΣΤΟΥΜΕ!
Απορίες;;