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
1 |
-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:
1 |
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:
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 sqlmap1 |
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
--
dbs1 |
A lo que obtendremos algo como
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-dbOtro 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”1 |
Nos mostraría el nombre de las tablas de la base de datos information_schema
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 ejemplo1 | . /sqlmap .py -u "http://ejemplo.com/login.php?id=4" --sql-query= "SELECT user,pass FROM usuarios WHERE user LIKE '%admin%'" |
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.1 |
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 interese1 |
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”1 | . /sqlmap .py -u "http://ejemplo.com/login.php?id=4" --dump -D "information_schema" -T "GLOBAL_VARIABLES" |
Si por el contrario estamos ansiosos de información podemos volcar todo el contenido de todas las bases de datos mediante el modificador
--
dump-all1 |
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.