Un Attacco “SQL Injection” (in acronimo SQLI), è una tipologia di exploit che sfrutta falle di sicurezza nelle tecniche di sviluppo di applicativi web. Il risultato può variare dall’impersonare un account utente, alla compromissione di un database o di tutto il server. A differenza di un attacco DDos, un attacco SQLI può essere facilmente evitato con tecniche di programmazione attente.
Esempio SQL Injection
Ogni volta che tentiamo di accedere ad un applicativo web, inseriamo delle credenziali che vengono poi utilizzate in una query sul database tipo questo:
SELECT UserID FROM Users WHERE User='user' AND Password='pass';
Questa query non fa altro che andare a verificare che all’interno della tabella Users, ci sia una riga contenente il valore di user e pass specificati dall’utente restituendo quindi il codice ID dello stesso. Se non vi è alcuna corrispondenza, la restituzione di valori corrisponde ovviamente ad un insieme vuoto.
Un attacco SQL Injection consiste molto semplicemente nell’inserire valori all’interno di campi web che alterino l’interpretazione da parte del database generando quindi query non sicure.
Supponiamo quindi di inserire nel campo nome utente il valore “myuser’–” e nel campo password il valore password. Se all’interno degli applicativi web non esistono filtraggi e validazioni di campi, i valori saranno così interpretati:
SELECT UserID FROM Users WHERE UserName='myuser'--' AND Password='wrongpass'
In questo modo verranno interpretati anche i due trattini (–) che in linguaggio SQL determinano l’inizio di un commento che ovviamente non viene interpretato. Quindi, tutto quello posto a seguito dei trattini non viene elaborato. Il risultato è che la query sopra esposta viene in realtà interpretata in questo modo:
SELECT UserID FROM Users WHERE UserName='myuser'
Facile quindi notare che il database andrà alla ricerca di una riga contenente solo il nome utente senza verificare la password restituendo quindi il codice ID. Quindi in questo esempio, riusciamo ad ottenere il codice ID dell’utente senza conoscerne la relativa password.
Ovviamente questo è un esempio molto blando ma, con attacchi più complessi è possibile scrivere file, scaricare o compromettere l’intero database e molto altro ancora