Un codice che fa impazzire i server. Inviare righe di comando per far fare ad un server di terzi quello per cui noi lo stiamo programmando: un sogno!
Questo è una SQL Injection.
In questo articolo vedremo un semplice modo per sfruttare una vulnerabilità, a dire il vero un po’ obsoleta, nei siti internet. Inietteremo sequenze di codice per forzare l’esecuzione di comandi da parte di applicazioni web e siti internet.
Dopo l’iniezione di codice, il sito inizierà a risponderci con diversi tipi di informazioni. Come password di amministrazione e varie altre cose.
Il linguaggio SQL si usa con i database, strutture in cui sono contenuti i login, le password e moltissime altre informazioni. Con l’iniezione possiamo fare un sacco di cose divertentissime: modificare la tabella utenti, cancellarla, entrare come amministratore.
Si tratta di una vulnerabilità causata, spesso, da debolezze nella programmazione stessa.
Un sito non correttamente programmato, o meglio con dimenticanze nella protezione, potrebbe dare questo tipo di problemi. Attenzione: non tutti i programmatori sono Nerd… Può capitare che a sviluppare un sito ci sia qualcuno, che non è un vero esperto, con la conseguenza che a volte anche siti importanti sono vulnerabili a questo attacco.
Bisogna sempre controllare e rivedere ogni sito… Ma questo un Nerd lo sa e lo fa. Altri personaggi… No!
Esistono protezioni contro questo tipo di attacco, delle implementazioni di PHP che bloccano questi comandi. Bisogna però inserirle appositamente.
Iniziamo ad inserire nello username un'apostrofo, scopriamo se il sito è vulnerabile in base ai messaggi di errore restituiti. Scoperto questo con il comando sappiamo che la domanda che il nostro computer manda al server è del tipo: se quello che è incluso in input è presente in tabella utenti e se la password corrisponde a quella corrispondente ad input, allora fallo entrare. Quest’ultima non è una prassi sicurissima. Perché se si inseriscono dapprima le virgolette che sarebbero aperte nel codice che va al server, ne aggiungo un altra in fondo (per mantenere un numero pari di virgolette), in mezzo tra queste due posso inserire tutto il codice che voglio sia eseguito.
Pertanto all’interno di un server non correttamente configurato, inseriremo:
‘or ‘1=1’’
(occhio: sono tutti apici singoli, mai doppie virgolette)
Questo farà dire al server: se quello che è incluso in input, è presente in tabella utenti e se la password corrisponde a quella corrispondente ad input, oppure 1 è uguale ad 1 (quindi sempre) allora fallo entrare. Non solo! Siccome non vi è inserito il nome utente, il server ci farà entrare come primo utente in tabella, che è quasi sempre l’amministratore del sito.
Semplicissimo, efficace e molto rischioso. Mettete sempre delle protezioni contro le SQL injection perché non sono vulnerabilità soltanto dei vecchi siti internet!