La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Introducción a ataques de tipo inyección: Inyección SQL

Presentaciones similares


Presentación del tema: "Introducción a ataques de tipo inyección: Inyección SQL"— Transcripción de la presentación:

1 Introducción a ataques de tipo inyección: Inyección SQL
Jorge Peris Cortés Asignatura: Redes Ingeniería Informática ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS

2 Inyección SQL Introducción Prueba en vivo ¿Por qué Inyección SQL?
Definición. Objetivos. Concepto clave. Evaluación de riesgos. Ejemplos sencillos. Prueba en vivo Breve descripción de herramientas utilizadas. Demostración. ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS

3 ¿Por qué Inyección SQL? - OWASP: Open Web Application Security Project
- Comunidad abierta que busca mejorar la seguridad en las aplicaciones de software. ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS

4 ¿Qué es la Inyección SQL?
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. ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS

5 Objetivos Maximizar la cantidad de información a extraer.
Minimizar posibles rastros. Posibles rastros (a este nivel, esto es secundario): Dejar usuarios que hayamos utilizado para pasos intermedios. Dejar rastro de comandos de llamada al sistema. - Suelen quedar registrados en un log o un historial de últimos comandos usados. ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS

6 Conceptos clave (1/3) Funcionamiento de operaciones lógicas AND y OR:
Azul: código inyectado. Verde: resultado que obtendremos. AND 1 OR 1 Explicación: Para las consultas con varios AND, habría que poner código de inyección en cada campo. Solución, inyectar en uno y comentar. Para consultas únicas o con OR, sólo será necesario inyectar en 1 campo, ya que ‘cualquier_cosa’ OR 1 siempre es verdadero. ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS

7 Conceptos clave (2/3) 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. ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS

8 Conceptos clave (3/3) SELECT * FROM tabla WHERE Posible inyección:
Ejemplo, consultar usuario y password: SELECT * FROM tabla WHERE Usr = $usr AND pass = $pass Posible inyección: Sustitución: $usr <- ´OR 1=1-- * usr = ´OR 1=1-- AND pass = $pass La consulta después del doble guión, queda comentada. *Mucho cuidado con las comillas: En blanco las que corresponden con las que se colocan por defecto. En rojo lo que escribe el atacante mediante formulario de entrada. En los comentarios es “-- ”, es decir: guión, guión, espacio_blanco (en MySQL, en ORACLE funciona igualmente) ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS

9 Evaluación de riesgos (1/4)
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. Comandos del SO: - Si inyectamos código de tipo comandos de la consola en una aplicación vulnerable a inyección, pero dicha consola se ejecuta en modo no privilegiado, todas aquellas acciones privilegiadas que pretendamos ejecutar, no se llevarán a cabo. ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS

10 Evaluación de riesgos (2/4)
Explotabilidad -> FÁCIL Basta 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. EXPLOTABILIDAD – PREDOMINIO – DETECCIÓN – IMPACTO ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS

11 Evaluación de riesgos (3/4)
Detección -> MEDIO Necesario 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...). EXPLOTABILIDAD – PREDOMINIO – DETECCIÓN – IMPACTO ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS

12 Evaluación de riesgos (4/4)
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. ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS

13 Ejemplos sencillos Haremos dos pruebas sencillas de inyección de código SQL: Sobre una aplicación web programada en PHP y MySQL, llamada “Damn Vulnerable Web Application”(DVWA). 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

14 Ejemplo 1: DVWA ¿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

15 DVWA (1/6) ¿Qué es DVWA? Es una aplicación web basada en PHP y se apoya en una base de datos mediante MySQL. Acceso: Usr: admin Pass: password ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS

16 DVWA (2/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

17 DVWA (3/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... Web vulnerable -> BD MySQL con administrador para ejecutar consultas -> Consulta LOW: SELECT first_name, last_name FROM users WHERE user_id = '' or '1'='1‘ Mostrar lo que hace una consulta por defecto (datos existentes y datos no existentes) ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS

18 DVWA (4/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... Consulta MEDIUM: SELECT first_name, last_name FROM users WHERE user_id = 1 or 1=1 ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS

19 DVWA (5/6) Ataque al nivel HIGH: Misma entrada y consulta:
SELECT first_name, last_name FROM users WHERE user_id = ’$id’ Entrada filtrada con: stripslashes($id) mysql_real_escape_string($id) Comprobar si $id es un número. No es posible atacar. Consulta HIGH: no se puede probar, porque phpMyAdmin no implementa los 3 niveles de seguridad de la app. ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS

20 DVWA (6/6) Conclusiones: No siempre basta con filtrar.
Una buena defensa: Filtrar entradas. Limitar número de caracteres. Conocer el problema. Mostrar lo imprescindible. Atacar una BD requiere: Paciencia. Probar diferentes alternativas. Conocer lenguaje de manipulación de la BD. Conocer el problema: Diferentes tratamientos para números en entrada que string. Al recoger los resultados de la consulta, hay que tener presente qué resultados se esperan. En este caso, 1 usuario se corresponde con 1 pass, sólo 1 fila devuelta. ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS

21 Ejemplo 2: Mini-aplicació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

22 Mini-aplicación (1/2) index.html form_login.html form_registro.html
link link form_login.html form_registro.html HTML petición respuesta petición respuesta consulta login.php registro.php PHP Base Datos MySQL ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS

23 Mini-aplicación (2/2) Ataque desde ´form_login.html´
Dos ataques posibles: Usuario y password: ´OR ´1´=´1 Usuario: ´OR 1=1-- Obtenemos todos los usuarios de la BD. Demo... Caso 1) SELECT * FROM PruebaUsuarios WHERE `nombre`= '' or '1'='1' AND `pass`= '' or '1'='1‘ Caso 2) SELECT * FROM PruebaUsuarios WHERE nombre=' or 1=1--  AND pass='$pass_form’ ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS

24 ¿PREGUNTAS? FIN ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS
Caso 1) SELECT * FROM PruebaUsuarios WHERE `nombre`= '' or '1'='1' AND `pass`= '' or '1'='1‘ Caso 2) SELECT * FROM PruebaUsuarios WHERE nombre=' or 1=1--  AND pass='$pass_form’ ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS


Descargar ppt "Introducción a ataques de tipo inyección: Inyección SQL"

Presentaciones similares


Anuncios Google