SlideShare una empresa de Scribd logo
1 de 23
Descargar para leer sin conexión
Tematiche avanzate di SQL 
                    Injection: tool di testing e metodi 
                                 di difesa

                        Antonio Parata
                        collaboratore OWASP­Italy
                        http://www.ictsc.it
                        antonio.parata@ictsc.it

OWASP                           
Infosecurity 2007
                        http://www.owasp.org/index.php/Italy
                        Copyright © The OWASP Foundation
                        Permission is granted to copy, distribute and/or modify this document 
                        under the terms of the OWASP License.




                        The OWASP Foundation
                        http://www.owasp.org 
 Tematiche avanzate di SQL Injection: tool di testing e 
                  metodi di difesa


    Introduzione

    SQL Injection e metodi di inferenza

    Il tool: Sqldumper

    Rendersi immuni all'SQL Injection

    Conclusioni




                                               OWASP       2
 Tematiche avanzate di SQL Injection: tool di testing e 
                  metodi di difesa


    Introduzione

    SQL Injection e metodi di inferenza

    Il tool: Sqldumper

    Rendersi immuni all'SQL Injection

    Conclusioni




                                               OWASP       3
Introduzione – perché parlare di sql injection?




                                        OWASP     4
Introduzione – un pò di storia


                      Nel 1998 Rain Forest Puppy pubblica su Phrack 54 
                      un articolo dal titolo “NT Web Technology Vulnerabilities”.
                      Anche se il termine SQL Injection non viene menzionato
                      viene presentato alla comunità uno degli attacchi più
                      insidiosi che le applicazioni web abbiano mai incontrato.



Nel settembre del 2005 David Litchfield publica un paper
dal titolo “Data­mining with SQL Injection and Inference” 
basato sulla presentazione fatta al Blackhat europe.
É la nascita di una nuova metodologia di SQL Injection 
basata su tecniche di inferenza. 
Altro duro colpo per la sicurezza delle applicazioni web.
                                                                   OWASP            5
Introduzione – parliamo di SQL Injection
L'SQL Injection è un particolare tipo di attacco il cui scopo è quello di indurre il 
database ad eseguire query SQL non lecite.

Consideriamo la seguente query:

SELECT * FROM Tabella WHERE username='$user' AND password='$pass'

$user e $pass sono impostate dall'utente e supponiamo che nessun controllo su di 
esse venga fatto.
Vediamo cosa succede inserendo i seguenti valori:

$user  = ' or '1' = '1
$pass = ' or '1' = '1

La query risultante sarà:

SELECT * FROM Tabella WHERE username='' or '1' = '1' AND password='' or 
'1' = '1'
                                                                         OWASP          6
 Tematiche avanzate di SQL Injection: tool di testing e 
                  metodi di difesa


    Introduzione

    SQL Injection e metodi di inferenza

    Il tool: Sqldumper

    Rendersi immuni all'SQL Injection

    Conclusioni




                                               OWASP       7
SQL Injection e metodi di Inferenza

  Con il termine Inferenza si intende una conclusione tratta da un 
  insieme di fatti o circostanze.


In pratica ciò che viene fatto è eseguire alcuni test di verità sui parametri vulnerabili
e in base al risultato dedurre il valore del parametro. 

I test effettuati sono di tipo binario (vero/falso).

Per poter eseguire con successo l'attacco è dunque necessario saper distinguere 
il concetto di vero da quello di falso.

Utile in quei casi in cui non possiamo visualizzare direttamente il risultato 
della query oppure quando gli errori riportati dal DB server vengono 
mascherati (Blind Sql Injection).

                                                                        OWASP          8
SQL Injection e metodi di Inferenza

Supponiamo che nell'applicazione che stiamo testando, vi sia un parametro 
vulnerabile, ad esempio id.

Per prima cosa creiamo una query sintatticamente corretta che restituisca un 
valore falso, ad esempio:

id = aaa'  and '1' = '2

Con questa query otteremo sicuramente un valore falso. In particolare il “valore
falso” è rappresentato dal contenuto della pagina web ritornata.




                                                                     OWASP         9
SQL Injection e metodi di Inferenza
Diamo inizio alle danze...

Ciò che andremo a fare è cercare di determinare il valore di ogni singolo carattere 
del parametro di cui vogliamo scoprire il valore.

In pratica, ci chiederemo:

“Il carattere 1 del parametro è uguale ad a?” => NO
“Il carattere 1 del parametro è uguale a b?” => NO
“Il carattere 1 del parametro è uguale a c?” => NO
“Il carattere 1 del parametro è uguale a d?” => SI

Conosciamo il valore del primo carattere, procediamo con il secondo

“Il carattere 2 del parametro è uguale ad a?” => NO
“Il carattere 2 del parametro è uguale a b?” => SI

Conosciamo il valore del secondo carattere, procediamo in questo modo fino a
scoprire i valori di tutti i caratteri che compongono il valore del parametro.
                                                                     OWASP         10
SQL Injection e metodi di Inferenza
Come facciamo a capire quando abbiamo esaminato tutta la stringa?

Abbiamo accennato al fatto che la funzione substring ritorna un valore null (pari al 
valore ASCII 0) quando l'indice da cui cominciare a considerare la sottostringa è 
maggiore della lunghezza della stringa stessa.

A questo punto basta verificare che il valore del carattere su cui stiamo facendo 
inferenza sia uguale a 0 per dedurre che abbiamo esaminato tutta la stringa.

Ma...
e se il valore della variabile su cui stiamo facendo inferenza contenesse il 
carattere ASCII 0?

Generalmente ciò non accade con gli input inseriti dall'utente, ma invece può 
accadere nel caso volessimo ricavare il valore di un file (binario).




                                                                      OWASP          11
SQL Injection e metodi di Inferenza
Soluzione: fare inferenza sulla lunghezza.

È inoltre necessario tenere memoria di quanti caratteri ho fino ad ora scoperto.

Detto n il numero di caratteri fino ad ora ricavati, mi chiedo:

La lunghezza della stringa rappresentante il valore è uguale a n?

SI   => ho finito di fare inferenza

NO => il valore contiene il carattere ASCII 0, continuo a fare inferenza sul
prossimo carattere. 




                                                                    OWASP      12
SQL Injection e metodi di Inferenza
Un breve esempio.

• Goal:  Vogliamo ricavare il contenuto del file /etc/shadow
• Il DB server è eseguito con i privilegi di amministratore (root)
• Il prametro id è vulnerabile all'SQL Injection 
• Supponiamo che il DBMS sia MySql.


Le richieste che andremo ad eseguire sono della seguente forma:

http://www.mysite.com/index.php?id=20'%20
and%20ASCII(SUBSTRING(LOAD_FILE(quot;/etc/shadowquot;),1,1))=97/*

Supponendo di aver ricavato 8 caratteri, e di aver incontrato il valore null, la query
da eseguire per fare inferenza sul valore della lunghezza è:

http://www.mysite.com/index.php?id=20'%20
and%20CHAR_LENGTH(LOAD_FILE(quot;/etc/shadowquot;))=8/*

                                                                     OWASP          13
 Tematiche avanzate di SQL Injection: tool di testing e 
                  metodi di difesa


    Introduzione

    SQL Injection e metodi di inferenza

    Il tool: Sqldumper

    Rendersi immuni all'SQL Injection

    Conclusioni




                                               OWASP       14
Il tool: Sqldumper

 Purtroppo necessito di un numero di query molto alto, per portare a termine 

l'attacco.



 Posso automatizzare “facilmente” la fase di testing tramite tool. Noi 

vedremo SqlDumper.

 

 SqlDumper permette di effettuare il dump di un file presente sul filesystem 

(diritti di accesso permettendo), sfruttando una vulnerabilità da Sql Injection, 

basandosi sui metodi di inferenza.

                                                                      OWASP         15
Il tool: Sqldumper

Utilizzo:

 Verificare che la vulnerabilità sia 

“exploitabile” (ad esempio 

aggiungendo il classico ' and '1' = '1 e 

verificando che il contenuto non cambi)

 Inserire i parametri richiesti

 Premere start :)




                                                   OWASP   16
 Tematiche avanzate di SQL Injection: tool di testing e 
                  metodi di difesa


    Introduzione

    SQL Injection e metodi di inferenza

    Il tool: Sqldumper

    Rendersi immuni all'SQL Injection

    Conclusioni




                                               OWASP       17
Rendersi immuni all'SQL Injection

prepared statements

   • Permettono di realizzare query più sicure (separazione tra logica e dati)

   • Dotate di prestazioni migliori

   • Presenti in PHP 5 (e nella maggior parte dei linguaggi di sviluppo web)
Funzionamento

   • Si crea un modello di query e lo si invia al DB server (ad esempio MySql)

   • Il server ne controlla la validità, se la query è ben formata la memorizza in 

   un buffer e ritorna un handle che verrà utilizzato per riferirsi alla query.

   • Si effettua il collegamento delle variabili di input

   • Recupero dei dati 
                                                                       OWASP          18
Rendersi immuni all'SQL Injection
Funziona veramente?
mysql> PREPARE st FROM quot;SELECT * FROM test WHERE username = ?quot;;
Query OK, 0 rows affected (0.09 sec)
Statement prepared
mysql> SET @username = quot;root or 1 = 1quot;;
Query OK, 0 rows affected (0.04 sec)
mysql> EXECUTE st USING @username;
Empty set (0.02 sec)
mysql> SET @username = quot;rootquot;;
Query OK, 0 rows affected (0.01 sec)
mysql> EXECUTE st USING @username;
+­­­­­­­­­­­­­­+­­­­­­­­­­­­­+­­­­­­­­­­­­­­­­­­­­­­­+
| username | password | email                   |
+­­­­­­­­­­­­­­+­­­­­­­­­­­­­+­­­­­­­­­­­­­­­­­­­­­­­+
| root           | adm1n     | root@localhost.it |
+­­­­­­­­­­­­­­+­­­­­­­­­­­­­+­­­­­­­­­­­­­­­­­­­­­­­+ OWASP      19
Rendersi immuni all'SQL Injection

Esempio di codice PHP

$db_connection = new mysqli(quot;localhostquot;, quot;userquot;, quot;passquot;, quot;dbquot;);




$st = $db_connection­>prepare(quot;SELECT * FROM users WHERE id = ?quot;);

$st­>bind_param(quot;iquot;, $_GET['id']);

$st­>execute();




var_dump($st);




                                                        OWASP        20
 Tematiche avanzate di SQL Injection: tool di testing e 
                  metodi di difesa


    Introduzione

    SQL Injection e metodi di inferenza

    Il tool: Sqldumper

    Valutare il rischio associato alla minaccia

    Conclusioni




                                               OWASP       21
Conclusioni


    L'Sql Injection è un attacco molto potente e soprattutto 
    facile da mettere in atto.

    Le tecniche di inferenza permettono di ricavare non solo 
    il valore dei campi, ma di effettuare anche il dump di file 
    presenti sul filesystem.

    É un attacco che può essere facilmente automatizzato.

    Spesso si ricorre ad una validazione dell'input di tipo 
    “aperto” (ovvero se non specificatamente negato lo 
    permetto). Esistono comunque metodi di protezione più 
    semplici e più performati come i prepared statement.


                                                      OWASP        22
Grazie per l'attenzione.




                      OWASP   23

Más contenido relacionado

Destacado

In the hospital
In the hospitalIn the hospital
In the hospitalcprgraus
 
Web Application Security: Bug Hunting e Code Review
Web Application Security: Bug Hunting e Code ReviewWeb Application Security: Bug Hunting e Code Review
Web Application Security: Bug Hunting e Code ReviewAntonio Parata
 
HackInBo2k16 - Threat Intelligence and Malware Analysis
HackInBo2k16 - Threat Intelligence and Malware AnalysisHackInBo2k16 - Threat Intelligence and Malware Analysis
HackInBo2k16 - Threat Intelligence and Malware AnalysisAntonio Parata
 
the explore
the explorethe explore
the explorecprgraus
 
Teknis pelaksanaan intergrasi pnpm mp dan pnpm pusaka revisi
Teknis pelaksanaan intergrasi pnpm mp dan pnpm pusaka revisiTeknis pelaksanaan intergrasi pnpm mp dan pnpm pusaka revisi
Teknis pelaksanaan intergrasi pnpm mp dan pnpm pusaka revisiayi sugandhi
 

Destacado (11)

In the hospital
In the hospitalIn the hospital
In the hospital
 
Owasp Day 3
Owasp Day 3Owasp Day 3
Owasp Day 3
 
Smau 2007
Smau 2007Smau 2007
Smau 2007
 
Web Application Security: Bug Hunting e Code Review
Web Application Security: Bug Hunting e Code ReviewWeb Application Security: Bug Hunting e Code Review
Web Application Security: Bug Hunting e Code Review
 
Infosecurity 2008
Infosecurity 2008Infosecurity 2008
Infosecurity 2008
 
.NET for hackers
.NET for hackers.NET for hackers
.NET for hackers
 
HackInBo2k16 - Threat Intelligence and Malware Analysis
HackInBo2k16 - Threat Intelligence and Malware AnalysisHackInBo2k16 - Threat Intelligence and Malware Analysis
HackInBo2k16 - Threat Intelligence and Malware Analysis
 
Openexp 2006
Openexp 2006Openexp 2006
Openexp 2006
 
the explore
the explorethe explore
the explore
 
Teknis pelaksanaan intergrasi pnpm mp dan pnpm pusaka revisi
Teknis pelaksanaan intergrasi pnpm mp dan pnpm pusaka revisiTeknis pelaksanaan intergrasi pnpm mp dan pnpm pusaka revisi
Teknis pelaksanaan intergrasi pnpm mp dan pnpm pusaka revisi
 
Nss 2007
Nss 2007Nss 2007
Nss 2007
 

Similar a Infosecurity 2007

Sicurezza Informatica e Hacking - Università di Teramo 23/10/2015
Sicurezza Informatica e Hacking - Università di Teramo 23/10/2015Sicurezza Informatica e Hacking - Università di Teramo 23/10/2015
Sicurezza Informatica e Hacking - Università di Teramo 23/10/2015Pawel Zorzan Urban
 
Sql Injection: attacchi e rimedi
Sql Injection: attacchi e rimediSql Injection: attacchi e rimedi
Sql Injection: attacchi e rimediDavide Micale
 
Hackers vs Developers - SQL Injection - Attacco e Difesa
Hackers vs Developers - SQL Injection - Attacco e DifesaHackers vs Developers - SQL Injection - Attacco e Difesa
Hackers vs Developers - SQL Injection - Attacco e DifesaSimone Onofri
 
Presentazione Testing automatizzato
Presentazione Testing automatizzatoPresentazione Testing automatizzato
Presentazione Testing automatizzatoangelolu
 
Progetti Open Source Per La Sicurezza Delle Web Applications
Progetti Open Source Per La Sicurezza Delle Web ApplicationsProgetti Open Source Per La Sicurezza Delle Web Applications
Progetti Open Source Per La Sicurezza Delle Web ApplicationsMarco Morana
 
Sicurezza Applicatica Dalla Teoria Alla Pratica
Sicurezza Applicatica Dalla Teoria Alla PraticaSicurezza Applicatica Dalla Teoria Alla Pratica
Sicurezza Applicatica Dalla Teoria Alla PraticaPaolo Perego
 
Laboratorio Di Basi Di Dati 08 Il Web Server Apache
Laboratorio Di  Basi Di  Dati 08  Il  Web Server  ApacheLaboratorio Di  Basi Di  Dati 08  Il  Web Server  Apache
Laboratorio Di Basi Di Dati 08 Il Web Server Apacheguestbe916c
 
Sviluppare plugin per WordPress: Best Practice e Silver Bullet
Sviluppare plugin per WordPress: Best Practice e Silver BulletSviluppare plugin per WordPress: Best Practice e Silver Bullet
Sviluppare plugin per WordPress: Best Practice e Silver BulletLuca Bartoli
 
Owasp italy day sparql injection attacking triple store semantic web applicat...
Owasp italy day sparql injection attacking triple store semantic web applicat...Owasp italy day sparql injection attacking triple store semantic web applicat...
Owasp italy day sparql injection attacking triple store semantic web applicat...Simone Onofri
 
TechDay: Hackers vs. Developers - Le SQL Injection - Simone Onofri
TechDay: Hackers vs. Developers - Le SQL Injection - Simone OnofriTechDay: Hackers vs. Developers - Le SQL Injection - Simone Onofri
TechDay: Hackers vs. Developers - Le SQL Injection - Simone OnofriCodemotion
 
festival ICT 2013: Sicurezza delle applicazioni web
festival ICT 2013: Sicurezza delle applicazioni webfestival ICT 2013: Sicurezza delle applicazioni web
festival ICT 2013: Sicurezza delle applicazioni webfestival ICT 2016
 
TDD in WordPress
TDD in WordPressTDD in WordPress
TDD in WordPresslucatume
 
Introduzione a JavaScript e jQuery (1/2)
Introduzione a JavaScript e jQuery (1/2)Introduzione a JavaScript e jQuery (1/2)
Introduzione a JavaScript e jQuery (1/2)Giuseppe Vizzari
 
festival ICT 2013: Gestire criticità in maniera efficiente per liberare slot ...
festival ICT 2013: Gestire criticità in maniera efficiente per liberare slot ...festival ICT 2013: Gestire criticità in maniera efficiente per liberare slot ...
festival ICT 2013: Gestire criticità in maniera efficiente per liberare slot ...festival ICT 2016
 

Similar a Infosecurity 2007 (20)

Sicurezza Informatica e Hacking - Università di Teramo 23/10/2015
Sicurezza Informatica e Hacking - Università di Teramo 23/10/2015Sicurezza Informatica e Hacking - Università di Teramo 23/10/2015
Sicurezza Informatica e Hacking - Università di Teramo 23/10/2015
 
Sql Injection: attacchi e rimedi
Sql Injection: attacchi e rimediSql Injection: attacchi e rimedi
Sql Injection: attacchi e rimedi
 
Hackers vs Developers - SQL Injection - Attacco e Difesa
Hackers vs Developers - SQL Injection - Attacco e DifesaHackers vs Developers - SQL Injection - Attacco e Difesa
Hackers vs Developers - SQL Injection - Attacco e Difesa
 
Presentazione Testing automatizzato
Presentazione Testing automatizzatoPresentazione Testing automatizzato
Presentazione Testing automatizzato
 
Progetti Open Source Per La Sicurezza Delle Web Applications
Progetti Open Source Per La Sicurezza Delle Web ApplicationsProgetti Open Source Per La Sicurezza Delle Web Applications
Progetti Open Source Per La Sicurezza Delle Web Applications
 
Sicurezza Applicatica Dalla Teoria Alla Pratica
Sicurezza Applicatica Dalla Teoria Alla PraticaSicurezza Applicatica Dalla Teoria Alla Pratica
Sicurezza Applicatica Dalla Teoria Alla Pratica
 
Owasp parte1-rel1.1
Owasp parte1-rel1.1Owasp parte1-rel1.1
Owasp parte1-rel1.1
 
Laboratorio Di Basi Di Dati 08 Il Web Server Apache
Laboratorio Di  Basi Di  Dati 08  Il  Web Server  ApacheLaboratorio Di  Basi Di  Dati 08  Il  Web Server  Apache
Laboratorio Di Basi Di Dati 08 Il Web Server Apache
 
Owasp parte3
Owasp parte3Owasp parte3
Owasp parte3
 
Linux Day2005
Linux Day2005Linux Day2005
Linux Day2005
 
Sviluppare plugin per WordPress: Best Practice e Silver Bullet
Sviluppare plugin per WordPress: Best Practice e Silver BulletSviluppare plugin per WordPress: Best Practice e Silver Bullet
Sviluppare plugin per WordPress: Best Practice e Silver Bullet
 
Owasp italy day sparql injection attacking triple store semantic web applicat...
Owasp italy day sparql injection attacking triple store semantic web applicat...Owasp italy day sparql injection attacking triple store semantic web applicat...
Owasp italy day sparql injection attacking triple store semantic web applicat...
 
TechDay: Hackers vs. Developers - Le SQL Injection - Simone Onofri
TechDay: Hackers vs. Developers - Le SQL Injection - Simone OnofriTechDay: Hackers vs. Developers - Le SQL Injection - Simone Onofri
TechDay: Hackers vs. Developers - Le SQL Injection - Simone Onofri
 
festival ICT 2013: Sicurezza delle applicazioni web
festival ICT 2013: Sicurezza delle applicazioni webfestival ICT 2013: Sicurezza delle applicazioni web
festival ICT 2013: Sicurezza delle applicazioni web
 
TDD in WordPress
TDD in WordPressTDD in WordPress
TDD in WordPress
 
Introduzione a JavaScript e jQuery (1/2)
Introduzione a JavaScript e jQuery (1/2)Introduzione a JavaScript e jQuery (1/2)
Introduzione a JavaScript e jQuery (1/2)
 
Unit testing 101
Unit testing 101Unit testing 101
Unit testing 101
 
One pagepdf
One pagepdfOne pagepdf
One pagepdf
 
festival ICT 2013: Gestire criticità in maniera efficiente per liberare slot ...
festival ICT 2013: Gestire criticità in maniera efficiente per liberare slot ...festival ICT 2013: Gestire criticità in maniera efficiente per liberare slot ...
festival ICT 2013: Gestire criticità in maniera efficiente per liberare slot ...
 
Silex, iniziamo
Silex, iniziamoSilex, iniziamo
Silex, iniziamo
 

Infosecurity 2007