miércoles, 14 de marzo de 2012

SQL Injection (3ª Parte)

********************************************

SQL Injection (1ª Parte)
SQL Injection (2ª Parte)
SQL Injection (3ª Parte)
SQL Injection (4ª Parte)

********************************************



En el articulo anterior habiamos hablado sobre como poder sacar mediante una vulnerabilidad SQL Injection cual era la base de datos en la que nos encontrabamos, como que usuario estabamos realizando las consultas, la version de la base de datos y cual era la ruta donde estaba instalado mysql.

Ahora en esta tercera parte veremos como es posible sacar o volcar el contenido de cualquiera de las tablas que tenga la base de datos.

Una vez explicado que es lo que se va a ver en este articulo vamos a por ello!

Lo primero de todo, recordemos que en nuestro caso, la consulta tenia dos columnas, donde vamos a ver los resultados.

Para comenzar lo primero que haremos sera poner lo siguiente:

id=-1+union+select+1,table_name+from+information_schema.tables

Vamos a analizar que es lo que hacemos...

Por un lado como vimos en el anterior articulo, las dos columnas (1 y 2) son vulnerables por lo que podriamos realizar las futuras inyecciones tanto en la primera como en la segunda columna, yo en este caso utilizare la segunda.

Despues tenemos que acordarnos que como dijimos en el segudno articulo sobre sql, la base de datos information_schema contenia gran cantidad de tablas con información como las tablas que hay, columnas y demas. Por ello utilizaremos la tabla "tables" de dicha base de datos para averiguar cuales son las tablas que tiene la base de datos.

Como vemos en mi aplicacion solo sale una tabla por pantalla, esto se debe a la forma en la que esta implementada. Es decir que en muchas paginas hubieran salido todas de golpe, pero como no es el caso vamos a ver como podriamos solucionar esto.

Para ello haríamos lo siguiente

id=-1+union+select+1,table_name+from+information_schema.tables+limit+0,1

Al introducir esto vemos que el resultado es el mismo que antes, con la diferencia de que ahora vamos a poder ir viendo cuales son las tablas. Lo que estamos haciendo es decirle a la base de datos que unicamente nos muestre la primera columna del primer registro, y lo que haremos con esto sera buscar una por una cual es la tabla que nos interese.

Es decir, iremos haciendo:

limit+1,1
limit+2,1
...
limit+31,1 (En mí caso es la que nos interesa ya que es la tabla de usuarios)




Un pequeño dato importante es que en mi caso es necesario realizar un pequeño ByPass (Saltar filtro) para que la consulta sea cierta, esto se debe a que la consulta no nos permite meter "table_name", pero si unhex(hex(table_name)) con esto lo que estamos haciendo es pasar table_name a hexadecimal y despues de hexadecimal a normal, pudiendo saltarnos el filtro y que nos muestre la informacion. Por lo tanto la consulta final quedaria de la siguiente manera:

id=-1+union+select+1,unhex(hex(table_name))+from+information_schema.tables+limit+31,1



Espero que les haya gustado, y os espero en la cuarta entrega del post.


Un saludo!

P.D: Ante cualquier duda no duden en mandarme un correo.
       hacking.etico.web@gmail.com

No hay comentarios:

Publicar un comentario