SQL Injection, Scopriamo Come Funziona
SQL Injection è una delle vulnerabilità critiche che vengono spesso visualizzate nelle applicazioni Web e sono anche incluse nell’elenco di top 10 di owasp. Gli attacchi SQL Injection si verificano quando lo sviluppatore non filtra (controlla) i parametri ricevuti dall’utente nella query SQL che invia in background e l’attaccante interviene nella query come desidera.
Cosa si può fare con l’iniezione SQL?
In un sistema con SQL Injection, l’utente malintenzionato può accedere a tutti i dati archiviati nel database, poiché può interferire direttamente con la query. Ci sono anche situazioni che possono variare a seconda del sistema di gestione del database utilizzato.
Ad esempio, in un sistema che utilizza MSSQL, il comando può essere eseguito sul sistema utilizzando la funzione xp_cmdshell. Oppure, se un sistema che utilizza MySQL non è configurato correttamente, è possibile leggere vari file con la funzione mysql_load_file.
Tipi di iniezione SQL
- Iniezione SQL cieca
Come si può vedere dalla parola “cieco” all’inizio, il tiro alla cieca è un tipo di attacco di iniezione SQL. In un sistema con iniezione sql cieca, i nomi delle tabelle e le colonne non possono essere visualizzati direttamente nel database. Il metodo più familiare per eseguire un attacco di iniezione sql cieco è trovare i nomi delle colonne nel sistema provando lettera per lettera. Ad esempio, quando si desidera trovare la tabella denominata “admin”, è possibile stabilire se il carattere inviato dalla A-Z a tutti i caratteri nella query viene inviato dal risultato restituito dalla query e se si trova nel nome della tabella.
Blind SQL Injection è diviso in 2 all’interno di se stesso.
-Iniezione di ciechi SQL basata sul tempo
Iniezione di SQL cieco basata sul tempo, che è un tipo di iniezione di SQL cieco, sono attacchi di iniezione di SQL basati sul tempo. Se diamo un esempio dalla tabella “admin”, gli aggressori che vogliono trovare la tabella admin attaccheranno nella query SQL che verrà inviata, “Se c’è una lettera nella tabella per 3 secondi”, raggiungerà i nomi delle tabelle e delle colonne con l’aiuto di funzioni come SLEEP, DELAY.
-Iniezione SQL cieca basata su Beanean
Booleano, come è noto, è un tipo di dati basato su valori true-false. In Boolean Based Blind SQL Injection, l’attaccante utilizza uno scenario di attacco simile a quello basato sul tempo per apprendere i nomi delle colonne della tabella nel sistema di destinazione. Nell’unica iniezione sql basata sul tempo che cambia, abbiamo capito che il personaggio era presente a seconda che il sistema dormisse / non usasse funzioni come SLEEP, DELAY. Nell’iniezione sql cieca basata su Boolen, possiamo capire che il personaggio viene trovato in base alla risposta restituita dal risultato della query che abbiamo inviato.
-Iniezione di SQL basata sull’Unione
Union Based SQL Injection è il tipo più semplice di iniezione sql da rilevare e sfruttare. Quando si interferisce con qualsiasi carattere che interromperà la query in un sistema con iniezione sql basata su unione, verrà visualizzato un messaggio di errore nella pagina. Puoi imparare il numero di colonne e nomi di tabelle direttamente modellando il tuo palody senza provare a scrivere lettere o query con valori true-false.
Strumenti di iniezione SQL
1 – Sqlmap
https://github.com/sqlmapproject/sqlmap2
– jSQL
il https://github.com/ron190/jsql-injectio
3 – BBQSQL
https://github.com/neohapsis/bbqsql
Come proteggere gli attacchi SQL Injection?
L’aggiunta dei dati ricevuti dall’utente alla query aggiungendo vari processi di filtro direttamente prima di aggiungerli alla query SQL ti proteggerà dagli attacchi di iniezione SQL.