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".

Bases de datos SQL

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.