PDF de programación - MYSQLBFTOOLS - Sacando provecho a inyecciones "ciegas" de SQL

Imágen de pdf MYSQLBFTOOLS - Sacando provecho a inyecciones "ciegas" de SQL

MYSQLBFTOOLS - Sacando provecho a inyecciones "ciegas" de SQLgráfica de visualizaciones

Publicado el 7 de Agosto del 2018
613 visualizaciones desde el 7 de Agosto del 2018
61,5 KB
10 paginas
Creado hace 18a (08/04/2006)
Published on hacktimes.com (http://www.hacktimes.com)
MYSQLBFTOOLS - SACANDO PROVECHO A
INYECCIONES "CIEGAS" DE SQL.
By MeTalSluG
Creado 17 Mar 2006 - 11:34

MySqlbf es una herramienta de pentest que nos permite extraer información
de una base de datos MySQL realizando un ataque de fuerza bruta sobre
aplicaciones web vulnerables a una inyección “ciega” de SQL (Blind SQL
Injection). Inicialmente desarrollada en C por ilo y publicada en
www.reversing.org [1], la última versión disponible (v1.2) se acompaña además con
otra serie de utilidades nada despreciables.
Pese a que el autor ha decidido abandonar el proyecto original, éste ha sido retomado
por A.Ramos, quien ha portado la herramienta al lenguaje perl. El código fuente podeis
encontrarlo en:
bsqlbf.pl [2] junto con un video explicativo accesible aquí [3].

La inyección de código SQL, permite al atacante interactuar con el gestor de base de
datos utilizado por la aplicación, pudiéndose en ocasiones no sólo obtener, modificar,
añadir o borrar el contenido de la base de datos, sino también ir más allá, ejecutando
comandos propios del sistema operativo, con las implicaciones de seguridad que
obviamente esto supone. Los ataques son posibles gracias a que la aplicación no realiza
un correcto saneamiento de los datos de entrada recibidos por el usuario. El programa
acepta y procesa los datos recibidos considerándolos como inocuos, permitiendo al
atacante alterar la sentencia SQL original.

Para verificar, sin realizar una auditoría del código fuente, si una aplicación es
vulnerable a un ataque de este tipo, se envían determinados datos de entrada para
generar errores en la sintaxis SQL. Basándonos en estos errores que nos muestra el
servidor, es posible hacer ingenieria inversa de la sentencia SQL original que se está
ejecutando, para de este modo, forzar a la aplicación a ejecutar otra/s sentencias. En
ocasiones, no se nos muestra ningún mensaje de error.
Esto puede ser debido a que el programador ha modificado la lógica de la aplicación
con el fin de ocultar el problema subyacente, quizá redirigiendo al usuario a una página
de error personalizada en la que no se muestra ninguna información útil, dando por
supuesto que esta contramedida es lo suficientemente eficaz para disuadir a un posible
atacante. Craso error. Nos encontramos entonces, ante una situación de inyección
“ciega” de SQL, donde la única forma de proceder es formular preguntas a la
aplicación, que nos serán contestadas mostrándonos un comportamiento diferente. Nos
toca a nosotros interpretar esas respuestas como valores verdaderos ó falsos para extraer



1

información útil, ya sea simplemente averiguar si el usuario con el que se efectúa la
conexión a la base de datos es el administrador, o bien preguntas mucho más complejas.

Las herramientas desarrolladas por ilo, nos facilitan esta labor. A destacar también el
programa mysqlget que nos permitirá incluso descargar archivos interactuando con el
servidor MySQL !! (Para que funcione, el usuario de mysql system_user() necesita tener
permisos de lectura del archivo a descargar, y el usuario con el que se ejecuta la select
donde se realiza la inyección tiene que tener privilegios FILE).

A continuación os incluimos la traducción del artículo original [4] escrito por ilo.
No os perdais el “otro” video [5]. Cuidadito con pestañear ;)

INYECCIÓN "CIEGA" EN MySQL Y ESTRESS DE LA BASE DE DATOS

Os sugiero completar la información proporcionada por este artículo con el resto de
documentos que tratan la inyección ciega en MySql disponibles en la web.

Actualmente, ya existen algunas herramientas que permiten obtener información de las
tablas de una base de datos (Microsoft SQL Server) cuando existe inyección ciega de
código sql, tal es el caso de los programas Datathief o Absinthe. El problema en Mysql
es la dificultad para obtener la estructura de la base de datos. En versiones antiguas de
Mysql no hay objetos METADATA que definan la estructura de la base de datos o
similares, por lo que no se puede crear un procedimiento almacenado para manipular
y/o conocer esta información, como hacen estos programas con otros gestores de bases
de datos.

La información de este documento está enfocada desde el punto de vista de un servicio
web vulnerable a una inyección de código sql.

MÉTODOS ACTUALES DE INYECCIÓN CIEGA DE SQL

A pesar del título, este artículo no trata en profundidad el complejo mundo de la
inyección de sentencias sql en bases de datos Mysql. Son solo unas notas!

La mayoria de las herramientas disponibles utilizan procedimientos almacenados para
extraer los datos. La configuración de la herramienta incorpora algunas variables para
crear los procedimientos almacenados en el servidor remoto y la herramienta interactua
posteriormente con ellos.
El servidor Microsoft SQL Server mantiene un catalogo (igual que lo hacen otros) sobre
como están formadas las bases de datos, sus tablas y sus campos. Los procedimientos
almacenados usan este catalogo para mostrar la estructura de la base de datos al usuario,
de forma que se pueda interactuar con ella.

Otra de las funcionalidades no disponible en Mysql es la posibilidad de ejecutar más de
una sentencia en una consulta a la base de datos desde el servicio web. Es decir, las
sentencias se ejecutarán separadas con el caracter ";", mientras que Mysql solo permite
la ejecución de una sentencia a la vez. En este sentido, Mysql es la menos desarrollada
(o la más segura) interfaz, ya que Mysql v3 no permite el operador UNION en las
sentencias.



2

TIPOS DE DATOS

Una de las caracteristicas que ofrece Mysql a la hora de realizar una inyección de
código sql ciega son los tipos de datos de las variables.
Casi todos los valores pueden ser gestionados como una variable, por lo que no hay
necesidad de identificar el tipo de datos en la petición, lo cual es realmente útil.

Olvídate de los formatos de los campos como VARCHAR, DATE ya que son
establecidos por defecto como "variant" por el servidor web o por el motor de mysql.
Por lo que por ejemplo, la sentencia "SELECT 1 FROM
users WHERE 1=1" será aceptada de igual forma que "SELECT '1' FROM users
WHERE 1=1". Lo que significa que el gestor de base de datos dará el mismo resultado
en la dos sentencias, sin embargo si el servicio web espera determinado tipo de datos la
aplicación fallará.

EXPLOTANDO INYECCIÓN CIEGA DE SQL EN MySQL

Se asume que el lector conoce lo que es una inyección de sentencias SQL y cuando se
dice que se trata de una inyección “ciega” (Blind sql injection). Comencemos por un
script web que nos permita inyectar código SQL pero sin mostrarnos ningún error que
se pudiera producir. Podemos esperar dos tipos de respuestas ante una inyección SQL
correcta, una se produciría cuando la sentencia devuelve el mismo resultado esperado
sin una inyección, y la otra sería una respuesta sin resultados, una página de error o una
redirección, o quizá una página “por defecto”. Los resultados pueden ser diferentes si se
utiliza el operador AND o el operador OR en la sentencia inyectada. Me explico:

- Operador OR: podría utilizarse para mostrar múltiples resultados
procedentes de una inyección SQL.
- Operador AND: podríamos adivinar valores, con la finalidad de
“concretar” las peticiones.

Sería útil determinar los diferentes vectores de ataque en una inyección SQL (MySQL)
que nos permitan estresar la base de datos y obtener así su estructura:

- El uso de INTO OUTFILE, o LOADFILE. Hacer uso de funciones que nos permitan
interactuar con el sistema de archivos nos será de gran ayuda en multitud de posibles
ataques:

La posibilidad de crear una interfaz de la base de datos utilizando volcados a un archivo
nos permitirá crear una sencilla versión de una página export.php o export.xxx que haga
uso de una conexión a la base de datos. Esto nos permitirá ejecutar comandos como
"SHOW DATABASES" o "SHOW TABLES" con el siguiente código: $result =
mysql_query("SHOW tables", $db); . Posteriormente, el uso del comando "DESCRIBE
nombretabla" con cada una de las tablas nos mostrará más información, con el objetivo
de automatizar por completo la exportación de modo similar a la función de exportación
de aplicaciones como PhpMyAdmin.
Utilizar el sistema de archivos para obtener el control de la base de datos es un método
un poco intrusivo, pero a efectos prácticos viene a ser lo mismo que utilizar los
procedimientos almacenados.



3

- El uso del operador UNION para expandir el área de ataque a otras tablas y objetos
por petición:

Cuando está disponible, el operador UNION permite realizar peticiones sql que afecten
a otras bases de datos o tablas mediante el formato *** UNION SELECT * FROM
mysql.user WHERE **** , esto nos servirá de gran ayuda para extraer datos de la base
de datos.

- Manejo de errores, es importante resaltar que una inyección de sentencias sql puede
ser “ciega” incluso si el manejo de errores de la aplicación está establecido de tal forma
que muestre algun tipo de información al usuario sobre el error que se ha producido.

Lo importante aquí, es la posibilidad de que se nos muestre un error ocasionado por el
código que será ejecutado posteriormente al que nosotros hemos insertado. El error
mostrado no sera de mucha utilidad en el proceso de extracción de información, pero
puede ayudarnos a determinar cómo explotar la inyección, es decir, cuando está bien
formada la inyección de prueba.

OBTENIENDO LA ESTRUCTURA DE UNA BASE DE DATOS MySQL

En mi opinión, la primera tarea a realizar es la obtención de la estructura de la base de
datos, pero esto, obviamente dependerá de los privilegios que tenga el usuario utilizado
por el script o página en cuestión para conectarse a la base de datos. Esta situación
podría limitar nuestro ámbito de actuación en la base de datos utilizada por el usuario en
la consulta actual o en aquellas a
  • Links de descarga
http://lwp-l.com/pdf12916

Comentarios de: MYSQLBFTOOLS - Sacando provecho a inyecciones "ciegas" de SQL (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad