Buscando...
28 septiembre 2007

Inyección del SQL a ciegas por tiempo

Las primeras referencias sobre los “ataques a ciegas” pueden ser encontradas en el informe de Chris Anely de junio de 2002 “(More) Advanced SQL Injection” [1] en el cual dirige la atención a la posibilidad de crear tales ataques, y en este caso especifico, por tiempo, siendo uno de los menos comunes. Chris brinda algunos ejemplos de técnicas de inyección de SQL a ciegas:

<<•••••• if (ascii(substring(@s, @byte, 1)) & ( power(2, @bit))) > 0 waitfor delay '0:0:5'
…es posible determinar si un trozo dado en un serie es ‘1’ o ‘0’. Es decir, la consulta anterior entrará en pausa por cinco segundos si el '@bit' del byte '@byte' en una serie '@s' es '1.'

Por ejemplo en la siguiente consulta:
declare @s varchar(8000) select @s = db_name() if (ascii(substring(@s, 1, 1)) & ( power(2, 0))) > 0 waitfor delay '0:0:5'
Entrará en pausa por cinco segundos si el primer bit del primer byte del nombre de la base de datos actual es 1.

Tal y como muestran estos ejemplos, la información es extraída de las bases de datos utilizando un parámetro vulnerable. El código es luego inyectado para generar un retardo en el tiempo de respuesta cuando la condición es verdadera.

Luego de esta primera referencia, las técnicas de inyección de SQL a ciegas continuaron siendo estudiadas con la mayoría de las técnicas que generan mensajes de error del sistema de ataque, debido a la simpleza, la rápida ejecución y la extensión en la muestra del mensaje de error en contraposición al retardo en la base de datos. Un año después, en setiembre del 2003, Ofer Maor y Amichai Shulman publicaron el documento “Blindfolded SQL Injection” [2]. En este analizan las diferentes formas de identificación de un parámetro vulnerable en el sistema de inyección del SQL, aun cuando la información procesada y devuelta por el sistema no sea visible.

En la Conferencia de BlackHat del 2004, Cameron Hotchkies presentó el documento “Blind SQL Injection Automation Techniques” [3]. Propuso métodos alternativos para automatizar la explotación de un parámetro vulnerable de Inyección de SQL a ciegas, utilizando las herramientas acostumbradas. Sugirió además tres tipos de soluciones diferentes para la automatización: (1) la búsqueda de palabras clave para los resultados positivos y negativos; (2) el uso de firmas MD5 para discriminar entre resultados negativos y positivos; (3) y el utilizar un motor de diferencias textuales. También introdujo el Squeal, una herramienta automátizada para obtener información a través de la Inyección del SQL a ciegas que luego evolucionó, transformándose en otra herramienta llamada Absinthe [4].

En setiembre de 2005, David Litchfield publicó el artículo “Data Mining with SQL Injection and Inference” [5], donde trata las técnicas de interferencia por tiempo, y propuso dos formas de obtener tiempos de retardo utilizando llamadas para guardar procedimientos, como xp_cmdshell en el servidor MS SQL Server para rastrear un paquete.

xp_cmdshell ‘ping –n 10 127.0.0.1’ → aplicación en pausa durante 10 segundos.

Las técnicas por tiempo pueden ser extensibles a cualquier acción llevada a cabo para guardar procedimientos y capaz de generar tiempos de retardo o cualquier otra acción medible.

En diciembre de 2006, Ronald van den Heetkamp publicó la “SQL Injection Cheat Sheet” [6], incluyendo los trucos de inyección del SQL a ciegas para MySQL con algunos ejemplos basados en la función Benchmark que puede generar tiempos de retardo. Por ejemplo:

SELECT BENCHMARK(10000000,ENCODE('abc','123')); [around 5 sec]
SELECT BENCHMARK(1000000,MD5(CHAR(116))) [ around 7 sec]
Ejemplo: SELECT IF( user = 'root', BENCHMARK(1000000,MD5( 'x' )),NULL) FROM login

Una explotación reciente [7], publicada en junio de 2007 en http://www.milw0rm.com (un sitio web dedicado a las explotaciones y seguridad) muestra como esta técnica puede ser utilizada para atacar un servidor de juegos llamado Solar Empire:

¡$sql="F***You'),(1,2,3,4,5,(SELECT IF (ASCII (SUBSTRING(se_games.admin_pw, ".$j.", 1)) =".$i.") & 1, benchmark(200000000,CHAR(0)),0) FROM se_games))/*";

Tal y como indican los estudios de las técnicas de Inyección del SQL a ciegas por tiempos, las mismas avanzan y mejoran, y por lo tanto algunas nuevas herramientas han sido creadas, tales como la SQL Ninja [8], que utiliza el método de Wait-for (espera) para los motores del servidor de Microsoft SQL Server o el SQL PowerInjector[9], que implementa el método de Wait-for (espera) para los motores de la base de datos del servidor del Microsoft SQL Server, las funciones de Benchmark para los motores MySQL, y una extensión del método Wait-for (espera) para los motores Oracle, utilizando llamadas a métodos DBMS_LOCK.

0 comentarios:

 
Back to top!