SQL Injection, traduzione letterale "Iniezione SQL", consiste nell'iniettare tramite form GET o POST una stringa di codice SQL (linguaggio per gestire database) in modo da sottrarre informazioni ad una base di dati.
Propongo questa guida a parti in modo che possa aiutarvi a comprendere tale tecnica e la relatività della sicurezza online. Premetto che questi post saranno rivolti a chi ha un minimo di conoscenza del SQL e del funzionamento dei form GET e POST.
Prima di tutto occorre controllare se un sito è vulnerabile. Ci sono alcune applicazioni che, dato il nome di un sito web, riportano se tale sito è vulnerabile o meno ad SQL Injection. In questo post però voglio usare la maniera più diretta ovvero provare ad iniettare del codice SQL e controllarne i risultati. Prima di tutto occorre cercare un sito (meglio provare in locale o su un proprio sito data l'illegalità della tecnica dell'SQL Injection) con dei form (per ora tratteremo i form GET). Supponiamo di voler attaccare il sito "www.123.it"; troviamo un form GET nella pagina "news.php". Quest'ultima chiede l'id della news da visualizzare tramite GET quindi se si vuole visualizzare la news numero 1 allora si dovrà visitare il link "www.123.it/news.php?id=1" dove id è appunto l'id della news. Se la news con tale id non esiste scegliamone una con id diverso.
A questo punto ci possiamo fare un'idea sulla stringa SQL che verrà eseguita (chiamata query): "SELECT * FROM tb_news WHERE id = 1". Ovvero seleziona tutto da 'tb_news' (la tabella che contiene le news, può avere anche un nome diverso ovviamente ma non importa) dove è verificata la condizione id = 1. Quindi questa stringa cercherà la news con id uguale all'id passato tramite form ovvero 1.
Ma cosa succederebbe se alla variabile id del GET non dessimo il valore 1 bensì il valore "1 AND 1=0"?
Ecco come risulterebbe la query: "SELECT * FROM tb_news WHERE id=1 AND 1=0".
La query andrà a selezionare tutto dalla tabella delle news dove sono vere le condizioni id=1 e 1=0; dato che 1 non sarà mai uguale a 0 la query non potrà selezionare alcuna news (poiché non soddisfatte entrambe le condizioni). Come conseguenza non verrà visualizzata la news.
Proseguendo, se visitiamo il link "www.123.it/news.php?id=1 AND 1=0" e la news non viene visualizzata oppure appare un messaggio d'errore dobbiamo accertarci che il sito sia vulnerabile iniettando la stringa "1 AND 1=1". Ovvero si andrà a selezionare la news con id uguale a 1 se è vera la condizione 1=1. Siccome quest'ultima è sempre soddisfatta allora la news dovrebbe apparire e ci siamo accertati che il sito è vulnerabile.
Nel caso in cui appare un messaggio d'errore all'iniettare di entrambe le stringhe oppure la news viene in tutti e due i casi visualizzata allora quel form non è vulnerabile.
Dopo la stringa SQL da iniettare (in questo caso dopo "1 AND 1=0") consiglio di inserire "--" che stanno ad indicare che tutto quello che si trova dopo i due trattini non verrà considerato.
Nel caso in cui appare un messaggio d'errore all'iniettare di entrambe le stringhe oppure la news viene in tutti e due i casi visualizzata allora quel form non è vulnerabile.
Dopo la stringa SQL da iniettare (in questo caso dopo "1 AND 1=0") consiglio di inserire "--" che stanno ad indicare che tutto quello che si trova dopo i due trattini non verrà considerato.
C lho fATTA
RispondiEliminaQuesto è il più bel commento in assoluto.
EliminaIn senso ironico?
EliminaNon è una frase ironica, sentirsi dire di aver eseguito correttamente tutti i passaggi significa che l'articolo è stato scritto bene.
EliminaCIAO quando pubblichi una nuova guida sul tuo blog ? non potresti pubblicarne di piu e come posso fare un bruteforce facebook puoi fare tutorial GRAZIE!!
RispondiEliminaSei un grande
RispondiEliminaMi potete spiegare che non ho capito nulla grazie ma funziona al 100%?
RispondiEliminaScusate ... ma io ho non ho eseguito bene i passaggi oppure il sito non è vulnerabile ... è comunque la spiegazione sembra ottima . ma io non l'ho capita lo stesso xD
RispondiEliminaLa 4^ parte non è più come faccio???
RispondiEliminaricevo giornalmente email phishing, con indirizzo falso e richiesta di collegarmi a un link
RispondiEliminache mi porta ad una pagina web sicuramente contraffatta per carpirmi dati sensibili.
Chiedo, è possibile risalire all' IP o avere info su questi malfattori ?
No però puoi segnalare il sito/link.
EliminaCome si fa ha segnalare i siti web??
RispondiEliminaCome faccio a trovare un form Get nella pagina??
RispondiEliminaciao
RispondiEliminaho trovato un paio di siti che finiscono in "id=.." ma quando inserisco le stringhe non viene visualizzato nessun messagio di errore ma viene visualizzata la pagine come normalmente..
aiuto!!come si fa??
Significa che i siti che hai testato non sono vulnerabili a questa tecnica. Presto farò delle video-guide sull'SQL Injection perché ho notato che c'è un po' di confusione attorno a questo metodo.
EliminaHai fatto la guida file get e post dove la trovo? (Devo aver saltato il pezzo in cui lo spiegavi)cq sei un mito
RispondiEliminaChe tristezza, spero solo che chi scriva queste boiate abbia l' alibi della giovane età
RispondiEliminaIo non ho capito se news.php vale per tutti.E se non vale per tutti cosa devo mettere?
RispondiEliminaPurtroppo io non sono un grande esperto di queste cose. Però volevo chiederti se posso farlo anche con il telefono o solo con il computer? ?? Entrerò questi giorni per vedere la tua risposta. E se si può fare comincerò a fare sul serio. Spero di diventare bravo!!✌✌
RispondiEliminaNon importa la macchina su cui operi. Puoi fare SQL Injection col cellulare, col PC, col tablet, col portatile. Ovviamente ti consiglio di utilizzare un PC in quanto hai maggiori possibilità di operare.
EliminaMi consigliate un sito dove provare questa tecnicha
RispondiEliminaScaricati XAMPP e Damn Vulnerable Web App. In questo modo crei un server sul tuo PC con il sito Damn Vulnerbale Web App che è un sito fatto apposta per essere hackerato. Così testi tutto sul tuo PC senza compiere niente di illegale.
Eliminacome faccio a scaricare Damn Vulnerable Web App
Elimina