Menù del sito:

SQL Injection

 

La SQL injection è una tecnica di code injection, usata per attaccare applicazioni di gestione dati, con la quale vengono inserite delle stringhe di codice SQL malevole all'interno di campi di input in modo che queste ultime vengano poi eseguite, ad esempio, per rendere visibili dati sensibili all'attaccante.
L'SQL injection sfrutta le vulnerabilità di sicurezza del codice di un'applicazione, ad esempio quando l'input dell'utente non è correttamente filtrato da 'caratteri di escape' contenuti nelle stringhe SQL.
Questa tecnica è più conosciuta come attacco per i siti web, ma è anche usato per attaccare qualsiasi tipo di database SQL.
L'SQL injection permette agli attaccanti di effettuare tramite metodi come ip spoofing, ovvero attacchi a sistemi informatici con la creazione di pacchetti IP falsi dove viene falsificato l'indirizzo IP del mittente, la modifica o la cancellazione di dati o causare l'annullamento di transazioni oppure ottenere dei dati privati. Gli attacchi di questa tecnica si dividono in diversi tipi, da quelli classici dove si sfruttano caratteri di escape non filtrati corretamente a quelli più complessi associati ad attacchi DDoS.

 

Caratteri di escape non filtrati correttamente

Questo tipo di SQL injection si verifica quando non viene filtrato l'input dell'utente dai caratteri di escape e quindi vengono passati all'interno di uno statement. Questo può provocare la manipolazione degli statements eseguiti sul database dagli utenti finali dell'applicazione.
Ad esempio uno statement = "SELECT * FROM users WHERE name = '" + userName + "';" dove con questo codice si recupera dalla tabella users un certo "userName" inserito nel campo di input, con questo codice però si può fare molto di più da ciò che è intenso dall'amministratore, inserendo delle stringhe come:

In questo modo si imposta la variabile userName come (' OR '1'='1') e i carattere come "/*" mettono a commento il resto del codice. Così facendo lo statement apparirà in questo modo: SELECT * FROM users WHERE name = '' OR '1'='1'. Se questo codice fosse utilizzato in una procedura di autenticazione, allora questo esempio potrebbe essere usato per forzare la selezione di tutti i campi dati (*) di "tutti" gli utenti piuttosto che di un singolo username come era inteso dal codice, ciò accade perché la valutazione di ‘1'='1' è sempre vera. A questi attacchi di variazione di codice posso essere inseriti comandi come DROP TABLE per passare ad eliminare tutti i campi della tabella users, questo tipo di API con statements multipli in un'unica chiamata non sempre è consentita per via di alcune funzioni come mysql_query() di PHP non lo permettono.