


Aggiornato al : mag 29, 2008
In questa sezione verranno analizzate le tecniche mediante le quali un attaccante può trarre beneficio da un messaggio di errore visualizzato dal server, per portare a termine il proprio attacco con successo. In particolare verranno esaminati i messaggi d’errore ODBC.
Si prenda in considerazione l’esempio dell’autenticazione di un utente mediante un form di login, in cui sono previsti i campi nome utente e password. La query generata sarà la seguente:
“SELECT * FROM utenti WHERE nome = ‘ ” + username + “’ AND password = ‘ ” + psw + “’; ”
Si è già visto come un eventuale attaccante possa aggirare tale sistema di login ed autenticarsi in maniera non autorizzata. Tuttavia, per sfruttare tale vulnerabilità al fine di visualizzare, modificare o cancellare le informazioni contenute nel database, l’utente necessita di sapere i nomi e la struttura delle tabelle che lo compongono. I messaggi d’errore ODBC, se abilitati, forniscono proprio questo
genere di informazioni.
Si supponga che la tabella contenente le informazioni degli utenti sia stata creata con un comando SQL del genere:
CREATE TABLE utenti( ID int, username varchar(255), password varchar(255))
Il primo passo per un attaccante è quello di inserire in uno dei campi del form la stringa ’ having 1=1 – -. In tal modo apparir` il seguente messaggio d’errore:
Microsoft OLE DB Provider for ODBC Drivers error ‘80040e14’
[Microsoft][ODBC SQL Server Driver] [SQL Server]Column ‘utenti.ID’ is
invalid in the select list because it is not contained in an aggregate
function and there is no GROUP BY clause.
Tale messaggio contiene sia il nome della tabella ‘utenti’ che il nome del primo campo ‘ID’. Il secondo passo dell’attaccante sarà quindi sfruttare tali informazioni iniettando il seguente codice: ’ group by utenti.ID having 1=1 - -.
Ciò provocherà la visualizzazione di un nuovo messaggio d’errore:
Microsoft OLE DB Provider for ODBC Drivers error ‘80040e14’
[Microsoft][ODBC SQL Server Driver][SQL Server]Column ‘utenti.username’
is invalid in the select list because it is not contained in either an
aggregate function or the GROUP BY clause.
In tal modo è stato rivelato il nome del secondo campo della tabella utenti:username. Continuando con questa tecnica fin quando non appare più alcun messaggio d’errore, un attaccante pu` riuscire a scoprire la struttura dell’intera tabella e quindi proseguire con l’iniezione di query di modifica o di cancellazione.
Sfruttando una tecnica analoga egli può altresì conoscere il tipo di dati contenuti in ciascun campo della tabella. Risulta quindi importante la disabilitazione di tale tipo di messaggi, in modo tale che il server non sia in grado di offrire un così prezioso aiuto ad eventuali intrusi.
Articolo Precedente -> I bersagli della SQL injection : test di vulnerabilità
Articolo Successivo -> Vulnerabilità dei Server SQL
Autore : Simon. U
Leggi anche :











maggio 21st, 2008 at 14:36
molto interessante, comunque ho preso un libro qualche tempo fa per studiare la struttura e la creazione di database mysql, dopo un pò intepretare gli errori ti viene automatico;)
Rispondi