• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Guida SQL injection/blind SQL injection

hackergame

Utente bannato
Autore del topic
6 Giugno 2012
26
0
Miglior risposta
0
Salve a tutti,
oggi vorrei parlarvi,anche se non so se sia stato già fatto,della tecnica delle Sql injection e delle blind Sql injection.
Allora incominciamo..

1) INTRODUZIONE:

Ogni sito in php visualizza ed elabora dati appoggiandosi su un database, MySQL . Per visualizzare questi dati basta una richiesta GET o POST:

GET :

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

POST:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

La differenza fra GET e POST è che una richiesta di tipo GET viene eseguita sull'URL che segue l'attributo HREF di un marcatore <A> all'interno di una pagina HTML;una richiesta di tipo FORM invece viene eseguita dal Client in risposta ad una form.

2) SQL injection

Siccome questi dati vengono inviati dal browser possiamo manipolarli come vogliamo.Questa tecnica si chiama SQL injection ( iniezione di sql).

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Cosa fa questo?
In poche parole modifica la query
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
in
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Questo non seleziona la news numero 13 ma seleziona il primo oggetto della tabella dato che la condizione "or 1 = 1" è sempre vera.

Una pagina di login messa in questo modo

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

si potrà manipolare in questo modo:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Questo garantisce l'accesso senza credenziali perchè modifica la query in questo modo:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

in

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

3) Blind SQL injection

La tecnica vista in precedenza è limitata.Una tecnica più efficiente è la Blind SQL injection,anche se è più difficile.Già dal nome possiamo capire la difficoltà della tecnica e anche la lunghezza dell'attacco perchè in questo tipo di attacco si procede alla cieca ("blind").
Prendiamo l'esempio di prima: troviamo una vulnerabilità nella pagina news.php ( ovviamente bisogna prima cercare la vulnerabilità dove si trova). Dato che ogni giorno la sicurezza dei siti aumenta sempre più ( o almeno così dovrebbe essere ) risulta difficile trovare ancora una vulnerabilità in una pagina di login ( io l'ho trovata in solo 8 siti web ).Perciò possiamo iniettare del codice nella gestione della pagina vulnerabile,in questo caso quella delle news,per arrivare a quella del login..vediamo come..

Per questo tipo di attacco riceviamo anche un "aiutino" dal database MySQL stesso,proprio per la sua struttura con il suo UNION ALL SELECT,che permette di concatenare delle select su tabelle differenti:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Questo seleziona delle select sia dalla tabella 1 che dalla 2.

Ok.Adesso incominciamo il vero e proprio "attacco alla cieca".

La prima cosa da fare è determinare quanti campi seleziona la select per modificare correttamente la select che inietteremo nella query finale.Per questo si procede alla cieca.
Vediamo come:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Vediamo che ci dà un errore di sintassi..quindi andiamo avanti..

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Anche qui errore di sintassi.

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Lo stesso come prima..

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Idem come prima..

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Ora ( è un' ipotesi,non vuol dire che se mettiamo il codice di sopra vedremo sempre i dati ) vedremo i dati,cioè la query è stata eseguita con successo.

Cosa fa questa query? Questo:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Adesso questa era un'ipotesi perchè nella realtà noi non sappiamo come si chiamano le tabelle,a meno che il sito non sia nostro e stiamo testando la sicurezza di esso.Perciò siccome il sito non è nostro dobbiamo vedere come si chiamano le tabelle.Ma non vi preoccupate,perchè ancora una volta ci viene in aiuto il database MySQL con il suo Information Schema che contiene le tabelle con le informazioni sulla struttura degli altri dati presenti negli altri database.Noi dovremo visualizzare il contenuto della tabella
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
che contiene
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
cioè la lista delle tabelle presenti nel database..

Per fare ciò useremo questa query:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Ora sapremo come si chiamano le tabelle,compresa quella degli utenti e tutte le altre ;) Ora dobbiamo vedere come si chiamano i dati ed il gioco è fatto ( facile a dirsi ma a farsi per niente proprio )

E lo faremo con la seguente query:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

In questo caso ci è venuto in aiuto l'information_schema.columns,cioè la lista dei nomi delle colonne per ogni tabella.

Ovviamente quest'ultimo procedimento va fatto come primo perchè altrimenti non avremo i dati necessari per andare avanti.

Spero di essere stato chiaro..per eventuali problemi o incomprensioni potrete riferirvi direttamente a me..e mi raccomando..cosa importante..

NO LAMERATE :indiavolato: (anche se credo che un lamer non sia capace di capire tutto ciò e quindi farà un papocchio ^^ )

Grazie a tutti
Alla prossima :bye:

Fonte:studio approfondito sul web e sui libri ( della Feltrinelli se non sbaglio) sulle SQL injection e sulle Blind SQL injection. ( non chiedetemi i nomi dei libri perchè non mi ricordo come si chiamano..li ho dati ad un mio amico e non li leggo più da un bel po' xD )
 
Riferimento: SQL injection/blind SQL injection

Ottima guida, chiara e semplice, bravo.

Ma sinceramente la sposterei in PHP & MySQL, tu che ne dici?
 
Riferimento: SQL injection/blind SQL injection

Salve a tutti,
oggi vorrei parlarvi,anche se non so se sia stato già fatto,della tecnica delle Sql injection e delle blind Sql injection.
Allora incominciamo..

1) INTRODUZIONE:

Ogni sito in php visualizza ed elabora dati appoggiandosi su un database, MySQL . Per visualizzare questi dati basta una richiesta GET o POST:

GET :

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

POST:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

La differenza fra GET e POST è che una richiesta di tipo GET viene eseguita sull'URL che segue l'attributo HREF di un marcatore <A> all'interno di una pagina HTML;una richiesta di tipo FORM invece viene eseguita dal Client in risposta ad una form.

2) SQL injection

Siccome questi dati vengono inviati dal browser possiamo manipolarli come vogliamo.Questa tecnica si chiama SQL injection ( iniezione di sql).

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Cosa fa questo?
In poche parole modifica la query
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
in
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Questo non seleziona la news numero 13 ma seleziona il primo oggetto della tabella dato che la condizione "or 1 = 1" è sempre vera.

Una pagina di login messa in questo modo

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

si potrà manipolare in questo modo:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Questo garantisce l'accesso senza credenziali perchè modifica la query in questo modo:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

in

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

3) Blind SQL injection

La tecnica vista in precedenza è limitata.Una tecnica più efficiente è la Blind SQL injection,anche se è più difficile.Già dal nome possiamo capire la difficoltà della tecnica e anche la lunghezza dell'attacco perchè in questo tipo di attacco si procede alla cieca ("blind").
Prendiamo l'esempio di prima: troviamo una vulnerabilità nella pagina news.php ( ovviamente bisogna prima cercare la vulnerabilità dove si trova). Dato che ogni giorno la sicurezza dei siti aumenta sempre più ( o almeno così dovrebbe essere ) risulta difficile trovare ancora una vulnerabilità in una pagina di login ( io l'ho trovata in solo 8 siti web ).Perciò possiamo iniettare del codice nella gestione della pagina vulnerabile,in questo caso quella delle news,per arrivare a quella del login..vediamo come..

Per questo tipo di attacco riceviamo anche un "aiutino" dal database MySQL stesso,proprio per la sua struttura con il suo UNION ALL SELECT,che permette di concatenare delle select su tabelle differenti:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Questo seleziona delle select sia dalla tabella 1 che dalla 2.

Ok.Adesso incominciamo il vero e proprio "attacco alla cieca".

La prima cosa da fare è determinare quanti campi seleziona la select per modificare correttamente la select che inietteremo nella query finale.Per questo si procede alla cieca.
Vediamo come:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Vediamo che ci dà un errore di sintassi..quindi andiamo avanti..

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Anche qui errore di sintassi.

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Lo stesso come prima..

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Idem come prima..

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Ora ( è un' ipotesi,non vuol dire che se mettiamo il codice di sopra vedremo sempre i dati ) vedremo i dati,cioè la query è stata eseguita con successo.

Cosa fa questa query? Questo:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Adesso questa era un'ipotesi perchè nella realtà noi non sappiamo come si chiamano le tabelle,a meno che il sito non sia nostro e stiamo testando la sicurezza di esso.Perciò siccome il sito non è nostro dobbiamo vedere come si chiamano le tabelle.Ma non vi preoccupate,perchè ancora una volta ci viene in aiuto il database MySQL con il suo Information Schema che contiene le tabelle con le informazioni sulla struttura degli altri dati presenti negli altri database.Noi dovremo visualizzare il contenuto della tabella
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
che contiene
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
cioè la lista delle tabelle presenti nel database..

Per fare ciò useremo questa query:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Ora sapremo come si chiamano le tabelle,compresa quella degli utenti e tutte le altre ;) Ora dobbiamo vedere come si chiamano i dati ed il gioco è fatto ( facile a dirsi ma a farsi per niente proprio )

E lo faremo con la seguente query:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

In questo caso ci è venuto in aiuto l'information_schema.columns,cioè la lista dei nomi delle colonne per ogni tabella.

Ovviamente quest'ultimo procedimento va fatto come primo perchè altrimenti non avremo i dati necessari per andare avanti.

Spero di essere stato chiaro..per eventuali problemi o incomprensioni potrete riferirvi direttamente a me..e mi raccomando..cosa importante..

NO LAMERATE :indiavolato: (anche se credo che un lamer non sia capace di capire tutto ciò e quindi farà un papocchio ^^ )

Grazie a tutti
Alla prossima :bye:

Fonte:studio approfondito sul web e sui libri ( della Feltrinelli se non sbaglio) sulle SQL injection e sulle Blind SQL injection. ( non chiedetemi i nomi dei libri perchè non mi ricordo come si chiamano..li ho dati ad un mio amico e non li leggo più da un bel po' xD )

http://www.sciax2.it/forum/guide-tutorial/video-sql-injection-teoria-pratica-427857.html

@XFossaDeiLeoniX

Questa è una mia guida [ video tutorial, con spiegazione a voce e download di uno script spiegato, per provare in locale ].
 
Riferimento: SQL injection/blind SQL injection

si forse hai ragione @XfossaDeiLeoniX è meglio spostarla in php e mysql..comunque @InfernoHacker se la tua risposta è un'insinuazione che io abbia copiato la tua guida fidati che non è così..anche perchè è un videotutorial e quindi siccome il mio computer ha un problema al driver video ogni volta che vedo un video per due secondi si spegne il pc..quindi mi sembrerebbe impossibile e anche un po' scomodo copiare dalla tua guida..poi se ho sbagliato l'interpretazione del tuo messaggio allora ok..scusa ;)