POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
Asegúr@IT 7: Serialized SQL Injection
1. SFX-SQLiSelect For Xml SQLinjection / Serialized SQL injectionExtracción rápida de información utilizando inyección SQL con instrucciones XML Daniel Kachakil Asegur@IT 7 24/03/2010 – Barcelona
2. Contenido ¿Qué es la inyección SQL? Técnicas de inyección SQL clásicas Serialización y la cláusula FOR XML Obtención de columnas y tipos Ajuste de la inyección Ejemplos y demos 2
4. ¿Qué es la inyección SQL? Vulnerabilidad de aplicaciones informáticas Su origen está en el filtrado incorrecto o inexistente de los parámetros de entrada a la BD Graves consecuencias: Cualquiera puede inyectar instrucciones SQL que terminan siendo ejecutadas por el motor de base de datos 4
5. ¿Qué es la inyección SQL? 5 ASP/PHP/JSP/... <% cmd = "SELECT * FROM…" %> GET/ SGBD SQL POST Datos HTML Pero no es exclusiva de aplicaciones web
6. Ataques a la seguridad Integridad: Borrado o corrupción de datos UPDATE, DELETE, INSERT, DROP, ... Disponibilidad: Denegación de servicio SHUTDOWN, consultas complejas, exploits, ... Confidencialidad: Acceso a datos privados Bypass de autenticación (' or '1'='1) A ciegas (Blind SQL injection) A través de mensajes de error Anexando otros conjuntos de datos 6
7. Inyección SQL básica Usuario: ' or '1'='1 Contraseña: ' or '1'='1 "SELECT * FROMUsuarios WHERE nombre='" + usuario + "' AND pass='" + contraseña + "'" 7
8. Inyección SQL básica "SELECT * FROMUsuarios WHERE nombre='' or '1'='1' AND pass='' or '1'='1'" La condición WHERE siempre es cierta Devuelve toda la tabla de usuarios El primer registro suele coincidir con el del administrador 8
9. Inyección SQL a ciegas Booleanización: más eficiente con búsqueda binaria EXISTS (SELECT … WHERE n < 128) V EXISTS (SELECT … WHERE n < 64) V EXISTS (SELECT … WHERE n < 32) F EXISTS (SELECT … WHERE n < 48) V EXISTS (SELECT … WHERE n < 40) F EXISTS (SELECT … WHERE n < 44) F EXISTS (SELECT … WHERE n < 46) F EXISTS (SELECT … WHERE n < 47) V Conclusión: n=46 9
19. GROUPBY / HAVING 1=1 HAVING 1=1 Error (cuyo texto revela el nombre de la primera columna) GROUPBYcolumna1HAVING 1=1 Error con el nombre de la segunda columna GROUPBYcolumna1, columna2HAVING 1=1 Error con el nombre de la tercera columna ... GROUPBYcolumna1, columna2, columna3, … , columnaNHAVING 1=1 Sin errores 19
20. ORDERBY N ORDERBY 1 Sin errores ORDERBY 2 Sin errores ... ORDERBY N Sin errores ORDERBYN+1 Falla (Ante el primer fallo probar más valores por si se tratara de un campo no ordenable. Ej: de tipo binary/varbinary) 20
21. UNIONNULL UNIONSELECTnullWHERE 0=1 Falla UNION SELECT null, null WHERE 0=1 Falla UNION SELECT null, null, null WHERE 0=1 Falla ... UNION SELECT null, null, null, null, … , null WHERE 0=1 Sin errores 21
23. Obtención del tipo de datos Basta con encontrar una columna de tipo texto char, varchar, nvarchar, ... Si muestra errores: CAST(), CONVERT() En otro caso: UNIONSELECTnull, null, 'a', null, null, ... [WHERE 1=0] 23
27. SFX-SQLiTool 1.0 Capaz de extraer tablas completas con una sola petición Inyecciones GET y POST. SSL, cookies, proxy, etc Si las tablas son muy grandes, las puede segmentar Implementa todas las técnicas descritas antes Ayuda al descubrimiento de columnas y tipos Deshace la codificación HTML automáticamente Log de todo lo que inyecta y de las respuestas Visualización en explorador integrado y código fuente 27
28. Novedades en SFX-SQLiTool 1.1 Acceso completo a otras bases de datos del mismo servidor a través de la master Ejecución de consultas personalizadas Ajustes de configuración avanzada Pequeñas mejoras y correcciones 28
30. Medidas de protección Las de siempre: filtrar todas las entradas al gestor de bases de datos Forzando la conversión de tipos para entradas numéricas Filtrando o escapando los caracteres peligrosos para las cadenas de texto (comilla simple) Siempre hacerlo en el servidor en última instancia (no confiar en JavaScript, Flash, Silverlight, etc) 30
31. Medidas de protección Utilizar los mecanismos de protección de la plataforma en la que estemos desarrollando Consultas SQL parametrizadas, filtros predefinidos, etc. Aplicar el principio de menor privilegio Limita las consecuencias ante un ataque exitoso No dar información detallada sobre los errores “Contraseña incorrecta para el usuario usuario” “Error al conectar con la base de datos mibasededatos” Response.Write(ex.ToString()) en bloques Try - Catch 31
32. Descarga de la herramienta y más información en mi web: http://www.kachakil.com Daniel Kachakil dani@kachakil.com ¡Muchas gracias!