Clase 06: Inyección de comandos en bases de datos
Taller de Seguridad Web
Claudio Salazar (csalazar spect cl)
Sky -
Beige -
Simple -
Serif -
Night -
Default
Agenda
- Bases de datos SQL.
- Bases de datos distintas a SQL.
¿Qué es una inyección de comandos?
Se da cuando los datos escapan de su contexto y pasan a ser instrucciones
válidas en la sintaxis del lenguaje interpretado donde son ejecutados.
Esta clase está basada en el capítulo 9 "Attacking Data Stores" del libro
"The Web Application Hacker's Handbook 2".
Inyección SQL
Se genera cuando los datos escapan de su contexto y son tratados como elementos
del lenguaje de consulta SQL.
- SQL es un lenguaje
estandarizado.
- Cada motor de base de datos (MS-SQL, MySQL, Oracle, etc)
implementa SQL y lo extiende en forma diferente.
Impactos de una inyección SQL
- Esquivar controles de acceso impuestos por la aplicación.
- Acceder a información contenida en la base de datos.
- Si se dan las condiciones, llegar a ejecutar comandos en el sistema operativo
subyacente.
Inyección SQL en contexto
- Declaraciones SELECT.
- Declaraciones INSERT.
- Declaraciones UPDATE.
- Declaraciones DELETE.
Demo de inyección SQL en contexto
Puntos dónde ejercer inyección SQL
- Parámetros manejados como string.
- Parámetros manejados como enteros.
- Estructura de la consulta.
Obstáculos en una inyección SQL
- Filtrado de caracteres.
- Filtrado de elementos de la sintaxis.
- Inexistencia de feedback en la página.
- Lenguajes de programación y drivers para la DB.
Tipos de explotación
- Usando el operador UNION.
- Usando un canal Out-of-Band.
- Usando inferencia.
Inyección SQL basada en UNION
Hace uso del operador UNION para concatenar dos consultas, la original más la
inyectada, y que esta información sea retornada a través de la página susceptible a
inyección SQL.
Ambas consultas deben tener el mismo número de columnas como resultado.
Demo de inyección SQL usando UNION
Inyección SQL Out-of-Band
Muchas veces no se tiene feedback de la página sobre si nuestra inyección SQL
está siendo ejecutada. Las técnicas Out-of-Band apuntan a que la inyección envíe
información hacia el exterior.
La forma dependerá de cada motor de base de datos.
Inyección SQL usando inferencia
Se basa en inyectar una condición que gatilla un comportamiento detectable,
y si este ocurre, inferir cierto trozo de información.
- Respuestas condicionadas.
- Induciendo errores condicionales.
- Demoras de tiempo.
Respuestas condicionadas
La idea es encontrar una página que frente a una condición lógicamente verdadera,
responda de forma diferente de una lógicamente falsa. Teniendo estos dos casos, se
pueden evaluar condiciones a nivel de base de datos, y saber si su resultado fue verdadero
o falso dependiendo de la respuesta de la página.
admin' AND 1=1-- (verdadera)
admin' AND 1=0-- (falsa)
Demo de inyección SQL usando respuestas condicionadas
Induciendo errores condicionales.
Cuando no existe feedback si se está realizando una inyección SQL, es posible
gatillar errores en la base de datos que puedan ser reconocidos.
Este tipo de ataque normalmente busca generar errores aritméticos.
Demoras de tiempo
Esta técnica busca llamar funciones relacionadas con el tiempo, o que su ejecución
involucre una gran cantidad de tiempo. Esto permite establecer una condición a través
de la inyección SQL, y que si es verdadera, existirá una demora en la entrega
de la página.
Esta técnica depende del motor de base de datos.
Previniendo inyección SQL
- Usar consultas parametrizadas.
- Usar una validación fuerte donde los placeholders no pueden ser
insertos.
- Usar procedimientos almacenados no es recomendado.
Bases de datos distintas a SQL
Bases de datos NoSQL
- Un gran ecosistema de bases de datos NoSQL.
- Distintos lenguajes de consulta: JSON, Javascript, key/value, etc.
- El tipo de inyección será de acuerdo al lenguaje de consulta.
- Lo recomendado es usar las APIs disponibles en cada motor de DB.
Inyección XPath
- XPath es el lenguaje de consulta de documentos XML.
- Se pueden dar inyecciones simples y ciegas.
- Se puede obtener todo el documento en el peor caso.
- Hay soluciones en algunos lenguajes como
.NET, si no, listas blancas.
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License.