Blog

SQLmap – Explotando una SQL Injection

Buenas a todos! Con este post estrenamos una nueva y pequeña serie de unos cuantos post que voy a realizar sobre el uso de la fantástica herramienta SQLmap. En este primer post veremos cómo podríamos utilizar la herramienta para volcar la información de la base de datos aprovechándonos de una SQLi, en el siguiente veremos un ejemplo de un caso real donde ademas utilizaremos TOR para poder realizar las pruebas de una forma más “anónima” y en los siguiente veremos puntos concretos de la herramienta como por ejemplo la modificación del User-Agent, la detección de WAF, los diferentes niveles y riesgos con los que podemos configurar la herramienta, union con Metasploit para troyanizar un servidor y unas cuantas cosas más.

Bueno como todo vamos a ver un poco primero que es SQLmap. SQLmap es una herramienta escrita en Python que se encarga de realizar peticiones a los parámetros de una URL que se le indiquen, ya sea mediante una petición GET, POST, en las cookies y un largo etc… Buscando que la aplicación sea vulnerable a una posible SQLi y poder explotarla. Como se verá más adelante, la herramienta es capaz de explotar todo tipo de SQLi como union-base, time-base-blind, base-blind-injection, heavy-queries y una enooorme cantidad más.

Vamos a ver cómo podríamos ejecutar la herramienta para explotar una SQL Injection. Para empezar las pruebas se van a hacer sobre la maquina que se utilizo en el CTF-1 que es la siguiente…

sqlmap_2

 

Nos vamos al primer ejemplo de SQL Injection…

sqlmap_3

 

Deberíamos coger la URL que sabemos en este caso que es vulnerable para pasársela a SQLmap, en caso de ser una caso real o una auditoria tendríamos que utilizar un analizador de vulnerabilidades o realizando nosotros las pruebas a mano para comprobar o tener una idea más o menos de si puede ser vulnerable para evitar realizar excesivas pruebas con SQLmap. Así que una vez tenemos la URL la introducimos en SQLmap de la siguiente manera, especificando “–dbs”, lo cual indica que nos saque las bases de datos existentes…

sqlmap_4

 

Como vemos en la imagen anterior la herramienta nos está indicando que el parámetro name es vulnerable y que según test heurísticos de SQLmap, la base de datos tiene pinta de se MySQL, por lo que nos propone hacer las pruebas únicamente para esa plataforma. Tras aceptar y como vemos en la imagen siguiente realiza gran cantidad de pruebas hasta obtener que realmente la web es vulnerable a SQL Injection mediante Union-Base, lo cual nos permitirá sacar los datos de una forma muy rápida, por lo que nos pregunta si queremos seguir haciendo pruebas (NO!)…

sqlmap_5

 

Tras dar explotar la SQLi vemos que nos saca las formas en las que es posible explotar la vulnerabilidad según las pruebas realizadas, y las bases de datos existentes…

sqlmap_6

 

Ahora que ya tenemos las bases de datos vamos a ver cómo podríamos sacar las diferentes tablas, en este caso de la base de datos exercises. Para ello ejecutamos la siguiente consulta con SQLmap…

sqlmap_7

 

Lo cual nos da como resultado las diferentes tablas que hay en dicha BD como vemos a continuación…

sqlmap_8

 

¿Y ahora? Pues a sacar las columnas que tiene la tabla que nos interese, en este caso users, para ello ejecutamos lo siguiente…

sqlmap_9

 

Y esto tal y como esperábamos nos devuelve las columnas existentes en esa tabla…

sqlmap_10

 

Pues ahora podríamos sacar una shell sql para interactuar directamente con la base de datos, para lo que únicamente tendríamos que poner –sql-shell (Lo veremos en siguientes post) o realizar un volcado de la tabla completa de la siguiente forma…

sqlmap_11

 

Lo cual no da de una forma bastante ordenada un volcado de la tabla seleccionada…

sqlmap_12

 

Y con esto habríamos conseguido volcar la información que quisiéramos explotando de una forma realmente sencilla una SQL Injection. Antes de terminar os voy a dejar con una captura realizada a los logs de apache donde se puede ver perfectamente la IP de la que viene la petición, la petición en sí, el User-Agents y algunas cosas mas… Cosas que mostrare como cambiar en los próximos post.

sqlmap_13

 

Espero que os haya gustado!

Un saludo,

Eduardo – eduardo@highsec.es – @_Hykeos

  1. BTshell
    BTshell08-15-2013

    Muy buen post Edu, sqlmap es una gran herramienta.

  2. Ru
    Ru08-15-2013

    Muy bien explicado, pero me gustaría ver más sobre cómo consigue SQLmap detectar esas vulnerabilidades…

    • BTshell
      BTshell08-15-2013

      En ealidad Ru con esta simple consulta ./sqlmap.py -u “http://ejemplo.com?id=3” nos diria las vulnerabilidades que hay, pero si aún así no diese vulnerabilidad alguna el sqlmap, pero si no se ha encontrado ninguna vulnerabilidad nos dará 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 5 niveles diferentes, también puedes utilizar el modificador -v NUMERO este último modificador se refiere al modo vervose de la aplicación, cuanto mas alto sea el numero más información nos mostrará sqlmap mientras se realiza el escaneo, esta sería la secuencia: ./sqlmap.py -u “http://ejemplo.com/login.php?id=4” –level=5 -v 3 en fin Ru, sqlmap es una aplicación con muchisimas opciones, en este post simplemente se ha mostrado una de ellas pero es cuestión de que vayas indagando y probando otras muchas, saludos.

    • Eduardo Arriols
      Eduardo Arriols08-15-2013

      Si,sin duda como dice BTshell es una herramienta con una enooorme cantidad de posibilidades que iremos viendo mas adelante ya que quedan unos cuantos de SQLmap que ya están preparados 😉

      Un saludo!

  3. jerrmod
    jerrmod11-27-2013

    alguien me ayuda? tengo total acceso a la db de una pagina por vulnerabilidades de SQLi, pero desactivaron el acceso a la cuenta del admin de manera remota porque no puedo acceder a ella, alguna otra forma de defacearlo?

  4. Sa_Ve
    Sa_Ve08-31-2014

    Muy interesante, pero para volcar solo usuario y contraseña sin tener que volcar toda la base de datos si es grande como se podría hacer?

Leave a Reply

*

    No Twitter Messages