Upload
eduardo-diaz-olivares
View
250
Download
5
Embed Size (px)
Citation preview
Introducción a ataques de tipo
inyección: Inyección SQL
ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS
1
Jorge Peris Cortés
Asignatura: RedesIngeniería
Informática
Introducción¿Por qué Inyección SQL?Definición.Objetivos.Concepto clave.Evaluación de riesgos.Ejemplos sencillos.
Prueba en vivoBreve descripción de herramientas
utilizadas.Demostración.
Inyección SQL
ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS
2
¿Por qué Inyección SQL?
ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS
3
Definición: técnica de infiltración de código que permite realizar consultas a una base de datos.
Se produce cuando un atacante es capaz de insertar una o varias sentencias SQL dentro de una‘consulta’manipulando los datos de entrada de una aplicación.
En resumen: introducir código SQL desde el cliente a través de datos de entrada.
¿Qué es la Inyección SQL?
ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS
4
Maximizar la cantidad de información a extraer.
Minimizar posibles rastros.
Objetivos
ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS
5
Funcionamiento de operaciones lógicas AND y OR:
Azul: código inyectado.Verde: resultado que obtendremos.
Conceptos clave (1/3)
ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS
6
AND 0 1
0 0 0
1 0 1
OR 0 1
0 0 1
1 1 1
Ejemplo, consultar producto:• SELECT * FROM tabla WHERE id=´$id´
Posible inyección:• Sustitución: $id <- ´OR ´1´=´1• SELECT * FROM tabla WHERE id=´´OR
´1´=´1´
Tratamos de obtener una consulta que siempre devuelva TRUE.
Conceptos clave (2/3)
ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS
7
Ejemplo, consultar usuario y password:SELECT * FROM tabla WHERE
Usr = $usr AND pass = $pass Posible inyección:
Sustitución: $usr <- ´OR 1=1-- *
SELECT * FROM tabla WHEREusr = ´OR 1=1-- AND pass = $pass
La consulta después del doble guión, queda comentada.
Conceptos clave (3/3)
ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS
8
Un ataque con éxito podría permitir:Ejecutar acciones sobre una BD
simulando ser root.○ Consecuencias inmediatas:
UPDATE/INSERT/SELECT/DELETE... serán bien recibidos.
Ejecutar comandos de llamada al SO.○ En este caso, el nivel de acciones
dependerá de los privilegios vigentes de la máquina atacada.
Evaluación de riesgos (1/4)
ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS
9
Explotabilidad -> FÁCILBasta con enviar texto plano que explote la
sintaxis del intérprete objetivo. Predominio -> CONOCIDO
Encontramos fácilmente cadenas típicas de ataque para inyección SQL.
Muy documentado, incluyendo webs específicas que son vulnerables y que contienen tutoriales sobre cómo llevar a cabo algunos ataques.
Evaluación de riesgos (2/4)
ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS
10EXPLOTABILIDAD – PREDOMINIO – DETECCIÓN – IMPACTO
Detección -> MEDIONecesario acceder al código contenedor de la lógica
para encontrar vulnerabilidades.○ Desde el lado del cliente, haciendo pruebas, es más
complicado.No siempre es sencillo filtrar todas las entradas
posibles. Impacto -> ALTO
Un simple ataque puede causar pérdida o corrupción (total o parcial) de los datos.
Podría verse afectado el sistema que haya por debajo de la BD (apagado de la máquina, denegación de acceso, eludir autentificaciones...).
Evaluación de riesgos (3/4)
ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS
11EXPLOTABILIDAD – PREDOMINIO – DETECCIÓN – IMPACTO
Conclusiones:Con pocos recursos se podría llegar a
causar graves daños.Documentación muy detallada y
disponible a cualquier usuario.○ Arma de doble filo:
Fácil prevención de ataques.Atacantes con documentación para rebuscar
nuevos ataques.
Sencilla realización de ataques.
Evaluación de riesgos (4/4)
ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS
12
Haremos dos pruebas sencillas de inyección de código SQL:1. Sobre una aplicación web
programada en PHP y MySQL, llamada “Damn Vulnerable Web Application”(DVWA).
2. Sobre una pequeña (y absurda) aplicación web que hemos creado para la ocasión, también en PHP y MySQL.
ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS
13
Ejemplos sencillos
¿Qué es DVWA? ¿Qué partes usaremos de esta
aplicación web? Ataques a los 3 niveles de
seguridad implementados:LOW.MEDIUM.HIGH.
ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS
14
Ejemplo 1: DVWA
¿Qué es DVWA?Es una aplicación web basada en PHP
y se apoya en una base de datos mediante MySQL.
Acceso: http://localhost/dvwa/login.php○ Usr: admin○ Pass: password
ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS
15
DVWA (1/6)
¿Qué partes usaremos de esta aplicación web?Nos centraremos únicamente en “SQL
Injection”.Configuraciones útiles:
○ La BD atacada.○ Nivel de seguridad del código
empleado.○ Hacer visible el código PHP que se está
ejecutando.
ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS
16
DVWA (2/6)
Ataque al nivel LOW:La página recibe una entrada por
formulario, User ID, cuya consulta es:○ SELECT first_name, last_name FROM users
WHERE user_id = ’$id’No se filtra la entrada -> fallo grave.Entrada de datos por formulario:
○ … user_id = ’' OR '1'='1’Demo...
ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS
17
DVWA (3/6)
Ataque al nivel MEDIUM:Misma entrada y consulta:
○ SELECT first_name, last_name FROM users WHERE user_id = $id
Entrada filtrada con:○ mysql_real_escape_string($id);○ En ocasiones no es suficiente.
Entrada de datos por formulario :○ user_id = 1 OR 1=1
Demo...
ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS
18
DVWA (4/6)
Ataque al nivel HIGH:Misma entrada y consulta:
○ SELECT first_name, last_name FROM users WHERE user_id = ’$id’
Entrada filtrada con:1. stripslashes($id)2. mysql_real_escape_string($id)3. Comprobar si $id es un número.
No es posible atacar.
ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS
19
DVWA (5/6)
Conclusiones:1. No siempre basta con filtrar.2. Una buena defensa:
Filtrar entradas. Limitar número de caracteres. Conocer el problema. Mostrar lo imprescindible.
3. Atacar una BD requiere: Paciencia. Probar diferentes alternativas. Conocer lenguaje de manipulación de la BD.
ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS
20
DVWA (6/6)
Módulos que forman el sistema.Breve explicación del funcionamiento.
Ataque típico y demostración.
ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS
21
Ejemplo 2: Mini-aplicación
ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS
22
Mini-aplicación (1/2)
form_registro.html
index.html
form_login.html
login.phpregistro.p
hp
Base Datos
respuestapetición respuestapetición
link link
consulta
HTML
PHP
MySQL
Ataque desde ´form_login.html´ Dos ataques posibles:
1. Usuario y password: ´OR ´1´=´12. Usuario: ´OR 1=1--
Obtenemos todos los usuarios de la BD.
Demo...
ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS
23
Mini-aplicación (2/2)
¿PREGUNTAS?
ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS
24
FIN