Optimización de Inyecciones SQL



Documentos relacionados
Bypass WAFs KUNAK CONSULTING. Automatizando SQLi con Python. Omar Palomino.

SECURITY DAY PERU. Ataques a las Aplicaciones Web. Explotación de Aplicaciones Web. Technologies SOLUTIONS FOR KEEPING YOUR BUSINESS UP

Hacking Ético Web. I Jornadas Tecnológicas CEEPS Carlos García García i52gagac@uco.es

Session Hijacking: Secuestro de sesiones en aplicaciones web empresariales

UNIVERSIDAD TECNICA DE MANABI Facultad de Ciencias Informáticas Ingeniería en sistemas. SEGURIDAD INFORMATICA Tema: Mysql Injection

Seguridad en Aplicaciones Web

Sesión 13. Seguridad en la web. Luisa Fernanda Rincón Pérez

MySQL y Sesiones en PHP. Área de Ingeniería Telemática

Para ello debemos ingresar al índice del curso y seleccionar recorrido por el curso, tal como se muestra en la siguiente diapositiva:

VÍDEO intypedia007es LECCIÓN 7: SEGURIDAD EN APLICACIONES WEB. INTRODUCCIÓN A LAS TÉCNICAS DE INYECCIÓN SQL. AUTOR: Chema Alonso

Anonimato en la web. Anonimato en la web: Proyecto TOR + SQLMap. Omar Palomino. omarc320@gmail.com.

Diplomado Programación Web con PHP, MySQL 5.0, Apache y Ajax

CAPITULO 6 SISTEMA DE DETECCION DE INTRUSOS

TALLER DE SQL INJECTION

CONSULTAS CON SQL. 3. Hacer clic sobre el botón Nuevo de la ventana de la base de datos. Aparecerá el siguiente cuadro de diálogo.

- length(str) retorna el largo de un string en bytes. Ejemplo: "SELECT LENGTH('ITFreek')", nos devuelve 7.

Técnicas CA Plex Para Mejorar Rendimiento en MS SQL. 11E Eric Giron SODISA - Honduras

Capítulo 12: Indexación y asociación

Securiza tu red con Snort y sus amigos

Nmap web hacking. Walter Cuestas Agramonte.

Lección 7: INTRODUCCIÓN A LAS TÉCNICAS DE INYECCIÓN SQL

Web: Ataque y Defensa. my kung fu is stronger than yours, The lone Gunmen

PROGRAMACIÓN PÁGINAS WEB CON PHP

SQL Injection. 1º Edición - 11 y 12 de Mayo Montevideo, Uruguay

Segmentación de redes. CCNA 1: módulo 10.

Manual de uso básico de la aplicación

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)

PHP Y BASES DE DATOS. Introducción a SQL

Programación páginas web. Servidor (PHP)

Gastón Toth Lic. en Computación CEH Pentester

Sitios y programas recomendados

MANUAL DE USUARIO. Webservice simple para la exportación rápida de información proveniente de una base de datos. Versión 0,1,1

SINTAXIS DE SQL-92. <definición de esquema >::= CREATE SCHEMA <cláusula de nombre de esquema> [ <elemento de esquema>... ]

!!!!!!!! !!!!! Práctica!4.! Programación!básica!en!C.! ! Grado!en!Ingeniería!!en!Electrónica!y!Automática!Industrial! ! Curso!2015H2016!

Presentación de Servicios. Soluciones Profesionales en Sistemas Web

DESARROLLO WEB INTENSIVO

INFORMÁTICA. Práctica 5. Programación en C. Grado en Ingeniería en Electrónica y Automática Industrial. Curso v1.0 (05.03.

PHP Perfect SQL v1.0 (SQL perfectas en PHP)

Como es una dirección IP v4? Para que me sirve una dirección IP 12/07/2011. Direccionamiento IP. Direccionamiento IP. Fisico (Mac-address)

PHP Básico. PHP para principiantes

CAPITULO II SISTEMAS DE NUMERACIÓN Y CÓDIGOS

Dirección IP - Características

Mejores prácticas con Joomla. Por: Ing. Erika Arreguin Murillo

Iniciativas Existentes El modelo SAMM Aplicación de SAMM Niveles y Actividades SAMM SAMM en el mundo real Proyecto OpenSAMM AppSec Latam 2011

AGENDA. Mejorando la Seguridad en Aplicaciones Web. Introducción. La Web Promesas y Amenazas. Asegurando la Red y el Servidor de Web

RETO HACKER DE VERANO

Christian Martorella - Vicente Díaz Edge-security Fist Conference April 2007

Modulo Profesional de Proyecto PROPUESTA

Presentación del Curso Virtual PROGRAMACIÓN WEB PHP CON MYSQL BÁSICO

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

LAS SUBCONSULTAS SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

Seguridad en el desarrollo

TERCERIZACIÓN DE SERVICIOS DE TI. ANEXO 4 - Actividades y niveles de servicio definidos para Primer Nivel de Soporte en Seguridad

Web : Ataque y Defensa. Claudio Salazar Estudiante Ing. Civil Informática UTFSM Pinguinux Team

SIIGO PYME PLUS. Cambio Clave de Administrador y Usuario. Cartilla I

MySQL 5 (versiones 5.1 a 5.6) Guía de referencia del desarrollador

Por ejemplo convertir el número 131 en binario se realiza lo siguiente: Ahora para convertir de un binario a decimal se hace lo siguiente:

CURSO DE PROGRAMACIÓN PHP MySQL

Anexo B. Comunicaciones entre mc y PC

Matemática de redes Representación binaria de datos Bits y bytes

1. DML. Las subconsultas

ELO211: Sistemas Digitales. Tomás Arredondo Vidal 1er Semestre 2007

Seguridad Informática: Introducción (II)

FORMACIÓN PRESENCIAL ESPECIALIZADA - SEGURIDAD EN ENTORNOS WEB - MODULO I ENTORNO DE DESARROLLO WEB. MYSQL+PHP AUDITOR DE SEGURIDAD EN ENTORNOS WEB.

Manual de uso básico de la aplicación

Tema 2 : Códigos Binarios

Cómo cambiar o restablecer exprs de usuario Contraseña (How to Reset your exprs User Account Password)

Sistemas numéricos - otras representaciones - Taller de programación

Fundación Universitaria San. Direccionamiento IP

UNIVERSIDAD TECNOLÓGICA NACIONAL FACULTAD REGIONAL CÓRDOBA EL LENGUAJE DE LOS DATOS EN LA PC Y SU FORMA DE ALMACENAMIENTO

CAPITULO 4 JUSTIFICACION DEL ESTUDIO. En este capítulo se presenta la justificación del estudio, supuestos y limitaciones de

Taller de Hacking Web

DIRECCIONAMIENTO IPv4

Anunciantes: consejos para la integración de los tags Reactivpub en Joomla

EJERCICIOS DEL TEMA 1

Su uso conlleva una serie de ventajas y desventajas propias del uso de estas herramientas.

INTRODUCCIÓN A LA SEGURIDAD EN SISTEMAS Y WEBS

Nociones de performance

EJERCICIOS RESUELTOS Y COMENTADOS PARA EL APRENDIZAJE DE LA INSTRUCCIÓN SELECT

Principios básicos de administración de sistemas TIC

Tipo de Dato TRANSACT SQL

ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Programación de sitios web Act 4: Lección Evaluativa 1

TRANSFORMADORES TRIFÁSICOS

Aplicación de Base de Datos con MySQL, ODBC y Delphi

Introducción a la Programación 11 O. Humberto Cervantes Maceda

Una solución a la medida de tus necesidades

SQL Los fundamentos del lenguaje

Operaciones Aritméticas en Números con Signo

El sistema decimal, es aquél en el que se combinan 10 cifras (o dígitos) del 0 al 9 para indicar una cantidad específica.

PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos Oracle:

Universidad Central de Bayamón Colegio de Desarrollo Empresarial y Tecnología

Tema 1. SISTEMAS DE NUMERACION

Arquitectura de Redes y Comunicaciones

Optimizar base de datos WordPress

Esta extensión está obsoleta a partir de PHP 5.5.0, y será eliminada en el futuro

Transcripción:

Optimización de Inyecciones SQL Cesar Neira Estudiante de Ing. de Sistemas UNMSM http://alguienenlafisi.blogspot.com csar.1603@gmail.com OWASP LATAM TOUR 2012 The OWASP Foundation http://www.owasp.org

SPONSORS: OWASP LATAM TOUR 2012 2

Derechos de Autor y Licencia Copyright 2003 2012 Fundación OWASP Este documento es publicado bajo la licencia Creative Commons Attribution ShareAlike 3.0. Para cualquier reutilización o distribución, usted debe dejar en claro a otros los términos de la licencia sobre este trabajo. The OWASP Foundation http://www.owasp.org

Agenda SQL Injection (intro) Blind SQL Injection Booleanización Algoritmo de búsqueda binaria. Técnica FIND_IN_SET Descripción Problemas y soluciones Prevención y Contramedidas OWASP LATAM TOUR 2012 4

SQL Injection - Fallo de inyección. - Falta de validación de entradas. - Permite modificar las consultas SQL. - Extracción de información.

SQL Injection http://example.com/news.php?id=23 <?php //... $id = $_GET['id' 'id']; $query = SELECT * FROM news WHERE id=$id $id ; //...?> SELECT * FROM news WHERE id=23

SQL Injection http://example.com/news.php?id=23 and 1=0 <?php //... $id = $_GET['id' 'id']; $query = SELECT * FROM news WHERE id=$id $id ; //...?> SELECT * FROM news WHERE id=23 and 1=0

Blind SQL Injection - No muestra información de la base de datos en el navegador. - Se necesita booleanizar la información. - Extracción de datos más lenta.

Por ejemplo: Selecciona al menos un registro de la tabla usuarios. No selecciona ningún registro de la tabla usuarios.

Por ejemplo: 1 = 1? 1 = 0?

Booleanización - Representar la información de forma binaria. - Extraer un bit de información en cada consulta.

Por ejemplo: El nombre de usuario empieza con a??user=admin' AND MID(USER(),1,1)='a'%23 - USER() --> root@localhost - MID( root@localhost,1,1) --> 'r' - AND 'r'='a' --> FALSO

'r'='a'? 'r'='b'? Mucho tiempo después.. 'r'='r'?

Búsqueda Binaria - Buscar un valor en un arreglo ordenado. - Reduce la complejidad a la mitad en cada iteración. - Muy eficiente.

Por ejemplo:?user=admin' AND ASCII(MID(USER(),1,1))>128%23 - ASCII( 'r' ) --> 114 - AND 114 > 128 --> FALSO?user=admin' AND ASCII(MID(USER(),1,1))>64%23 - ASCII( 'r' ) --> 114 - AND 114 > 64 --> VERDADERO...

Algunas tools - Sqlmap (http://sqlmap.sourceforge.net/) - Sqlninja (http://sqlninja.sourceforge.net/) - Absinthe (http://www.0x90.org/releases/absinthe/) - BSQL Hacker (http://labs.portcullis.co.uk/application/bsql-hacker/) - SQLBrute (https://github.com/gdssecurity/sqlbrute)

Otras técnicas - Expresiones Regulares REGEXP http://www.ihteam.net/papers/blind-sqli-regexp-attack.pdf - Bit Shifting (MySQL) http://h.ackack.net/faster-blind-mysql-injection-using-bit-shifting.html - Find In Set (MySQL) http://websec.ca/blog/view/optimized_blind_sql_injection_data_retrieval

Find In Set - Roberto Salgado 31/03/2011 - Función de MySQL FIND_IN_SET() - Devuelve la posición de un caracter en un conjunto.

Find In Set - Definir un conjunto - Obtener la posición del caracter en el conjunto - Obtener la cadena binaria de la posición. - Extraer bit a bit la cadena binaria.

Find In Set DECIMAL BINARIO # BITS # CONSULTAS 0-1 0-1 1 2 2-3 10-11 2 3 4-7 100-111 3 4 8-15 1000-1111 4 5 16-31 10000-11111 5 6 32-63 100000-111111 6 7 64-127 1000000-1111111 7 8 128-255 10000000-11111111 8 9

Ejemplo:?user=admin' AND (SELECT @a:=mid(bin(find_in_set(mid(user(),1,1),'a,b,c,d,e,f,g, h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9')),1,1))=@a AND IF(@a!='',@a,SLEEP(4))%23 FIND_IN_SET('r','a,b,c,...') > 18 BIN(18) > 10010 MID( 10010,1,1) > 1 (SELECT @a:=1)=@a > TRUE TRUE AND IF(@a!='',@a,SLEEP(4))

Comparación Número de consultas por método para CHARACTER_SET

Problemas - FIND_IN_SET() no es sensible a mayúsculas. - Hay más casos malos que buenos. - Necesita una consulta adicional para identificar el final. - El final se identifica con un retardo.

Soluciones?

Usar INSTR() - INSTR() devuelve la posición de un caracter en una cadena. - Es sensible a mayúsculas si uno de sus parámetros es del tipo BINARY.

Ordenar por frecuencias

Ceros a la izquierda? - No hay ceros a la izquierda. - El primer bit siempre es 1. - Se puede obviar la primera consulta.

Evitar el retardo? - Generar un error. - Usar 3 páginas diferentes.?id=0 > (pag. 1)?id=1 > (pag. 2)?id=NULL > (pag. 3)

Prevención & Contramedidas

Validación de Entradas - Expresiones regulares - Validación de tipo - Escapar caracteres especiales - Librerías de seguridad ESAPI No solo JavaScript

Consultas Parametrizadas Definir primero la consulta y luego pasarle los parámetros. - Prepared Statements. - Storage Procedures.

Permisos de Acceso - Las aplicaciones no necesitan la cuenta de Administrador. - GRANT ALL PRIV... Es Necesario? - Aplicaciones diferentes, usuarios diferentes

IDS, IPS, WAF, etc... - Sistemas de detección y prevención de intrusos. (Snort, PHPIDS) - Web Application Firewall. (mod_security) - Reescritura de solicitudes HTTP. (mod_rewrite) - Basados en patrones. - No 100% confiables.

Preguntas?

Muchas gracias!