14
INYECCIÓN SQL Nombre del Profesor: Ing. José Fernando Castro Domínguez. INTEGRANTES: María Isabel Martínez Millán Elizabeth Gaytán Sánchez Margarito Demeza Barrera. Iguala, gro., Septiembre 2010

Inyeccion sql

Embed Size (px)

Citation preview

Page 1: Inyeccion sql

INYECCIÓN SQLNombre del Profesor: Ing. José Fernando Castro

Domínguez.INTEGRANTES:

María Isabel Martínez MillánElizabeth Gaytán SánchezMargarito Demeza Barrera.

Iguala, gro., Septiembre 2010

Page 2: Inyeccion sql

Podemos definir inyección SQL como la vulnerabilidad en la validación de entradas a la base de datos en una aplicación.

La aplicación puede ser cualquier tipo de software que precise del uso de base de datos, o una aplicación web que interactúa con base de datos para funcionar, ya bien sea en un sistema de búsqueda, extracción, inserción de información o creación de lugares restringidos mediante la creación de usuarios con contraseñas estableciendo diferentes niveles de permisos.

Page 3: Inyeccion sql

Una inyección SQL sucede cuando se inserta o "inyecta" un código SQL "invasor" dentro de otro código SQL para alterar su funcionamiento normal, y hacer que se ejecute maliciosamente el código "invasor" en la base de datos.

La mayor de las veces estos errores en las SQL son por la ignorancia del lenguaje pero este código puede ser reparado por programadores o personas que tengan el conocimiento suficiente para poder reparar el error.

Page 4: Inyeccion sql

Supongamos que tenemos una aplicación Web en la que el acceso a ciertas secciones está restringido. Para restringir ese acceso creamos una tabla de usuarios y contraseñas y sólo los usuarios que se validen contra esa tabla podrán acceder a esos contenidos.

use web-- Nuestra base de datos se llama webgo Creamos una tabla para almacenar los pares usuario/contraseña

create table usuarios Usuario varchar (50) not null primary key, Password varchar (50))go Introducimos un par de datos de prueba insert into usuarios

(Usuario, Password) values ('Admin', '1234')insert into usuarios (Usuario, Password) values ('Usuario', 'abcd')

Page 5: Inyeccion sql

Y en la segunda pagina creamos dinámicamente una sentencia SQL que enviamos a la base de datos para la validación.

User: Password:

Si el usuario escribe Admin y 1234 la sentencia creada será: “SELECT Count(*) FROM Usuarios WHERE Usuario=’Admin’

AND Password=’1234’” Y como esta sentencia nos devuelve un registro,

dejaremos que el usuario entre en la Web.

Admin

****

Iniciar sesión

Page 6: Inyeccion sql

Si el usuario escribe por ejemplo ‘Admin’ y de contraseña cualquier otra cosa, la sentencia no nos devolverá registros y no permitiremos entrar a esa persona.

Pero ¿qué ocurre si el usuarioescribe ‘ or ‘1′=’1 como usuario y lo mismo de contraseña?

En este caso la variable Consulta contendrála cadena:

"SELECT Count(*) FROM Usuarios WHERE Usuario = '' or '1'='1' AND password = '' or '1'='1'“

Y obviamente esta sentencia nos devuelve registros con lo que el usuario entrará en nuestra Web sin tener permiso.

Page 7: Inyeccion sql

Lo peor será que el usuario utilice estos trucos de inyección de SQL para ejecutar código arbitrario en nuestro servidor. Sentencias DDL, cambiar permisos, utilizar procedimientos almacenados y un largo etcétera.

Page 8: Inyeccion sql

COMO CORREGIR EL PROBLEMA:1.Podemos filtrar las entradas de los usuarios reemplazando la

aparición de ‘ por ‘’(dos comillas simples) e incluso evitando que los usuarios puedan pasar caracteres como \ / “ ‘ o cualquier otro que se nos ocurra que puede causar problemas.

2.Es limitar al máximo los permisos del usuario que ejecuta estas sentencias para evitar posibles problemas. Por ejemplo utilizando un usuario distinto para las sentencias SELECT, DELETE, UPDATE y asegurándonos que cada ejecución de una sentencia ejecute una sentencia del tipo permitido.

Page 9: Inyeccion sql

3.- Una solución definitiva sería trabajar con procedimientos almacenados.

El modo en el que se pasan los parámetros a los procedimientos almacenados evita que la inyección SQL pueda ser usada.

4.- También deberíamos validar los datos que introduce el usuario teniendo en cuenta por ejemplo la longitud de los campos y el tipo de datos aceptados.

Page 10: Inyeccion sql

La forma más común de detectar ataques de inyección SQL es mediante la búsqueda de firmas SQL en la secuencia HTTP entrante. Por ejemplo, en busca de comandos SQL, tales como UNION, SELECT o XP. El problema con este enfoque es la alta tasa de falsos positivos.

La capacidad de discernir valores de los parámetros de la petición HTTP y toda la capacidad de manejar varios escenarios de codificación son una necesidad en este caso.

PREVENCIÓN

Page 11: Inyeccion sql

1.- La seguridad de los datos es uno de los pilares de la sociedad informatizada en la que vivimos, el no proteger esta información seria de gran riesgo para la empresa y para el cliente.

2.-La inyección SQL es una herramienta que nos ayuda para la seguridad de la información se refiere a la debilidad en un sistema permitiendo un ataque para violar la confidencialidad, integridad, disponibilidad, control de acceso y la consistencia del sistema así como de sus datos y aplicaciones.

Page 12: Inyeccion sql

La inyección SQL puede obtener datos escondidos, eliminar o sobrescribir datos de la base de datos hasta lograr ejecutar comandos peligrosos en la máquina donde está la base de datos, el cual el atacante puede obtener y hasta modificar los datos, e incluso el atacante puede llegar a obtener y manipular archivos, con la consecuencia de poder manejar los datos y el sistema a su antojo y con total libertad.

Page 13: Inyeccion sql
Page 14: Inyeccion sql