Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de...

Post on 02-Feb-2016

244 views 5 download

Transcript of Introducción ¿Por qué Inyección SQL? Definición. Objetivos. Concepto clave. Evaluación de...

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