viernes, 9 de marzo de 2012

SQL Injection (2ª parte)

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

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

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



Una vez que ya hemos visto como trabajan las bases de datos y un pequeño ejemplo de SQL Injection vamos ahora a ver como sacar información de la base de datos desde la pagina web.


Lo primero que tenemos que saber es lo que vamos a buscar, en este caso nosotros vamos a buscar que la base de datos nos diga cual es el usuario que estamos ejecutando, la version, cual es la base de datos en la que estamos y cual es la direccion en el host en el que se encuentra la base de datos.

Para ello, y esto es esencial, es descubrir si la aplicacion es vulnerable. Para saber esto debemos fijarnos (por ahora) en la url, y en los distintos parametros que tenga.

En mi caso, para este ejemplo me he construido una aplicacion vulnerable, que ademas nos mostrara cual sera la consulta que estamos realizando a la base de datos. En dicha aplicacon como en muchas en internet, se realizan consultas para sacar informacion por pantalla, como pueden ser noticias, comentarios.. Todo ello almacenado en la base de datos.

Comencemos con el ejemplo:

A continuacion se muestra la pagina web donde se va a realizar la prueba:



Para ver si alguno de los parametros de la pagina web es vulnerable introducimos una comilla simple.
Esto como se a visto anteriormente probocara un error en la base de datos, error que sera mostrado por pantalla como se puede ver en la siguiente imagen:




En este caso estamos comprobando que el parametro "id" es vulnerable a SQLi. Ahora lo que tenemos que hacer es dejar la consulta que se este mostrando como una consulta vacia. Para ello en este caso metemos id=-1, y debido a que no hay ninguna noticia que tenga id=-1 pues la consulta como se ve esta vacia. Con lo cual vemos que no nos sale ningun dato por pantalla.



El paso anterior tambien se podria haber logrado introducieno algo como id=1+and+1=0, con esto lograriamos que la consulta fuese siempre falsa ya que 1 nunca sera igual a 0. (Los "+" se ponen debido a que en la url son el equivalente a un espacio, ya que este no se puede poner).

Una vez visto lo anterior tendriamos que pasar a averiguar cuantas columnas tiene la consulta que se esta realizando en la web, en este caso lo sabemos, pero lo que habria que hacer es lo siguiente:

Por un lado unir a la consulta anterior lo siguiente:
          id=-1+union+select
               
Ahora tendriamos que ir introduciendo filas hasta que la aplicacion no nos muestre el error de la base de datos, que como hemos dicho antes se produce porque la instruccion union requiere que las consultas realizadas tengan el mismo numero de columnas. Por lo tanto realizariamos las siguiente consutas:

          id=-1+union+select+1 (Nos seguiria saliendo el error)
          id=-1+union+select+1,2 



Una vez llegados aqui vemos que no nos sale ningun error, y que ademas donde deberia ir el nombre y el comentario nos ha aparecido 1,2 que son los numeros que hemos introducido.

Esto implica que son ambas son vulnerables y que en dichos campos vamos a poder sacar informacion.

Veamos como:

           Si ahora en vez de poner 1,2 pusieramos database(),user()
                              
           Quedando la consulta de la siguiente forma:

                     id=-1+union+select+database(),user()

Esto nos mostraria la base de datos y el usuario que estamos ejecutando en la base de datos.
Ambas son unas funciones de SQL.



Y por ultimo vamos a sacar cual es la version de la base de datos y la ruta del servidor donde esta instan las bases de datos.

Sustituiriamos la consulta anterior por:                               
          id=-1+union+select+@@version,@@datadir



Y como podemos ver en la imagen nos sacaria la version de la base de datos y la ruta.
               
Hasta aqui hemos visto como con una SQLi podemos sacar informacion de la base de datos.
En la siguiente parte veremos como podemos sacar tablas, columnas y su contenido.


Espero que les haya gustado, y os espero en la tercera 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