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

Slides:



Advertisements
Presentaciones similares
Internet y tecnologías web
Advertisements

SQL Y BASES DE DATOS A TRAVÉS DE LA WEB
integridad referencial
Acceso a bases de datos con MySQL y ODBC desde PHP
ADMINISTRACION DE REDES SECUENCIA DE COMANDOS EN SITIOS CRUZADOS(XSS)
Acceso a bases de datos MySQL en PHP
Desarrollo de Aplicaciones para Internet
Especialista en Business Intelligence Integration Services SSIS (Sesión 5) Microsoft SQL Server 2008 R2 (Nov.2013) Suscribase a o.
SQL Server Integration Services SSIS
ACCESO A BASES DE DATOS ORACLE CON PHP
Framework Hexápodo PHP fácil, rápido y sin dolor
Curso de PHP Tema 6: Seguridad.
Aplicaciones en línea:aquellas aplicaciones que los usuarios pueden utilizar accediendo a un servidor web a través de Internet o de una intranet mediante.
4.3. Privilegios de usuarios
TECNOLOGÍA IDC Internet Database Connector Trinitario Gómez López.
Controlde acceso mediante sesiones índice 1. Introducción 2. Comenzar sesión Control de acceso mediante sesiones 3. Estructura de página 4. Autentificación.
ADMINISTRACION DE REDES TEMA REDIRECCIONES Y REENVÍOS NO VALIDADOS
Taller 5: Trabajo con Plantillas y uso de tecnología Ajax.
BASE DE DATOS DISTRIBUIDAS
TRABAJO DE SISTEMAS R EFERENCIA D IRECTA I NSEGURA A O BJETOS REALIZADO POR : DEISY MOSQUERA KARINA CHAVERRA.
MySQL M.C. Pedro Bello López.
CAPITULO 1 Escribiendo Sentencias SELECT Básicas
ADMINISTRACION DE REDES SECUNECIA DE COMANDOS EN SITIOS CRUZADOS(XSS) DIEGO ALEXANDER MADRID DUQUE GABRIEL ANDRES AGUIRRE JARAMILLO INSTITUTO TECNOLOGICO.
ROMERO G ARCIA FANY KARINA Y BARRIOS CRUZ REBECCA SARAHI GRUPO:303 EQUIPO:5.
Los Diez Riesgos Más Importantes en Aplicaciones WEB Top A1-Inyección Oscar William Monsalve Luis Alberto Suarez Jorge Eliecer Betancur Diana Marcela.
WEB VULNERABLE DVWA Universidad de Almería
The OWASP Foundation OWASP AppSec Aguascalientes 2010 Guía de Desarrollo Seguro Francisco Aldrete Miembro de OWASP capítulo Aguascalientes.
Bases de datos en la Web n Las bases de datos permiten almacenar de una forma estructurada y eficiente toda la información de un sitio web n Ventajas –Proporcionar.
Una base de datos es un “almacén” que nos permite guardar grandes cantidades de información de forma organizada para que luego podamos encontrar y utilizar.
PHP TODO SOBRE PHP.
Fundamentos de bases de datos:
ATAQUES POR INYECCION DE CODIGO SQL
EMPRESA DISTRIBUIDORA DE CERVEZA
UD 1: “Adopción de pautas de seguridad informática” Análisis de las principales vulnerabilidades de un sistema informático. Luis Alfonso Sánchez Brazales.
REFERENCIA DIRECTA INSEGURA A OBJETOS
LENGUAJE SQL.
Bases de Datos Sql.
Especialista en Business Intelligence Integration Services SSIS Transformaciones (Parte 3) Microsoft SQL Server 2008 R2 Suscribase a
Web Semántica La Web Semántica es la nueva generación de la Web, que intenta realizar un filtrado automático preciso de la información. Para ello, es necesario.
Introducción al Lenguaje. ¿ Qué es PHP ? O Hypertext Pre-processoes (PHP) es un lenguaje de "código abierto" interpretado, de alto nivel, embebido en.
COLEGIO DE BACHILLERES PLANTEL 13 XOCHIMILCO-TEPEPAN MATERIA:TIC EQUIPO:21 PRESENTACION: BASE DE DATOS ALUMNAS: Adán Millán Sánchez.
Bases de Datos.
Metodología de la programación
EQUIPO:#3 GRUPO:304 NOMBRES: Lizbeth Nava Barón y Erick Ali Mejía.
MARTÍNEZ VALLEJO ISAMAR SCANDA MONTOYA MENDOZA DIANA RUBI GRUPO: 304.
S EGURIDAD Y A LTA D ISPONIBILIDAD Nombre: Adrián de la Torre López 24/09/ Adrián de la Torre López.
PUNTO 3.
Diseño de una base de datos y elementos básicos Integrantes: López Ponce de León José Efrén Velazquez Martínez Brenda Equipo:10Grupo:307.
Ihr Logo PHP Parte 2 “php toma muchas sintaxis de lenguajes de alto nivel conocidos para poder trabajar”
INSTRUCCIONES Elaboración de la Presentación:
MySQL LENGUAJE SQL.
Se producen cuando una aplicación recibe datos no confiables y estos no han sido validados adecuadamente antes de procesarlos, lo cual puede llevar a que.
Bases de Datos Unidad 1.
Tema 11 Bases de Datos y el Lenguaje SQL
Análisis de las principales vulnerabilidades de un sistema informático. Gabriel Montañés León.
Capítulo 9: Detección de Errores MSc. Alexis Cabrera Mondeja.
INTERFAZ DE ACCESS  Access es un sistema gestor de bases de datos relacionales (SGBD). Una base de datos suele definirse como un conjunto de información.
Hackear un Sitio Web. Claudio
A NÁLISIS DE LAS PRINCIPALES VULNERABILIDADES DE UN SISTEMA INFORMÁTICO Luis Villalta Márquez.
 Es un lenguaje de programación interpretado, es decir, que no requiere compilación, utilizado principalmente en páginas web, con una sintaxis semejante.
Alberto Rivera Tavera Microsoft Student Partner
SQL es un estándar internacional para trabajar con bases de datos, que consta de dos partes: una parte para manipular datos y una parte para definir tipos.
INTEGRANTE: FLORES GODOY JUAN E. Grupo:308. Una tabla es una colección de datos sobre un tema específico, como productos o proveedores. Al usar una tabla.
DEFINICION ADMINISTRACIÓN Y SEGURIDAD Administración Humano regula el acceso a todos los Módulos y permite restringir la ejecución de determinadas tareas.
Diccionario/Directorio de Datos
QUÉ ES UNA BASE DE DATOS? Es un Conjunto de Información, que está clasificada de distintas maneras; pero que comparten entre sí algún tipo de vínculo,
DLM Transact SQL Sesión I Introducción al SQL Server Uso de las herramientas de consultas del Transact SQL.
Introducción a phpmyadmin índice 1. Introducción 6. Insertar registros 5. Crear usuario para php 8. Modificar registros 2. Base de datos MySQL 3. Crear.
Consultas a mysql desde PHP índice 1. Introducción 5. Ejemplo 4. Tratamiento de datos 2. Instrucción SQL 3. Pasos C o n s u l t a s a m y s q l d e s d.
Php y mysql índice 1. Conexión 6. Ejercicio 5. Insertar un registro 2. Operaciones básicas 3. Seleccionar BD 4. Crear una BD P h p y m y s q l Índice 1.
Transcripción de la presentación:

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

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

¿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

¿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

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

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

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

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

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

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

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

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

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

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

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: http://localhost/dvwa/login.php Usr: admin Pass: password ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS

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

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 -> http://localhost/dvwa/login.php BD MySQL con administrador para ejecutar consultas -> http://localhost/phpmyadmin/ 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

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... http://localhost/dvwa/login.php 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

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. http://localhost/dvwa/login.php 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

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

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

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

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... http://localhost/p_sqli/form_login.html 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

¿PREGUNTAS? FIN ASIGNATURA DE REDES: INYECCIÓN SQL JORGE PERIS CORTÉS http://localhost/p_sqli/form_login.html 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