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.
1. University of Central Greece
Computer Science and Biomedical Informatics
SQL INJECTION
System Security project
Sapountzi Eleni
Siganos Marios
2. ΣΙ ΕΙΝΑΙ;
Σεχνικό που χρηςιμοποιεύται ςυχνϊ για επιθϋςεισ ςε ΒΔ μϋςω
δικτυακού τόπου
Σεχνικό ϋγχυςησ (ειςαγωγόσ) κώδικα που εκμεταλλεύεται μύα
ευπϊθεια αςφαλεύασ ςτο λογιςμικό ενόσ ιςτοτόπου
Οι επιθϋςεισ SQL injections εμφανύςτηκαν ταυτόχρονα με τισ πρώτεσ
εφαρμογϋσ web
Μεγϊλοσ ο αριθμόσ των ςυςτημϊτων που εύναι ευϊλωτα ςτισ
επιθϋςεισ SQL Injections
Εύκολα μπορεύ να διερευνηθεύ ςε μια εφαρμογό και με κατϊλληλη
πρόβλεψη να αποφευχθεύ
4. Μ Π Ο Ρ ΟΤ Μ Ε Ν Α Π ΡΑ Γ Μ ΑΣ Ο Π Ο Ι Η ΟΤ Μ Ε
ΜΙΑ ΣΕΣΟΙΑ ΕΠΙΘΕΗ;
5. Ε ΤΑ Λ ΩΣ Ε Β Δ Κ Α Ι ΓΛ Ω Ε
Π Ρ Ο Γ ΡΑ Μ Μ ΑΣ Ι Μ ΟΤ
χεδόν όλεσ οι βϊςεισ δεδομϋνων SQL και γλώςςεσ
προγραμματιςμού εύναι δυνητικϊ ευϊλωτεσ, πχ:
MS SQL Server
Oracle
MySQL
Postgres
DB2
MS Access
Sybase
Informix, κλπ.
6. Ε ΤΑ Λ ΩΣ Ε Β Δ Κ Α Ι ΓΛ Ω Ε
Π Ρ Ο Γ ΡΑ Μ Μ ΑΣ Ι Μ ΟΤ
Πρόςβαςη μϋςω εφαρμογών που ϋχουν αναπτυχθεύ με χρόςη:
Perl και CGI scripts
ASP, JSP, PHP
XML, XSL και XSQL
Javascript
VB, MFC, και ϊλλα ODBC-based εργαλεύα και APIs
DB ςυγκεκριμϋνη web-based εφαρμογϋσ και το API
Reports and DB Applications
3 and 4GL-based languages (C, OCI, Pro * C, COBOL)
7. ΑΝΑΛΤΗ
Σι χρειαζόμαςτε;
• Απλϊ ϋναν web browser
Σι πρϋπει να ψϊξουμε;
• ελύδεσ που επιτρϋπουν την ειςαγωγό δεδομϋνων όπωσ:
• login page
• search page
• feedback κλπ.
• HTML ςελύδεσ που χρηςιμοποιούν POST εντολϋσ για
να ςτεύλουν τισ ςχετικϋσ παραμϋτρουσ ςε κϊποια ςελύδα ASP
8. ΑΝΑΛΤΗ
Τπϊρχει δυνατότητα απομακρυςμϋνησ εκτϋλεςησ με
SQL Injection;
• Η SQL δύνει την δυνατότητα ςτουσ developers να
κϊνουν ΣΑ ΠΑΝΣΑ ςε ϋνα ςύςτημα
• O SQL Server τρϋχει ςαν SYSTEM, δηλαδό τα
δικαιώματα που ϋχει εύναι επιπϋδου administrator ςτο
ςύςτημα
• Οπότε μπορούμε να αποκτόςουμε εύκολα πρόςβαςη,
αφού μπορούμε να τρϋξουμε ότι θϋλουμε
9. ΑΡΦΙΣΕΚΣΟΝΙΚΗ
Web Server Application Server Database Server
Web Input Injected SQL
Page Validation Execution!
Access Flaw
11. ΕΤΠΑΘΕΙΑ
Ελλιπόσ ό λανθαςμϋνη επαλόθευςη (validation)
των δεδομϋνων ειςόδου (input data) μιασ
εφαρμογόσ ςε:
• φόρμεσ (μϋθοδοι HTTP GET και POST)
• links (μϋθοδοσ HTTP GET)
12. Α Ν Α ΛΤ Η Μ Ι Α Ε Τ Π ΑΘ ΟΤ
W E B ΕΥΑ Ρ Μ Ο Γ Η
13. ΠΑΡΑΔΕΙΓΜΑ 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 = 3
SELECT employeeid, fullname, salary FROM employees
WHERE employeeid = 352
14. ΠΑΡΑΔΕΙΓΜΑ 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
Έτςι ενδϋχεται ο κακόβουλοσ χρόςτησ να δει πληροφορύεσ που δεν εύναι
ςκόπιμο
15. ΠΑΡΑΔΕΙΓΜΑ 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...
}
?>
16. ΠΑΡΑΔΕΙΓΜΑ 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) από ϊτομα
που δεν εύναι εξουςιοδοτημϋνα
18. ΠΑΡΑΔΕΙΓΜΑ 3
Δεδομϋνα ειςόδου από links τησ μορφόσ:
http://www.example.com/employees.php?employeeid=3
Αποτϋλεςμα η εκτϋλεςη τησ επερώτηςησ:
SELECT employeeid, fullname, salary FROM employees
WHERE employeeid = 3
19. ΠΑΡΑΔΕΙΓΜΑ 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 από τη βϊςη!
20. Α Ν Α Ζ Η Σ Η Η Ε Τ Π ΑΘ Ω Ν Ι Σ Ε Ε Λ Ι ΔΩ Ν
Φ Ρ Η Ι Μ Ο Π Ο Ι Ω Ν ΣΑ G O O G L E D O R K S
Αναζότηςη με τα παρακϊτω: Προςθϋτουμε ’ ςτο τϋλοσ
inurl:index.php?id= του url και αν εμφανύςει
error τότε η ιςτοςελύδα
inurl:index.php?catid= εύναι ευϊλωτη ςε SQLi
inurl:news.php?id= επιθϋςεισ
inurl:news.php?catid=
inurl:product.php?id=
21. Η ΔΤΝΑΜΗ ΣΟΤ «’»
Κλεύνει την παρϊμετρο ςυμβολοςειρϊσ
Ό,τι ακολουθεύ θεωρεύται μϋροσ τησ εντολόσ SQL
Παραπλανητικϋσ προτϊςεισ Διαδικτύου περιλαμβϊνουν:
• Αποφύγετε το! : Αντικαταςτόςτε το με ’’
Σα αλφαριθμητικϊ πεδύα εύναι πολύ ςυχνϊ, αλλϊ υπϊρχουν και
ϊλλα εύδη πεδύων:
• Αριθμητικϊ
• Ημερομηνύεσ
22. Α Ν Α Ζ Η Σ Η Η Ι ΣΟ Ε Λ Ι ΔΩ Ν
Ε Τ Π ΑΘ Ω Ν Ε S Q L I N J EC T I O N
Automated and heuristic web vulnerability scanner
Ανώφελο να ανιχνεύςουμε μόνο τισ αδυναμύεσ των
γνωςτών εφαρμογών
Πιο ευπαθεύσ εύναι οι εφαρμογϋσ που προςαρμόζονται
από τον χρόςτη
23. SQLMAP
Open Source penetration testing tool
Αυτοματοποιεύ τον εντοπιςμό και την αξιοπούηςη των
ελαττωμϊτων SQLi και την ανϊληψη των εξυπηρετητών ΒΔ
Τποςτόριξη για απαρύθμηςη των χρηςτών τησ ΒΔ, «password
hashes» των χρηςτών, προνόμια, τουσ ρόλουσ των χρηςτών,
ΒΔ, πύνακεσ και ςτόλεσ
24. SQLMAP
Αναγνώριςη τησ μορφόσ των «password hashes»
και υποςτηρύζονται για να ςπϊςουν με επύθεςη
λεξικού
Εντοπιςμόσ των πινϊκων που περιϋχουν
διαπιςτευτόρια όπου τα ονόματα αντύςτοιχων ςτηλών
περιϋχουν ςυμβολοςειρϋσ όπωσ το name και pass
26. ΠΩ ΑΠΟ ΥΕΤΓΟΤΜΕ
SQL INJECTIONS;
Αποφεύγουμε χαρακτόρεσ όπωσ:
• quotes, slash, backslash, semicolon, NULL, new line, κλπ
που εντοπύζονται ςε:
• πεδύα από φόρμεσ ειςαγωγόσ από τουσ χρόςτεσ
• παραμϋτρουσ ςτο URL
• τιμϋσ από cookies
27. ΠΩ ΑΠΟ ΥΕΤΓΟΤΜΕ
SQL INJECTIONS;
Όλα τα νούμερα μετατρϋπονται ςε ακεραύουσ
Διαγραφό των stored procedures που δεν ςασ αρϋςουν
και δεν χρειϊζεςτε όπωσ:
• master..Xp_cmdshell,
• xp_startmail,
• xp_sendmail,
• sp_makewebtask
28. ΤΜΠΕΡΑΜΑΣΑ
Η SQL Injection εύναι ςυναρπαςτικό και επικύνδυνη
ευπϊθεια
Όλεσ οι γλώςςεσ προγραμματιςμού και ΒΔ SQL εύναι
δυνητικϊ ευϊλωτεσ
Προςταςύα από SQLi απαιτεύ:
• ανθεκτικό ςχεδιαςμό
• ςωςτό επικύρωςη των δεδομϋνων ειςόδου