SQL Injection

Post on 29-Oct-2014

50 views 4 download

Tags:

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 of SQL Injection

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 απαιτεί:• ανθεκτικό σχεδιασμό• σωστή επικύρωση των δεδομένων εισόδου

ΣΑΣ ΕΥΧΑΡΙΣΤΟΥΜΕ!

Απορίες;;