24
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: Redes Ingeniería Informática

Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de riesgos. Ejemplos sencillos. Prueba en vivo Breve descripción

Embed Size (px)

Citation preview

Page 1: Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de riesgos. Ejemplos sencillos.  Prueba en vivo Breve descripción

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

Page 2: Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de riesgos. Ejemplos sencillos.  Prueba en vivo Breve descripción

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

Page 3: Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de riesgos. Ejemplos sencillos.  Prueba en vivo Breve descripción

¿Por qué Inyección SQL?

ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS

3

Page 4: Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de riesgos. Ejemplos sencillos.  Prueba en vivo Breve descripción

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

Page 5: Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de riesgos. Ejemplos sencillos.  Prueba en vivo Breve descripción

Maximizar la cantidad de información a extraer.

Minimizar posibles rastros.

Objetivos

ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS

5

Page 6: Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de riesgos. Ejemplos sencillos.  Prueba en vivo Breve descripción

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

Page 7: Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de riesgos. Ejemplos sencillos.  Prueba en vivo Breve descripción

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

Page 8: Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de riesgos. Ejemplos sencillos.  Prueba en vivo Breve descripción

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

Page 9: Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de riesgos. Ejemplos sencillos.  Prueba en vivo Breve descripción

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

Page 10: Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de riesgos. Ejemplos sencillos.  Prueba en vivo Breve descripción

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

Page 11: Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de riesgos. Ejemplos sencillos.  Prueba en vivo Breve descripción

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

Page 12: Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de riesgos. Ejemplos sencillos.  Prueba en vivo Breve descripción

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

Page 13: Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de riesgos. Ejemplos sencillos.  Prueba en vivo Breve descripción

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

Page 14: Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de riesgos. Ejemplos sencillos.  Prueba en vivo Breve descripción

¿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

Page 15: Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de riesgos. Ejemplos sencillos.  Prueba en vivo Breve descripción

¿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)

Page 16: Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de riesgos. Ejemplos sencillos.  Prueba en vivo Breve descripción

¿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)

Page 17: Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de riesgos. Ejemplos sencillos.  Prueba en vivo Breve descripción

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)

Page 18: Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de riesgos. Ejemplos sencillos.  Prueba en vivo Breve descripción

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)

Page 19: Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de riesgos. Ejemplos sencillos.  Prueba en vivo Breve descripción

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)

Page 20: Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de riesgos. Ejemplos sencillos.  Prueba en vivo Breve descripción

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)

Page 21: Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de riesgos. Ejemplos sencillos.  Prueba en vivo Breve descripción

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

Page 22: Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de riesgos. Ejemplos sencillos.  Prueba en vivo Breve descripció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

Page 23: Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de riesgos. Ejemplos sencillos.  Prueba en vivo Breve descripción

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)

Page 24: Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de riesgos. Ejemplos sencillos.  Prueba en vivo Breve descripción

¿PREGUNTAS?

ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS

24

FIN