viernes, julio 20, 2007

SQL Injection en base a errores ODBC e Internet Explorer 7

El día de navidad del año 1998 rain.forest.puppy, en el Phrack Magazine Volumen 8, Número 54 publicó un artículo titulado “NT Web Technology Vulnerabilities” en el que analizaba las posibilidades de la inyección de código SQL en aplicaciones ASP y motores de bases de datos SQL Server 6.5. Utilizando estas técnicas hackeó Packetstorm, un sitio web con información sobre Seguridad Informática en el que consiguió convertirse en administrador, y explicó como lo hizo en un documento que publicó en Febrero del 2000 titulado “How i Hacked PacketStorm”.

Allá por el año 2001, en las conferencias de BlackHat, David Litchfield presentaba un documento titulado “Web Application Disassembly with ODBC Error Messages” [PPT en Blackhat] en el que se contaba cómo podía sacarse información sobre la base de datos de un aplicación web a partir de los mensajes de error ODBC no controlados por el programador.

En estos primeros documentos la extracción de información se hacía utilizando la visualización de los mensajes de error de los conectores ODBC, aún quedaba un año para que salieran a la luz pública las técnicas Blind.

Para ello, el objetivo es generar una inyección que provoque un error y leer en el mensaje de error datos con información sensible. Ejemplo:

Programa.asp?id=218 and 1=(select top 1 name from sysusers order by 1 desc)

El atributo name de la table sysusers en SQL Server es alfanumerico y al realizar la comparación con un valor numérico se generará un error. Si el programador no tiene controlados esos errores nos llegará a la pantalla un mensaje como el siguiente:

Microsoft OLE DB Provider for SQL Server error '80040e07'
Conversion failed when converting the nvarchar value 'sys' to data type int.
/Programa.asp, line 8


Y se obtiene el primer valor buscado. Después se vuelve a inyectar pero ahora se cambia la consulta de la siguiente forma, o similar:

Programa.asp?id=218 and 1=(select top 1 name from sysusers where name<’sys’ order by 1 desc)

Y se obtiene:

Microsoft OLE DB Provider for SQL Server error '80040e07'
Conversion failed when converting the nvarchar value 'public' to data type int.
/Programa.asp, line 8


Siguiente iteración:

Programa.asp?id=218 and 1=(select top 1 name from sysusers where name<’public’ order by 1 desc)

… y se automatiza la extracción de toda la información de la base de datos. Para ello hay herramientas que analizan estos mensajes de error y lo automatizan de forma eficiente. Priamos es una de estas herramientas.


Los Errores e IE7

Los errores de las aplicaciones web en Internet Explorer, desde la versión 5, se sustituyeron por errores más amigables. Se supone que un usuario no avanzado si se encuentra un error en un aplicación web no va a entender que ha pasado, así que se muestra una página con una pequeña explicación. En IE7 la página en cuestión tiene esta forma:


Arriba a la derecha se puede ver el código http que ha recibido el cliente. ¿Cuándo se muestra esta página y como quitarla? En la ruta del registro de tu máquina: HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Internet Explorer / MAIN / ErrorThresholds se configura, para cada código de respuesta de Error el número de bytes recibidos en una respuesta a partir del cual se debe mostrar el resultado recibido o por el contrario un error amigable.


Es decir, en la imagen de la captura, para el código 500 está puesto 200 en Hex, es decir 512 bytes. Si se reciben menos de 512 bytes se muestra el error amigable, de lo contrario, se muestran los datos recibidos. Si desesas deshabilitar los errores amigables, basta con configurar esos valores a 0.

Bies malignos!

PD: Os he contado esto porque ayer mismo SirW2p, Pedro Laguna, Silverhack, Kanovas y yo estuvimos pegandonos con esto.

Saludos Malignos!

3 comentarios:

Dani dijo...

Para los errores de IE7, si en vez de tocar el registro a pelo, entramos en "Opciones / Opciones avanzadas" y marcamos la casilla "Mostrar mensajes de error HTTP descriptivos" dentro de "Examinar", ¿se obtiene el mismo resultado o hay alguna diferencia notable?

Saludos y gracias por adelantado

Maligno dijo...

Nop, no hace lo mismo.

Leo dijo...

Sos un genio me re ayudo esto, ya que lo necesitaba y no lo podía activar desde Opciones de Internet porque por políticas esta desactivado!
Muchas Gracias!!!

Eleven Paths Blog

Seguridad Apple

Entradas populares