SQLiHelper 2.7: SQL Injection

2

Visto 2954 veces | Publicado el 28/10/2009 | sql pentest vulnerabilidades


Volvemos a la carga en nuestra búsqueda de herramientas que nos faciliten la vida a la hora de hacer cualquier revisión de seguridad sobre una aplicación Web.

En esta ocasión le ha tocado el turno a SQLiHelper que se trata de una aplicación cuyo objetivo es facilitar la extracción de información procedente de bases de datos, utilizando técnicas de inyección de SQL.

La última versión, 2.7, cuenta con soporte para motores de bases de datos SQL Server, Mysql y access.

Aunque no se trata de una herramienta tan sólida y potente como, por ejemplo, Pangolin, sí que tiene multitud de ventajas sobre todo para bases de datos MySQL.

0x01 UTILIZACIÓN

Para hacerla funcionar se necesita:

- Un sistema operativo windows
- Tener instalado el framework .NET.

Su funcionamiento es muy sencillo y con unos pocos clicks se pueden obtener fácilmente hasta los hashes de las contraseñas de los usuarios tal y como muestra la siguiente captura de pantalla:


Fig 1: Ejemplo de volcado de datos de una tabla de Mysql 5

Si se dispone de alguna dirección vulnerable a Inyección de SQL basta con introducirla en el campo target y pulsar el botón inject. SQLiHelper comenzará entonces a realizar peticiones web inyectando sentencias de SQL con el fin de comprobar si realmente es vulnerable y determinar, en primera instancia, el tipo y versión del motor de base de datos utilizado, el usuario y la base de datos en uso, así como el tipo de ataque que soporta.

Entre las opciones configurables se incluye el uso de un servidor proxy y la limitación del número de registros devueltos al efectuar el volcado de una tabla. También permite realizar ataques de inyección sql en páginas con autenticación básica mediante cookies.


Fig 2: Opciones de configuración: Soporte de proxy, hilos de ejecución y número máximo de filas para el volcado de datos

Para las aplicaciones web con base de datos access y mysql, permite la obtención de los nombres de las tablas mediante fuerza bruta. Para ello se puede personalizar el listado a utilizar en la fuerza bruta modificando los archivos que se encuentran dentro de la carpeta brute: table_names.txt y column_names.txt.

SQLiHelper cuenta también con una sección específica para explotar inyecciones ciegas de sql (Blind SQL) y hacer uso de la fuerza bruta.


Fig 3: Soporte para inyecciones ciegas y Fuerza bruta

También permite incorporar condiciones adicionales a las cláusulas where, leer archivos del servidor o guardar "la sesión" de forma muy básica en un archivo de texto. El autor ha incluido además 3 botones para lanzar otras de sus aplicaciones (Admin Finder, RS Checker y E-mail Checker). Salvo la herramienta Admin Finder que permite comprobar la existencia en un servidor de determinadas páginas de administración, las otras dos utilidades carecen de interés para el caso que se está tratando en este artículo.

 

0x02 CASO PRÁCTICO DE USO

 


Fig 4: Detección de Mysql 4

En esta captura de pantalla se puede observar un ejemplo de inyección sql sobre Mysql 4. Pulsando sobre Get Tables, SQLiHelper tratará de averiguar los nombres de las tablas mediante fuerza bruta.


Fig 5: Detección de Microsoft SQL Server y extracción de datos

En el caso de SQL Server se echa en falta la posibilidad de ejecutar comandos al estilo del CLI simulado que incorpora el Pangolin.


Fig 6: Detección de Mysql 5 y listado de bases de datos y tablas

Si se trata de Mysql 5 la enumeración de bases de datos y las tablas es automática, pudiéndose también realizar un volcado de los datos seleccionando las columnas que nos interesen.


Fig 7: Ejemplo de petición efectuada para obtener la tabla abs_anons

La extracción del listado de tablas se realiza mediante consultas union select sobre la base de datos information_schema.


Fig 8: Respuesta del servidor ante la petición anterior (Parte 1/2)

Haciendo uso de un proxy como, por ejemplo, Paros se puede comprobar lo que hace realmente SQLiHelper. La aplicación se encarga de parsear automáticamente las respuestas html enviadas por el servidor identificando la salida que busca tras la ejecución de la consulta.


Fig 9: Respuesta del servidor ante la petición anterior (Parte 2/2)

SQLiHelper no está al nivel de madurez de otras herramientas de inyección SQL con gui, como se puede observar, por ejemplo, en la siguiente captura de pantalla: una excepción sin controlar al tratar de guardar "la sesión" cuando el nombre del servidor contiene caracteres "extraños" para el SQLiHelper, en este caso un puerto diferente al 80.


Fig 10: Excepción obtenida al grabar el log de un ataque

0x03 CONCLUSIONES

Durante las pruebas realizadas el funcionamiento ha sido aceptable, sobre todo con Mysql 5 y SQL Server, permitiendo obtener el listado de bases de datos y tablas con rapidez. El volcado de información, en cambio, no ha funcionado de igual forma, quedándose a medias en algunas ocasiones e incluso siendo incapaz de obtener el contenido de alguna tabla.

A pesar de estar ya en su versión 2.7, hay que reconocer que está un poco verde, pero en determinados escenarios es rápida y efectiva.

En definitiva, se trata de una herramienta que apunta maneras pero que aún debe mejorar si quiere hacerse un hueco en el mundo de los ataques por inyección de SQL. Como punto a favor tiene su gran facilidad de uso. En contra, además de lo ya comentado, cabe destacar la inexistente documentación, junto al hecho de que el autor no ha decidido distribuir el código fuente.

Habrá que estar atento para ver si el proyecto evoluciona favorablemente con nuevas versiones que solucionen los errores detectados o, si por el contrario, queda en el olvido.


noviembre 02 10:43 p.m.
MeTalSluG dijo:

Ya está arreglado. Gracias por el aviso.

octubre 29 1:05 p.m.
Romel dijo:

Me gustaria poder seguir vuestra web a traves de RSS pero el link no funciona...


Añadir comentario










captcha


Búsqueda

Síguenos


El staff de Hacktimes ruega a cualquier persona interesada en la distribución y/o publicación de estos artículos que lo haga sin alterar su contenido y cite a su autor y/o la fuente original. Muchas gracias.

Todos los artículos publicados se encuentran bajo la licencia Creative Commons