Inyección de código SQL en MS SQL Server 2005 (Parte 2 de 6)

0

Visto 1426 veces | Publicado el 16/01/2010 | sql pentest hacking vulnerabilidades


Esta es la segunda parte de un total de seis artículos, en los que se va a tratar en profundidad todo lo relacionado con la vulnerabilidad de Inyección de código SQL en servidores MS SQL Server 2005. En el anterior capítulo, se hizo un repaso a lo que es la vulnerabilidad en sí y en éste se va a explicar la función de MS SQL Server, CONVERT que resulta muy práctica para explotar este tipo de vulnerabilidad.

 

2.- Función CONVERT de MS SQLSERVER

Esta función de conversión de tipos de datos de MS SQLSERVER va a ser muy útil para la explotación de inyecciones de código SQL, ya que nos va a permitir la obtención de información en los casos que no es posible con la cláusula UNION.

La utilidad de esta función es la siguiente: imaginemos que tenemos un campo pagina de tipo string, el cual queremos utilizar para realizar operaciones aritméticas. A priori, al tratarse de un string, no podremos sumar/restar etc pero con el uso de esta función podemos convertir, si es viable, una cadena a un entero. La sintaxis de la función es la siguiente: convert(A,B), siendo B el dato que queremos convertir en el tipo de dato A.

Por ejemplo, si tenemos el dato string pagina='25' haríamos la siguiente conversión para obtener un entero convert(int,pagina).

Todos los tipos de datos no son convertibles, por lo que si intentamos una conversión del tipo convert(int, 'HOLA') el DBMS de MS SQLSERVER mostrará un error de conversión de tipos, concretamente mostrará el siguiente error: Conversion failed when converting the varchar value 'HOLA' to data type int.

Entendido esto, ¿Cómo podemos utilizar esta función en una inyección de código SQL en MS SQLSERVER? Teniendo en cuenta que al producirse un error en la conversión de tipos, el DBMS nos devuelve la cadena que no ha sido posible convertir, veamos qué ocurre si se introduce un SELECT en vez de una cadena, por ejemplo vamos a consultar la versión mediante la variable @@version con la siguiente consulta:

href="http://server/insertar.asp?texto=admin'+and+1=convert(int,@@version)--

y obtenemos el siguiente resultado:

 

Es decir, el DBMS intenta convertir el tipo nvarchar resultado de consultar el @@version en tipo entero, como no es posible devuelve un error dentro del cual muestra la versión del DBMS:

Conversion failed when converting the nvarchar value 'Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86) Oct 14 2005 00:33:37 Copyright (c) 1988-2005 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 1)' to data type int.

Vamos a explicar las novedades introducidas en la consulta anterior:

http://server/insertar.asp?texto=admin'+and+1=convert(int,@@version)--

  • En primer lugar cerramos las comillas del parámetro texto=admin'

  • A continuación introducimos la sentencia lógica and 1=convert(int,@@version) en la que debe cumplirse que 1 sea igual a la conversión en entero del @@version, hacemos esto para construir una consulta sintácticamente correcta.

  • Por último, introducimos los caracteres -- de comentario, para eliminar el resto de la consulta original de la aplicación, para que no se produzca un error de sintaxis, esto mismo podemos sustituirlo por la cadena and 'a'='a la cual cumplirá la misma función de evitar el error de sintaxis, siendo la petición completa similar a la siguiente: http://server/insertar.asp?texto=admin'+and+1=convert(int,@@version)+and+'a'='a

Por cierto, se me había olvidado comentar que el carácter + en ulrencoding es igual a su correspondiente encoding en el valor hexadecimal en ascii (20) por lo que es lo mismo escribir espacio, %20, +, en los tres casos será interpretado como un espacio. También hay que tener en cuenta que dependiendo del navegador Web utilizado, los errores serán visibles o no, es decir, si utilizamos el awesome Internet Explorer, éste se encarga de enmascarar el error y devolver un error genérico como se puede ver en el siguiente ejemplo:

Por ello, desde hacktimes se recomienda utilizar cualquier otro navegador que no sea Internet Explorer para este tipo de vulnerabilidad, como, por ejemplo, Mozilla Firefox, Opera, Chrome, etc.

 

Y hasta aquí esta segunda parte de la guía definitiva para ataques de Inyección de código SQL en MS SQL Server 2005. En la próxima entrega ya entraremos en materia de cómo proceder ante una aplicación vulnerable y obtener todo tipo de información y datos: Sistema Operativo, versión del motor de base de datos SQL utilizado, etc.



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