SlideShare a Scribd company logo
Vulnerabilità web
                Sql injection


19 maggio        Massimo Fornari – SQL Injection   1
Vulnerabilità web
    Si dividono in:
•   Cross-site scripting
•   SQL injection
•   Broken authentication
•   Information leakage

    Sono dovuti a scarsa attenzione degli sviluppatori



    19 maggio            Massimo Fornari – SQL Injection   2
Statistiche di vulnerabilità



                                                     Il problema risulta
                                                     evidente dal grafico




19 maggio          Massimo Fornari – SQL Injection                   3
Cross-site scripting (XSS)
• Inserisce script malevoli all’interno delle pagine
  tramite:
   – Form di immissione
   – Campi di ricerca
   – Parametri URL
• Lo script può modificare temporaneamente o
  permanentemente la pagina
• Consente di sottrarre dati e prendere il controllo


  19 maggio          Massimo Fornari – SQL Injection   4
Information leakage
• Si entra in possesso di informazioni sensibili
  tramite:
   – Analisi del sorgente
   – Messaggi di errore
   – Commenti




  19 maggio            Massimo Fornari – SQL Injection   5
Broken authentication
• Debolezza del sistema di controllo degli accessi,
  con possibilità di autenticazione fasulla:
   – Attacco di forza bruta
   – Credenziali semplici, per tentativi
   – Aggiramento del login




  19 maggio            Massimo Fornari – SQL Injection   6
SQL Injection
• SQL Injection: An attack technique used to
  exploit web sites by altering backend SQL
  statements through manipulating application
  input (Web applicazion security consortium)
• Sfrutta l’inadeguatezza dei controlli sui dati di
  input




  19 maggio          Massimo Fornari – SQL Injection   7
Test della vulnerabilità
• Per prima cosa l’attaccante cerca di capire se
  l’applicazione è vulnerabile
   – Inserisce statement propri di SQL al posto dei
     parametri
   – Controlla se il server esegue la query con successo
         • In questo caso l’applicazione è vulnerabile
         • Se il server ritorna un messaggio di errore lo si analizza alla
           ricerca di una possibile vulnerabilità




  19 maggio                   Massimo Fornari – SQL Injection                8
Test della vulnerabilità - continua
• Verificare un singolo parametro per volta
  inserendo stament SQL:
  – ‘ (single quote)
  – Select, where
• Questo ha lo scopo di causare errori nella query
• In caso il server risponda con errori contenenti
  “..SQL server…”, “ODBC”, “sintax” l’applicazione
  è vulnerabile


 19 maggio              Massimo Fornari – SQL Injection   9
Test della vulnerabilità - continua
• Altro modo per testare la vulnerabilità è inserire
  parametri corretti, seguiti da una nuova
  condizione sempre vera:
SELECT * FROM edizioni WHERE id = 7
• Inserendo 7 AND 1=1 la query rimane inalterata
  ma il server può reagire in 2 modi:
   – Esegue la query con successo: è certamente
     vulnerabile
   – Rifiuta la query: il server è stato reso sicuro (almeno
     nel punto appena testato)
  19 maggio              Massimo Fornari – SQL Injection       10
Authentication bypass
• È uno scenario classico di attacco
• Lo script che si occupa del login è vulnerabile:

     string sqlQuery = "SELECT id FROM Login WHERE
     Username='" + UserTextBox.Text + "'AND
     Password='" + PassowordTextBox.Text + "'";

     dr=command.ExecuteReader();
     if (dr.HasRows){/*login succesful*/}
             else {/*login faild*/}




  19 maggio          Massimo Fornari – SQL Injection   11
Authentication bypass - continua
• Se il testo inserito è quello che l’applicazione ci si
  aspetta tutto funziona.
• Se i parametri contengono caratteri propri del
  linguaggio SQL si modifica la query di
  autenticazione
• Inserendo ‘ OR ‘’=‘ sia come nome che come
  pw otteniamo la seguente interrogazione:
select id from Login where Username=‘’ or ‘’=‘’ and Password=‘’ or ‘’=‘’



  19 maggio               Massimo Fornari – SQL Injection           12
Authentication bypass - continua
• A questo punto la query estrae tutte le righe
  della tabella, in quanto la condizione WHERE è
  sempre verificata.
• In tale modo si è avuto accesso ad un’area
  riservata




 19 maggio             Massimo Fornari – SQL Injection   13
Altri scenari
• SQL injection può essere usata anche per altri
  scopi:
  – Ottenere dati “extra” da un’interrogazione
  – Forzare l’inserimento di nuove tuple
• Uno scenario possibile è quello di concatenare
  due query usando come separatore “;” oppure
  usare UNION per fare l’unione di 2 query in
  un’unica tabella



 19 maggio           Massimo Fornari – SQL Injection   14
Struttura del database
• Sfruttando il separatore “;” è possibile, per
  esempio, inserire una query del tipo:
              SELECT * FROM sys.tables; --
• Essa ha l’effetto di mostrare tutte le tabelle
  presenti nel database (la sequenza “--” serve a
  ignorare tutto ciò che viene dopo di essa”)
• L’informazione che se ne ricava permetterà
  all’attaccante di accedere alle informazioni
  desiderate.

  19 maggio                Massimo Fornari – SQL Injection   15
Considerazzioni
• È possibile inoltre sostituire la SELECT con una insert, al
  fine di inserire nuove tuple (tipicamente per ottenere
  un utente amministratore)
• Un attacco di questo tipo non è sempre possibile, in
  quanto richiede che il risultato della query venga
  visualizzato direttamente sullo schermo.
• Tuttavia è possibile comunque eseguire tali comandi
  anche senza vederne direttamente i risultati, si parla di
  BLIND SQL INJECTION in cui spesso si procede per
  tentativi


  19 maggio             Massimo Fornari – SQL Injection         16
Come proteggersi
• L’applicazione dovrebbe SEMPRE controllare i
  dati di input
• Rimuovere gli apici dalle query
• Convertire i parametri in formato URL
  (sostituisce i caratteri speciali nel formato %n).
• Nell’input sostituire gli apici con “ ’ ”
• Utilizzo di query parametriche (disponibile in
  tutti i linguaggi principali)


  19 maggio          Massimo Fornari – SQL Injection   17
Esempio query parametrica
OleDbCommand cm = new OleDbCommand("INSERT INTO Corrieri
   ([NomeSocietà], [Telefono]) VALUES (?, ?)", cn);

OleDbParameter prm = new OleDbParameter();
prm.Direction = ParameterDirection.Input;
prm.DbType = DbType.String;
prm.Value = "Dall'Ara Francescò";
cm.Parameters.Add(prm);

prm = new OleDbParameter();
prm.DbType = DbType.String;
prm.Value = "(555)123-456";
 cm.Parameters.Add(prm);




  19 maggio             Massimo Fornari – SQL Injection    18
Query parametrica
• Si vede come questa strutturazione, porta a
  forzare il tipo del parametro da inserire nella
  query, in modo che al momento della
  costruzione di quest’ultima venga controllata la
  correttezza.
• Questo pattern oltre a evitare problemi di
  sicurezza, risolve alcuni problemi di invio dei
  parametri



 19 maggio          Massimo Fornari – SQL Injection   19
Injector software
• Esistono software che consentono di testare e
  iniettare codice SQL senza passare dal browser
  – SQL power injector
     http://www.sqlpowerinjector.com/
  – Priamos
     http://www.priamos-project.com/




 19 maggio              Massimo Fornari – SQL Injection   20
Vulnerability tester
• Esistono inoltre software in grado di rilevare
  vulnerabilita web (la cosa è legale solo sul
  proprio sito oppure dopo aver ottenuto
  l’autorizzazione) non solo di SQL injection
   – Acunetix (versione trial oppure free limitata a XSS)
     http://www.acunetix.com/
   – Google skipfish
     http://code.google.com/p/skipfish/



  19 maggio            Massimo Fornari – SQL Injection      21
Bibbliografia
http://www.orkspace.net/secdocs/

http://www.intilinux.com/sicurezza/634/le-
  vulnerabilita-delle-applicazioni-web/

http://www.webappsec.org/




 19 maggio         Massimo Fornari – SQL Injection   22

More Related Content

PDF
Openexp 2006
PDF
Smau 2006
PPTX
Deftcon 2013 - Alessandro Rossetti & Massimiliano Dal Cero - OSint a supporto...
PDF
Inoltro di pacchetti ip in sistemi linux
PPTX
FDCC - SCAP - Overview
PDF
Clonare mac os x
PDF
sicurezza e php
PDF
Ip sec vulnerability
Openexp 2006
Smau 2006
Deftcon 2013 - Alessandro Rossetti & Massimiliano Dal Cero - OSint a supporto...
Inoltro di pacchetti ip in sistemi linux
FDCC - SCAP - Overview
Clonare mac os x
sicurezza e php
Ip sec vulnerability

Similar to Sql injection - intro (13)

PDF
Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazion...
PDF
festival ICT 2013: Sicurezza delle applicazioni web
PDF
Hackers vs Developers - SQL Injection - Attacco e Difesa
PDF
Web Application Security: Bug Hunting e Code Review
PDF
TechDay: Hackers vs. Developers - Le SQL Injection - Simone Onofri
PDF
Sicurezza Informatica e Hacking - Università di Teramo 23/10/2015
PPT
Owasp parte3
PDF
Sql Injection: attacchi e rimedi
PDF
Extended Summary of "Search-Based SQL Injection Attacks Testing using Genetic...
PPTX
Dal requisito all'implementazione @ CD2010
PPS
05 sicurezza delle applicazioni per le aziende nel settore della pubblica uti...
KEY
Sicurezza delle applicazioni web
PDF
(in)Sicurezza nella PA - Gianluca Varisco, Cybersecurity del Team per la Tras...
Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazion...
festival ICT 2013: Sicurezza delle applicazioni web
Hackers vs Developers - SQL Injection - Attacco e Difesa
Web Application Security: Bug Hunting e Code Review
TechDay: Hackers vs. Developers - Le SQL Injection - Simone Onofri
Sicurezza Informatica e Hacking - Università di Teramo 23/10/2015
Owasp parte3
Sql Injection: attacchi e rimedi
Extended Summary of "Search-Based SQL Injection Attacks Testing using Genetic...
Dal requisito all'implementazione @ CD2010
05 sicurezza delle applicazioni per le aziende nel settore della pubblica uti...
Sicurezza delle applicazioni web
(in)Sicurezza nella PA - Gianluca Varisco, Cybersecurity del Team per la Tras...
Ad

More from Ce.Se.N.A. Security (20)

PDF
Rilevamento di attacchi di rete tramite protocolli di monitoraggio per route...
PDF
Rilevamento di attacchi di rete tramite protocolli di monitoraggio per router...
TXT
Mona cheatsheet
TXT
Exploit techniques - a quick review
TXT
Msfpayload/Msfencoder cheatsheet
PDF
ICTF overview
PDF
Anonymous email
PDF
Hacking reti wireless
PDF
SELinux - overview
PDF
Analisi sulla sicurezza di una autovettura moderna
PDF
Sicurezza delle reti 802.11
PDF
Rilevamento intrusioni in wlan
PDF
Rainbow tables
PDF
Network monitoring tramite snmp
PDF
Monitoraggio di rete con nagios
PDF
Monitoraggio di mac address in lan
PDF
Insider attack
PDF
Crimini informatici e accesso abusivo
Rilevamento di attacchi di rete tramite protocolli di monitoraggio per route...
Rilevamento di attacchi di rete tramite protocolli di monitoraggio per router...
Mona cheatsheet
Exploit techniques - a quick review
Msfpayload/Msfencoder cheatsheet
ICTF overview
Anonymous email
Hacking reti wireless
SELinux - overview
Analisi sulla sicurezza di una autovettura moderna
Sicurezza delle reti 802.11
Rilevamento intrusioni in wlan
Rainbow tables
Network monitoring tramite snmp
Monitoraggio di rete con nagios
Monitoraggio di mac address in lan
Insider attack
Crimini informatici e accesso abusivo
Ad

Recently uploaded (9)

PDF
BÀI TẬP TEST BỔ TRỢ THEO TỪNG UNIT - TIẾNG ANH 10 FRIENDS GLOBAL - CẢ NĂM (24...
PPTX
SLIDE-DE-CURSOS-OssssFICIAL-DA-EGEPI-.pptx
PPTX
Copia di PROGETTO VIOLENZA sulle donne PCTO
PDF
GIÁO ÁN CHÍNH KHÓA TIẾNG ANH 9 - CẢ NĂM - THEO CÔNG VĂN 5512 (2 CỘT) NĂM HỌC ...
PDF
BÀI TẬP TEST BỔ TRỢ THEO TỪNG UNIT - TIẾNG ANH 10 EXPLORE NEW WORLDS - CẢ NĂM...
PDF
16 CHUYÊN ĐỀ BÀI TẬP ÔN THI TUYỂN SINH VÀO 10 - MÔN TIẾNG ANH - THEO FORM ĐỀ ...
PDF
Mazzoni-Reggi-2012-Effetto-Lucifero-Su-Wikipedia.pdf
PDF
CHUYÊN ĐỀ BỔ TRỢ NGỮ ÂM, TỪ VỰNG NÂNG CAO - TIẾNG ANH 9 VÀ ÔN THI VÀO LỚP 10 ...
PDF
GIÁO ÁN KẾ HOẠCH BÀI DẠY CHÍNH KHÓA TIẾNG ANH 9 - CẢ NĂM - THEO CÔNG VĂN 5512...
BÀI TẬP TEST BỔ TRỢ THEO TỪNG UNIT - TIẾNG ANH 10 FRIENDS GLOBAL - CẢ NĂM (24...
SLIDE-DE-CURSOS-OssssFICIAL-DA-EGEPI-.pptx
Copia di PROGETTO VIOLENZA sulle donne PCTO
GIÁO ÁN CHÍNH KHÓA TIẾNG ANH 9 - CẢ NĂM - THEO CÔNG VĂN 5512 (2 CỘT) NĂM HỌC ...
BÀI TẬP TEST BỔ TRỢ THEO TỪNG UNIT - TIẾNG ANH 10 EXPLORE NEW WORLDS - CẢ NĂM...
16 CHUYÊN ĐỀ BÀI TẬP ÔN THI TUYỂN SINH VÀO 10 - MÔN TIẾNG ANH - THEO FORM ĐỀ ...
Mazzoni-Reggi-2012-Effetto-Lucifero-Su-Wikipedia.pdf
CHUYÊN ĐỀ BỔ TRỢ NGỮ ÂM, TỪ VỰNG NÂNG CAO - TIẾNG ANH 9 VÀ ÔN THI VÀO LỚP 10 ...
GIÁO ÁN KẾ HOẠCH BÀI DẠY CHÍNH KHÓA TIẾNG ANH 9 - CẢ NĂM - THEO CÔNG VĂN 5512...

Sql injection - intro

  • 1. Vulnerabilità web Sql injection 19 maggio Massimo Fornari – SQL Injection 1
  • 2. Vulnerabilità web Si dividono in: • Cross-site scripting • SQL injection • Broken authentication • Information leakage Sono dovuti a scarsa attenzione degli sviluppatori 19 maggio Massimo Fornari – SQL Injection 2
  • 3. Statistiche di vulnerabilità Il problema risulta evidente dal grafico 19 maggio Massimo Fornari – SQL Injection 3
  • 4. Cross-site scripting (XSS) • Inserisce script malevoli all’interno delle pagine tramite: – Form di immissione – Campi di ricerca – Parametri URL • Lo script può modificare temporaneamente o permanentemente la pagina • Consente di sottrarre dati e prendere il controllo 19 maggio Massimo Fornari – SQL Injection 4
  • 5. Information leakage • Si entra in possesso di informazioni sensibili tramite: – Analisi del sorgente – Messaggi di errore – Commenti 19 maggio Massimo Fornari – SQL Injection 5
  • 6. Broken authentication • Debolezza del sistema di controllo degli accessi, con possibilità di autenticazione fasulla: – Attacco di forza bruta – Credenziali semplici, per tentativi – Aggiramento del login 19 maggio Massimo Fornari – SQL Injection 6
  • 7. SQL Injection • SQL Injection: An attack technique used to exploit web sites by altering backend SQL statements through manipulating application input (Web applicazion security consortium) • Sfrutta l’inadeguatezza dei controlli sui dati di input 19 maggio Massimo Fornari – SQL Injection 7
  • 8. Test della vulnerabilità • Per prima cosa l’attaccante cerca di capire se l’applicazione è vulnerabile – Inserisce statement propri di SQL al posto dei parametri – Controlla se il server esegue la query con successo • In questo caso l’applicazione è vulnerabile • Se il server ritorna un messaggio di errore lo si analizza alla ricerca di una possibile vulnerabilità 19 maggio Massimo Fornari – SQL Injection 8
  • 9. Test della vulnerabilità - continua • Verificare un singolo parametro per volta inserendo stament SQL: – ‘ (single quote) – Select, where • Questo ha lo scopo di causare errori nella query • In caso il server risponda con errori contenenti “..SQL server…”, “ODBC”, “sintax” l’applicazione è vulnerabile 19 maggio Massimo Fornari – SQL Injection 9
  • 10. Test della vulnerabilità - continua • Altro modo per testare la vulnerabilità è inserire parametri corretti, seguiti da una nuova condizione sempre vera: SELECT * FROM edizioni WHERE id = 7 • Inserendo 7 AND 1=1 la query rimane inalterata ma il server può reagire in 2 modi: – Esegue la query con successo: è certamente vulnerabile – Rifiuta la query: il server è stato reso sicuro (almeno nel punto appena testato) 19 maggio Massimo Fornari – SQL Injection 10
  • 11. Authentication bypass • È uno scenario classico di attacco • Lo script che si occupa del login è vulnerabile: string sqlQuery = "SELECT id FROM Login WHERE Username='" + UserTextBox.Text + "'AND Password='" + PassowordTextBox.Text + "'"; dr=command.ExecuteReader(); if (dr.HasRows){/*login succesful*/} else {/*login faild*/} 19 maggio Massimo Fornari – SQL Injection 11
  • 12. Authentication bypass - continua • Se il testo inserito è quello che l’applicazione ci si aspetta tutto funziona. • Se i parametri contengono caratteri propri del linguaggio SQL si modifica la query di autenticazione • Inserendo ‘ OR ‘’=‘ sia come nome che come pw otteniamo la seguente interrogazione: select id from Login where Username=‘’ or ‘’=‘’ and Password=‘’ or ‘’=‘’ 19 maggio Massimo Fornari – SQL Injection 12
  • 13. Authentication bypass - continua • A questo punto la query estrae tutte le righe della tabella, in quanto la condizione WHERE è sempre verificata. • In tale modo si è avuto accesso ad un’area riservata 19 maggio Massimo Fornari – SQL Injection 13
  • 14. Altri scenari • SQL injection può essere usata anche per altri scopi: – Ottenere dati “extra” da un’interrogazione – Forzare l’inserimento di nuove tuple • Uno scenario possibile è quello di concatenare due query usando come separatore “;” oppure usare UNION per fare l’unione di 2 query in un’unica tabella 19 maggio Massimo Fornari – SQL Injection 14
  • 15. Struttura del database • Sfruttando il separatore “;” è possibile, per esempio, inserire una query del tipo: SELECT * FROM sys.tables; -- • Essa ha l’effetto di mostrare tutte le tabelle presenti nel database (la sequenza “--” serve a ignorare tutto ciò che viene dopo di essa”) • L’informazione che se ne ricava permetterà all’attaccante di accedere alle informazioni desiderate. 19 maggio Massimo Fornari – SQL Injection 15
  • 16. Considerazzioni • È possibile inoltre sostituire la SELECT con una insert, al fine di inserire nuove tuple (tipicamente per ottenere un utente amministratore) • Un attacco di questo tipo non è sempre possibile, in quanto richiede che il risultato della query venga visualizzato direttamente sullo schermo. • Tuttavia è possibile comunque eseguire tali comandi anche senza vederne direttamente i risultati, si parla di BLIND SQL INJECTION in cui spesso si procede per tentativi 19 maggio Massimo Fornari – SQL Injection 16
  • 17. Come proteggersi • L’applicazione dovrebbe SEMPRE controllare i dati di input • Rimuovere gli apici dalle query • Convertire i parametri in formato URL (sostituisce i caratteri speciali nel formato %n). • Nell’input sostituire gli apici con “ ’ ” • Utilizzo di query parametriche (disponibile in tutti i linguaggi principali) 19 maggio Massimo Fornari – SQL Injection 17
  • 18. Esempio query parametrica OleDbCommand cm = new OleDbCommand("INSERT INTO Corrieri ([NomeSocietà], [Telefono]) VALUES (?, ?)", cn); OleDbParameter prm = new OleDbParameter(); prm.Direction = ParameterDirection.Input; prm.DbType = DbType.String; prm.Value = "Dall'Ara Francescò"; cm.Parameters.Add(prm); prm = new OleDbParameter(); prm.DbType = DbType.String; prm.Value = "(555)123-456"; cm.Parameters.Add(prm); 19 maggio Massimo Fornari – SQL Injection 18
  • 19. Query parametrica • Si vede come questa strutturazione, porta a forzare il tipo del parametro da inserire nella query, in modo che al momento della costruzione di quest’ultima venga controllata la correttezza. • Questo pattern oltre a evitare problemi di sicurezza, risolve alcuni problemi di invio dei parametri 19 maggio Massimo Fornari – SQL Injection 19
  • 20. Injector software • Esistono software che consentono di testare e iniettare codice SQL senza passare dal browser – SQL power injector http://www.sqlpowerinjector.com/ – Priamos http://www.priamos-project.com/ 19 maggio Massimo Fornari – SQL Injection 20
  • 21. Vulnerability tester • Esistono inoltre software in grado di rilevare vulnerabilita web (la cosa è legale solo sul proprio sito oppure dopo aver ottenuto l’autorizzazione) non solo di SQL injection – Acunetix (versione trial oppure free limitata a XSS) http://www.acunetix.com/ – Google skipfish http://code.google.com/p/skipfish/ 19 maggio Massimo Fornari – SQL Injection 21