Vulnerabilità web
                Sql injection


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



                                                     Il problema risulta
                 ...
Cross-site scripting (XSS)
• Inserisce script malevoli all’interno delle pagine
  tramite:
   – Form di immissione
   – Ca...
Information leakage
• Si entra in possesso di informazioni sensibili
  tramite:
   – Analisi del sorgente
   – Messaggi di...
Broken authentication
• Debolezza del sistema di controllo degli accessi,
  con possibilità di autenticazione fasulla:
   ...
SQL Injection
• SQL Injection: An attack technique used to
  exploit web sites by altering backend SQL
  statements throug...
Test della vulnerabilità
• Per prima cosa l’attaccante cerca di capire se
  l’applicazione è vulnerabile
   – Inserisce st...
Test della vulnerabilità - continua
• Verificare un singolo parametro per volta
  inserendo stament SQL:
  – ‘ (single quo...
Test della vulnerabilità - continua
• Altro modo per testare la vulnerabilità è inserire
  parametri corretti, seguiti da ...
Authentication bypass
• È uno scenario classico di attacco
• Lo script che si occupa del login è vulnerabile:

     string...
Authentication bypass - continua
• Se il testo inserito è quello che l’applicazione ci si
  aspetta tutto funziona.
• Se i...
Authentication bypass - continua
• A questo punto la query estrae tutte le righe
  della tabella, in quanto la condizione ...
Altri scenari
• SQL injection può essere usata anche per altri
  scopi:
  – Ottenere dati “extra” da un’interrogazione
  –...
Struttura del database
• Sfruttando il separatore “;” è possibile, per
  esempio, inserire una query del tipo:
           ...
Considerazzioni
• È possibile inoltre sostituire la SELECT con una insert, al
  fine di inserire nuove tuple (tipicamente ...
Come proteggersi
• L’applicazione dovrebbe SEMPRE controllare i
  dati di input
• Rimuovere gli apici dalle query
• Conver...
Esempio query parametrica
OleDbCommand cm = new OleDbCommand("INSERT INTO Corrieri
   ([NomeSocietà], [Telefono]) VALUES (...
Query parametrica
• Si vede come questa strutturazione, porta a
  forzare il tipo del parametro da inserire nella
  query,...
Injector software
• Esistono software che consentono di testare e
  iniettare codice SQL senza passare dal browser
  – SQL...
Vulnerability tester
• Esistono inoltre software in grado di rilevare
  vulnerabilita web (la cosa è legale solo sul
  pro...
Bibbliografia
http://www.orkspace.net/secdocs/

http://www.intilinux.com/sicurezza/634/le-
  vulnerabilita-delle-applicazi...
Upcoming SlideShare
Loading in …5
×

Sql injection - intro

1,298 views
1,209 views

Published on

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,298
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Sql injection - intro

  1. 1. Vulnerabilità web Sql injection 19 maggio Massimo Fornari – SQL Injection 1
  2. 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. 3. Statistiche di vulnerabilità Il problema risulta evidente dal grafico 19 maggio Massimo Fornari – SQL Injection 3
  4. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  22. 22. 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

×