• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Sql injection - intro
 

Sql injection - intro

on

  • 1,371 views

 

Statistics

Views

Total Views
1,371
Views on SlideShare
1,370
Embed Views
1

Actions

Likes
1
Downloads
0
Comments
0

1 Embed 1

http://cesena.ing2.unibo.it 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Sql injection - intro Sql injection - intro Presentation Transcript

    • 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