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.
Ε ΤΑ ΛΩΣ Ε Β Δ Κ Α Ι ΓΛ Ω Ε
Π Ρ Ο Γ ΡΑ Μ Μ ΑΣ Ι Μ ΟΤ
Πρόςβαςη μϋςω εφαρμογών που ϋχουν αναπτυχθεύ με χρόςη:
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
ΕΤΠΑΘΕΙΑ
Ελλιπόσ ό λανθαςμϋνηεπαλόθευςη (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) από ϊτομα
που δεν εύναι εξουςιοδοτημϋνα
ΠΑΡΑΔΕΙΓΜΑ 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 Sourcepenetration testing tool
Αυτοματοποιεύ τον εντοπιςμό και την αξιοπούηςη των
ελαττωμϊτων SQLi και την ανϊληψη των εξυπηρετητών ΒΔ
Τποςτόριξη για απαρύθμηςη των χρηςτών τησ ΒΔ, «password
hashes» των χρηςτών, προνόμια, τουσ ρόλουσ των χρηςτών,
ΒΔ, πύνακεσ και ςτόλεσ
24.
SQLMAP
Αναγνώριςη τησ μορφόστων «password hashes»
και υποςτηρύζονται για να ςπϊςουν με επύθεςη
λεξικού
Εντοπιςμόσ των πινϊκων που περιϋχουν
διαπιςτευτόρια όπου τα ονόματα αντύςτοιχων ςτηλών
περιϋχουν ςυμβολοςειρϋσ όπωσ το name και pass
ΠΩ ΑΠΟ ΥΕΤΓΟΤΜΕ
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.
ΤΜΠΕΡΑΜΑΣΑ
Η SQLInjection εύναι ςυναρπαςτικό και επικύνδυνη
ευπϊθεια
Όλεσ οι γλώςςεσ προγραμματιςμού και ΒΔ SQL εύναι
δυνητικϊ ευϊλωτεσ
Προςταςύα από SQLi απαιτεύ:
• ανθεκτικό ςχεδιαςμό
• ςωςτό επικύρωςη των δεδομϋνων ειςόδου