lunedì 11 marzo 2013

SQL Injection: Rubare Informazioni Da Un Database - Parte 1

Una buona parte del web, circa l'80% dei siti, è vulnerabile a seri attacchi. La sicurezza online è un qualcosa di relativo e di irraggiungibile. Quest'oggi lo dimostrerò mostrandovi una tra le tecniche hacker più usate per rubare informazioni da un database, ovvero l'SQL Injection. È inutile dire che questo metodo funziona solo su siti vulnerabili a tale tecnica e, fidatevi, ce ne sono tanti.
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.

22 commenti:

  1. Risposte
    1. Questo è il più bel commento in assoluto.

      Elimina
    2. In senso ironico?

      Elimina
    3. Non è una frase ironica, sentirsi dire di aver eseguito correttamente tutti i passaggi significa che l'articolo è stato scritto bene.

      Elimina
  2. CIAO quando pubblichi una nuova guida sul tuo blog ? non potresti pubblicarne di piu e come posso fare un bruteforce facebook puoi fare tutorial GRAZIE!!

    RispondiElimina
  3. Mi potete spiegare che non ho capito nulla grazie ma funziona al 100%?

    RispondiElimina
  4. Scusate ... 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

    RispondiElimina
  5. La 4^ parte non è più come faccio???

    RispondiElimina
  6. ricevo giornalmente email phishing, con indirizzo falso e richiesta di collegarmi a un link
    che mi porta ad una pagina web sicuramente contraffatta per carpirmi dati sensibili.
    Chiedo, è possibile risalire all' IP o avere info su questi malfattori ?

    RispondiElimina
    Risposte
    1. No però puoi segnalare il sito/link.

      Elimina
  7. Come si fa ha segnalare i siti web??

    RispondiElimina
  8. Come faccio a trovare un form Get nella pagina??

    RispondiElimina
  9. ciao
    ho 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??

    RispondiElimina
    Risposte
    1. 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.

      Elimina
  10. Hai fatto la guida file get e post dove la trovo? (Devo aver saltato il pezzo in cui lo spiegavi)cq sei un mito

    RispondiElimina
  11. Che tristezza, spero solo che chi scriva queste boiate abbia l' alibi della giovane età

    RispondiElimina
  12. Io non ho capito se news.php vale per tutti.E se non vale per tutti cosa devo mettere?

    RispondiElimina
  13. Purtroppo 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!!✌✌

    RispondiElimina
    Risposte
    1. Non 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.

      Elimina
  14. Mi consigliate un sito dove provare questa tecnicha

    RispondiElimina
    Risposte
    1. Scaricati 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.

      Elimina