You are on page 1of 47

SQL INJECTION

Mecanismos de ataque y defensa

Grupo 1:
- Blas Pagola
- Cruz Ventura
- Esteves Rosales
- Quiroz Ñato
- Rojas Barraza
- Villavicencio Antúnez
¿Qué es SQL INJECTION?
● Es un tipo de ataque que se aprovecha de una vulnerabilidad para cambiar el
efecto pretendido de una consulta SQL mediante la inyección o inserción de
palabras clave de SQL u operadores en la consulta.
Antecedentes
IBM en los 70

ANSI en los 80

ISO (86,89,92)

SQL(SEQUEL)

Jeff Forristral
Antecedentes
Porqué atacar?
Marco Teórico
Seguridad de la Información
Ataque Informático
SQL Injection
Tipos de SQL Injection
CADENAS MAL FILTRADAS
INCORRECTA VERIFICACIÓN DE TIPO
EVASIÓN DE FIRMA
BLIND SQL EJECTION
Marco Teórico
Mecanismos de Inyección
Inyección a través de entras de usuario:

En este caso, los atacantes inyectan comandos SQL a través de entradas de


usuario.
Mecanismos de Inyección
Inyección a través de cookies:

Si una aplicación Web utiliza contenidos de la cookie para construir consultas


SQL, un atacante podría enviar fácilmente un ataque.
Mecanismos de Inyección
Inyección a través de variables de servidor:

Si estas variables se registran en una base de datos sin un control adecuado,


esto podría crear una vulnerabilidad de inyección SQL. Cuando la consulta
para registrar la variable de servidor se emite a la base de datos, entonces se
desencadena el ataque.
Mecanismos de Inyección
Inyección de segundo orden:

Los atacantes implantan entradas maliciosas en un sistema o base de datos


para activar indirectamente un ataque por inyección SQL cuando esa entrada
se utiliza en un momento posterior.
Intención de ataque
La identificación de parámetros inyectables

Realización de la base de datos de huellas digitales

La determinación del esquema de base de datos

Extracción de datos

La adición o modificación de los datos

Evadir la detección

Anulación de autenticación
Tipos de Ataques de Inyección SQL
Tautología:

Objetivo: Evitar la autenticación, la identificación de los parámetros de


inyectables, la extracción de datos.

Descripción: El ataque consiste en inyectar código en una o más sentencias


condicionales para que siempre dan como resultado verdadero.
SELECT accounts FROM users WHERE
'OR ‘1'='1'--
login=’ ‘OR ‘1’=’1’--‘ AND pass=’’ AND pin=
Tipos de Ataques de Inyección SQL
Consultas incorrectas Lógicamente o ilegales:

Objetivo:La identificación de parámetros inyectables, toma de la huella digital


de la base de datos, la extracción de datos.

Descripción:Consiste en aprovechar una vulnerabilidad para que la página


Microsoft OLE DB Provider for SQL Server (0x80040E07) Error
muestre un error
converting predeterminado
nvarchar devuelto por
value ’CreditCards’ to alos servidores,
column of dataentype
aplicaciones
int.
web esto es a menudo muy descriptivo.
convert(int,(select top 1 name SELECT accounts FROM users WHERE login=’’
from sysobjects where xtype=’u’)) AND pass=’’ AND pin= convert (int,(select top
1 name from sysobjects where xtype=’u’))
Tipos de Ataques de Inyección SQL
Consulta de Unión:

Objetivo: Para evitar la autenticación, la extracción de datos.

Descripción: Con esta técnica, un atacante puede engañar a la aplicación en la


devolución de datos de una tabla diferente a la que estaba destinada por el
desarrollador.
’UNION SELECT cardNo from
CreditCards where acctNo=10032--
SELECT accounts FROM users WHERE login=’ ’UNION
SELECT cardNo from CreditCards where
acctNo=10032 --‘ AND pass=’’ AND pin=
Tipos de Ataques de Inyección SQL
Consulta Piggy-Backed:

Objetivo: La extracción de los datos, añadir o modificar datos, la realización de


denegación de servicio, la ejecución de comandos remotos.

Descripción: El atacante intenta inyectar consultas adicionales en la consulta


original. Se distinguen de otros porque, en este caso, los atacantes no están
tratando de modificar la consulta prevista originalmente; en cambio, están
tratando de incluir las nuevas y distintas consultas.
SELECT accounts FROM users WHERE login=’doe’
‘; drop table users --
AND pass=’ ’; drop table users -- ’ AND pin=123
Tipos de Ataques de Inyección SQL
Procedimientos Almacenados:

Objetivos: Escalamiento de privilegios, denegación de servicio, ejecución de


comandos remotos.

Descripción: Los ataques por inyección SQL de este tipo tratan de ejecutar
procedimientos almacenados presentes en la base de datos.

SELECT accounts FROM users WHERE login=’doe’


’ ; SHUTDOWN; --
AND pass=’ ’ ; SHUTDOWN; -- ’ AND pin=
Tipos de Ataques de Inyección SQL
Inferencia:

Objetivos: Identificación de parámetros de inyectables, extracción de datos,


determinación de esquema de base de datos.

Descripción: En este ataque, la consulta se modifica para reestructurarse en la


forma de una acción que se ejecuta sobre la base de la respuesta a una
pregunta de verdadero o falso

Inyección ciega

Ataques de temporización
Tipos de Ataques de Inyección SQL
Inyección ciega:
SELECT accounts FROM users WHERE
legalUser’ and 1=0 --
login=’legalUser’ and 1=0 -- ’ AND pass=’’ AND pin=0

SELECT accounts FROM users WHERE


legalUser’ and 1=1 --
login=’legalUser’ and 1=1 -- ’ AND pass=’’ AND pin=0

Ataque de Temporización:
legalUser’ and ASCII(SUBSTRING((select top 1
name from sysobjects),1,1)) > X WAITFOR 5 --
SELECT accounts FROM users WHERE login=’legalUser’ and
ASCII(SUBSTRING((select top 1 name from sysobjects),1,1)) >
X WAITFOR 5 -- ’ AND pass=’’ AND pin=0
Tipos de Ataques de Inyección SQL
Codificaciones alternas:

Objetivos: Evadir la detección.

Descripción: En este ataque, el texto inyectado se modifica a fin de evitar la


detección por prácticas de codificación defensivas y también muchas
técnicas de prevención automatizados.
legalUser’; exec(0x73687574646f776e) --

SELECT accounts FROM users WHERE


login=’legalUser’; exec(char(0x73687574646f776e)) -
-‘ AND pass=’’ AND pin=
Causas que permiten la Inyección SQL
Consecuencias que pueden producir la Inyección
SQL
Blind SQL Injection

➢ “Inyección SQL de cambio de comportamiento cero” (ISQL0):


Una cadena que se inyecta en una consulta SQL y no realiza ningún
cambio en los resultados.

➢ “Inyección SQL de cambio de comportamiento positivo” (ISQL+):


Una cadena que sí que provoca cambios.
Ejemplo - Blind SQL Injection
❏ Supongamos una página de una aplicación web del tipo.
http://www.miweb.com/noticia.php?id=1

❏ Suponemos de que 1 es el valor del parámetro id y dicho parámetro va a ser utilizado en


una consulta a la base de datos de la siguiente manera.
Select campos From tablas Where condiciones and id=1

❏ Una inyección ISQL0 sería algo como lo siguiente:


http://www.miweb.com/noticia.php?id=1+1000-1000
http://www.miweb.com/noticia.php?id=1 and 1=1
http://www.miweb.com/noticia.php?id=1 or 1=2

❏ Una ISQL+ sería algo como lo siguiente:


http://www.miweb.com/noticia.php?id=1 and 1=2
http://www.miweb.com/noticia.php?id=-1 or 1=1
http://www.miweb.com/noticia.php?id=1+1
Métodos de Automatización
Herramientas para Inyección SQL
1. Absinthe: Es una herramienta
basada en interfaz gráfica que
automatiza el proceso de descargar el
esquema y los contenidos de una base
de datos que es vulnerable a Blind SQL
Injection.
Características:
- Totalmente automático
- Inyecta MSsql, Postgres Sql y Oracle.
- Puedes editar el query.
- Soporta proxy.
- Interfaz GUI
Herramientas para Inyección SQL
2. SQLInjector: Esta herramienta utiliza como forma de automatización la búsqueda de
palabras clave en los resultados positivos. Es decir, se busca encontrar una palabra que
aparezca en los resultados positivos y que no aparezca en los resultados negativos.Para
ejecutarse se hace con un comando como el siguiente:

Donde:
• t: Es el servidor
• p: Es el puerto • ec: Código devuelto por el servidor cuando se produce
• f: La aplicación vulnerable y el parámetro. En un fichero de texto. un error
• a: La acción a realizar • k: Valor de referencia correcto en el parámetro
• o: Fichero de salida vulnerable
• qf: La consulta a ejecutar a ciegas. En un fichero de texto. • gt: Palabra clave en resultado positivo
• gc: Código devuelto por el servidor cuando es un valor correcto • s: Tipo de base de datos (MySQL, Oracle, Microsoft
SQL Server, Informix, IBM DB2, Sybase y Access).
Herramientas para Inyección SQL
3. SQLbftools: Colección de herramientas para obtener información de
MySQL disponible utilizando un ataque de blind SQL Injection. Está
compuesta de tres aplicaciones:

❏ mysqlbf
❏ mysqlget
❏ mysqlst
Herramientas para Inyección SQL
❏ mysqlbf
Es la herramienta principal para la automatización de la técnica de BlindSQL. Para poder
ejecutarla se debe contar con un servidor vulnerable en el que el parámetro esté al final de la
URL y la expresión no sea compleja.
Su funcionamiento se realiza mediante el siguiente comando:

Dónde:
§ host: es la URL con el servidor, el programa y el parámetro vulnerable. Comando
es un comando a ejecutar de MySQL.
§ palabraclave: es el valor que solo se encuentra en la página de resultado positivo.
Herramientas para Inyección SQL
Extracción user()
Herramientas para Inyección SQL
En la siguiente imagen se ve cómo extraer la versión de la base de datos
Extracción version()
Herramientas para Inyección SQL
❏ mysqlget
Es la herramienta pensada para
descargar ficheros del servidor.
Aprovechando las funciones a
ciegas y los comandos del motor de
base de datos, se puede ir leyendo
letra a letra cualquier fichero del
servidor.
En la siguiente imagen se ve cómo
se puede descargar el fichero
/etc/passwd a partir de una
❏ mysqlst
vulnerabilidad Blind SQL Injection
Esta herramienta se utiliza para volcar los datos de una tabla.
usando mysqlget.
Primero se consulta el diccionario de datos para extraer el
número de campos, los nombres, los tipos de datos de cada
campo y por último, el volcado de las filas.
Herramientas para Inyección SQL
4. Bfsql: La herramienta sigue utilizando el sistema de palabra clave en valores positivos. La
herramienta no pide la intervención del usuario para averiguar cuál es la palabra clave, sino que
realiza peticiones con inyecciones de cambio de comportamiento cero e inyecciones de cambio
de comportamiento positivo.

5. SQL Map: Es una herramienta desarrollada en python para realizar inyección de código sql
automáticamente. Su objetivo es detectar y aprovechar las vulnerabilidades de inyección SQL en
aplicaciones web..
Herramientas para Inyección SQL
6. SQL Power Injection Injector:
utiliza técnicas de SQL Injection
tradicionales basadas en mensajes de
error y técnicas de Blind SQL Injection
usando dos sistemas. Comparación de
resultados completos, equivalente a
realizar un HASH MD5 de la página
de resultados o bien, para los motores
de Microsoft SQL Server, y solo para
esos motores, también se puede
realizar utilizando el sistema basado en
tiempos con WAIT FOR (o time delay)
descrito por Chrish Anley en “(more)
Advanced SQL Injection”.
Consecuencias que tienen un SQLIA

Confidencialidad: Dado que las bases de datos SQL generalmente almacenan


información sensible, la pérdida de la confiabilidad es un problema frecuente con las
vulnerabilidades de inyección SQL.

Autenticación: Si se utilizan consultas SQL po-bres para chequear nombres de


usuarios u contra-señas, puede ser posible conectarse a un sistema como otro usuario
sin conocimiento previo de la contraseña.
Consecuencias que tienen un SQLIA

Autorización: Si la información de autorización es almacenada en una base de datos


SQL, puede ser posible cambiar esta información mediante la explotación exitosa de una
vulnerabilidad por inyec-ción SQL.

Integridad: Así como puede ser posible leer información sensible, también es posible
realizar cambios o incluso borrar esta información mediante un ataque por inyección
SQL.
Prevención de Ataques SQLIAs
Prevención de Ataques SQLIAs
Prácticas de Codificación Defensiva

1. Chequeo de Tipos de entrada: Verificar las vulnerabilidades según tipo de entrada.

2. Codificación de entrada: codificar una cadena de tal manera que todos los meta-caracteres son
especialmente codificados e interpretados por la base de datos como caracteres normales

3. Patrones de validación positiva: Los desarrolladores deberían ser capaces de especificar todas las
formas de entrada legal positiva, la validación positiva es la forma más segura para comprobar entradas.

4. Identificación de todas las fuentes de entrada: Todas las


fuentes de entrada deben ser comprobados.
Prevención de Ataques SQLIAs
Pseudo remedios

Primero: Palabras claves y operadores

WHERE FROM
SELECT
O’Mar

Segundo: Prepared Statement


Prevención de Ataques SQLIAs
Técnicas de prevención y detección

a. Pruebas de Caja Negra: La técnica utiliza un buscador web para identificar todos los puntos en
una aplicación web que puede ser utilizado para inyectar SQLIAs. El siguiente paso es dirigir el
ataque hacia estos puntos sobre la base de una lista especificada de patrones y técnicas de ataque

b. Chequeo de Código Estático: JDBC - Checker es una técnica para comprobar estáticamente la
corrección de tipo consultas SQL generado dinámicamente, puede prevenir ataques que se
aprovechan de los desajustes de tipo de entrada en una cadena de consulta generado
dinámicamente

c. Análisis Estático y Dinámico Combinado: Técnica basada en modelo que combina análisis
estático y monitoreo en tiempo de ejecución. En su fase estática, construye modelos de los
diferentes tipos de consultas de una aplicación en cada punto de acceso a la base de datos. En su
fase dinámica intercepta todas las consultas antes de que sean enviados a la base de datos y
comprueba que cada consulta pertenezca a un modelo de definido en la fase estática.
Prevención de Ataques SQLIAs
Técnicas de prevención y detección

d. Enfoque Basado en la Contaminación: WebSSARI detecta errores relacionadas a la


validaciones de entrada, El análisis detecta los puntos en las cuales las precondiciones no se
han cumplido y puede sugerir filtros y funciones de desinfección que pueden añadirse
automáticamente a la aplicación para satisfacer las precondiciones

e .Nuevos Paradigmas de Desarrollo de Consulta: Mediante el uso de encapsulación de


consultas de la base de datos proporcionan una manera segura y confiable para el acceso
cambiando el paradigma del proceso de construcción de una consulta a uno sistemática que
utiliza un API para la comprobación eficiente.

f. Sistemas de Detección de Intrusos: Técnica basada en machine learning que construye


modelos de las consultas típicas y luego monitorea la aplicación en tiempo de ejecución para
identificar las consultas que no coinciden con el modelo.
Prevención de Ataques SQLIAs
Técnicas de prevención y detección

g. Filtros de Proxy: Solución mediante el cual el desarrollador genera políticas que establecen
la admisión o prohibición de flujos de datos que navegan través de la aplicación web.

h. Asignación Aleatoria de Conjunto de Instrucciones: SQLrand es un enfoque basado en


la aleatorización de conjunto de instrucciones, proporciona un marco que permite a los
desarrolladores crear consultas utilizando instrucciones aleatorizadas en lugar de palabras
clave de SQL. Luego Un filtro proxy intercepta las consultas a la base de datos y cambia
aleatoriamente las palabras clave.
Prevención de Ataques SQLIAs
Técnicas de prevención y detección

● Detiene completamente
ataques de este tipo

x No tiene efecto sobre es tipo

o Puede ser asumido pero si


ninguna garantía.

- Puede ser dirigido al tipo de


ataque de forma parcial
Prevención de Ataques SQLIAs
Técnicas de prevención y detección
Prevención de Ataques SQLIAs
Técnicas de prevención y detección
Caso práctico
Conclusiones y recomendaciones
SQL INJECTION
Mecanismos de ataque y defensa

Grupo 1:
- Blas Pagola
- Cruz Ventura
- Esteves Rosales
- Quiroz Ñato
- Rojas Barraza
- Villavicencio Antúnez