Actualizado el 4 de Agosto del 2017 (Publicado el 18 de Junio del 2017)
1.202 visualizaciones desde el 18 de Junio del 2017
13,2 MB
94 paginas
Creado hace 17a (29/03/2008)
Principales vulnerabilidades
en aplicaciones Web
Christian Martorella
Edge-security.com
1
#Whoami: Christian Martorella
Cofundador Edge-security.com
CISSP, CISM, CISA, OPST, OPSA
Actualmente trabajando en
Presidente de las Conferencias F.I.S.T
Miembro de OISSG
http://laramies.blogspot.com
2
Escenario actual
El servicio más difundido y utilizado es WWW
75% de los ataques ocurren en las aplicaciones Web
(Gartner)
3 de 4 servidores son vulnerables a los ataques web
(Gartner)
Cada 1500 líneas de código hay una vulnerabilidad (IBM)
3
Escenario actual
Aumento del uso de aplicaciones web en el día a día,
Banca online, redes sociales, etc
Web 2.0 añade mayor complejidad y nuevos vectores
de ataque
Los firewall permiten el paso de este servicio y no
pueden hacer nada al respecto
Punto de contacto con las bases de datos ($$)
Cada vez los datos personales tienen más valor, y hay
más interesados en ellos.
4
Escenario actual
Precio de los datos:
5
Escenario actual
Ataques de phishing y fraude online (Launch pad,
infection point)
6
Escenario actual -
4396 vulnerabilidades
Web Applications
Otras vulnerabilidades
7
Escenario actual -
Vulnerabilidades más explotadas:
PHP Remote File Inclusion
SQL Injection
Cross Site Scripting (XSS)
Cross Site request forgery (CSRF)
8
Escenario actual - WASC
Porcentaje de sitios vulnerable por tipo de vulnerabilidad
Cross site Scripting
Other
Information Leakage
Http Response Splitting
SQL Injection
SSI Injection
Web Application Security Consortium 2006
9
Escenario actual - WASC
Vulnerabilidades más comúnes x clase
85.57
26.38
15.70
9.76
1.19
4.30
Cross Site Scripting
SQL Injection
Information Leakage
HTTP Response Splitting
Path Traversal
Other
0
25
50
75
100
Web Application Security Consortium 2006
10
Escenario actual - OWASP
Open Web Application Security Project
Cantidad de proyectos relacionados con la seguridad
de aplicaciones web
Uno de ellos el Top 10 de vulnerabilidades
11
OWASP TOP 10
Cross Site Scripting (XSS)
Injection Flaws (SQL, LDAP)
Malicious File Execution
Insecure Direct Object Reference
Cross Site Request Forgery (CSRF)
12
OWASP TOP 10
Information Leakage and Improper Error Handling
Broken Authentication and Session Management
Insecure Cryptographic Storage
Insecure Communications
Failure to Restrict URL Access
13
Escenario actual
14
Web applications 101
15
Web applications 101
16
Web applications 101
17
Las sospechosas habituales
18
SQL injection
19
SQL injection
SQL: Structured Query Language
Utilizado para consultar y administrar Bases de Datos
Query / consulta: Unidad típica de ejecución.
Consultas básicas: SELECT, INSERT, UPDATE.
20
SQL injection
SELECT * FROM usuarios WHERE name=”laramies”;
SELECT id FROM usuarios;
SELECT nombre FROM usuarios UNION SELECT
name FROM employees;
21
SQL injection
La inyección de código SQL se produce cuando datos
suministrados por el usuario son enviados sin filtrar a
un intérprete como parte de una consulta (Query), con
el fin de modificar el comportamiento original, para
ejecutar comandos o consultas arbitrarias en la base
de datos.
22
SQL injection
<code>
sql_query=
“SELECT * FROM users WHERE
username = '" + username_string + "' AND
userpass = '" + password_string + "'"
</code>
23
SQL injection
Consulta final en DB:
SELECT * FROM users WHERE
username = 'laramies' AND
userpass = 'test'
OK!
24
SQL injection
Consulta final en DB:
SELECT * FROM users WHERE
username = 'laramies'' AND
userpass = 'test'
Microsoft OLE DB Provider for ODBC Drivers
(0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL
Server]Unclosed quotation mark before the character string
' AND userpass=userpass_string'.
25
SQL injection
Consulta final en DB:
SELECT * FROM users WHERE
username = '' or 1=1;--
AND userpass = 'test'
OK!! Acceso permitido
con el primer usuario de
la DB
26
SQL injection
Evadir autenticaciones, controles de acceso.
Obtener y/o modificar datos arbitrarios de la base de
datos
Leer ficheros del sistema operativo
Ejecutar comandos en el Sistema Operativo
27
SQL injection
SELECT * FROM usuarios WHERE
name=’laramies’;exec master..xp_cmdshell(net user
laramies /add);--
SELECT * FROM usuarios WHERE
name=’laramies’;shutdown--
28
SQL injection
DEMOS [SQL Injection]
29
SQL injection - Tools
Sqlbif:
/
SqPyfia: http://www.edge-security.com
Sqlmap:
Sqlix :
/
30
http://www.open-labs.orghttp://sqlmap.sourceforge.nethttp://www.owasp.org/index.php/Category:OWASP_SQLiX_ProjectBlind SQL injection
31
Blind SQL injection
Blind SQL injection es igual al SQL injection, pero con
la diferencia que no se obtienen mensajes de error ni
resultados en las respuestas.
Es más difícil de explotar y lleva más tiempo obtener
los resultados.
Se ocultaron los mensajes de error, pero no se arregló
la vulnerabilidad.
32
Blind SQL injection
Se puede explotar mediante consultas SQL con
evaluaciones lógicas del tipo True ó False.
http://newspaper.com/items.php?id=2
SELECT title, description, body FROM items WHERE ID = 2
Y como resultado en el browser obtenemos:
33
“Conferencia de Rediris el día 28”Blind SQL injection
http://newspaper.com/items.php?id=2 and 1=0
SELECT title, description, body FROM items WHERE ID = 2 and 1=0
Como resultado en el browser obtenemos:
ID = 2 and 1=0
True
and
False
False
34
“No se encontro articulo en la Base de datos”Blind SQL injection
http://newspaper.com/items.php?id=2 and 1=1
SELECT title, description, body FROM items WHERE ID = 2 and 1=1
Como resultado en el browser obtenemos:
35
“Conferencia de Rediris el dia 28”Blind SQL injection
!=
43 chars
32 chars
36
“No se encontró artículo en la Base de datos”“Conferencia de Rediris el día 28”Blind SQL injection
Como podemos explotarla?
http://newspaper.com/items.php?id=2 and 1=1 OK
http://newspaper.com/items.php?id=2 and 1=0 NO
Hay que averiguar el tipo de DB:
http://newspaper.com/items.php?id=2 and
user()=user() OK --> MYSQL
37
Blind SQL injection
38
Blind SQL injection
sql.php?id=1 and substr(user(),1,1) = “a” NO
sql.php?id=1 and substr(user(),1,1) = “b” NO
sql.php?id=1 and substr(user(),1,1) = “c” NO
sql.php?id=1 and substr(user(),1,1) = “d” NO
sql.php?id=1 and substr(user(),1,1) = “e” NO
sql.php?id=1 and substr(user(),1,1) = “f” OK
Primer carácter del resultado de la función user() es “f”
39
“No se encontró artículo en la Base de datos”“Conferencia de Rediris el día 28”“No se encontró artículo en la Base de datos”“No se encontró artículo en la Base de datos”“No se encontró artículo en la Base de datos”“No se encontró artículo en la Base de datos”Blind SQL injection
sql.php?id=1 and ascii(substr(user(),1,1)) > 100 OK
El valor ascii de la primer letra del usuario > 100
sql.php?id=1 and ascii(substr(user(),1,1)) > 100 OK
sql.php?id=1 and ascii(substr(user(),1,1)) >150 NO
sql.php?id=1 and ascii(substr(user(),1,1)) >125 NO
sql.php?id=1 and ascii(substr(user(),1,1)) >112 OK
sql.php?id=1 and ascii(substr(user(),1,1)) >118 OK
sql.php?id=1 and ascii(substr(user(),1,1)) >114 NO
sql.php?id=1 and ascii(substr(user(),1,1)) >113 OK
sql.php?id=1 and ascii(substr(user(),1,1)) =114 OK
Primer carácter del resultado de la función user() es “r”
40
Blind SQL injection
Si el comportamiento es el mismo, estamos seguros de
que no hay SQL injection?
SELECT title, description, body FROM items WHERE ID = 2 and 1=0 32 Chars
SELECT title, description, body FROM items WHERE ID = 2 and 1=1 32 Chars
41
NO...Blind SQL injection
Pero podemos usar algunas opciones como:
Timing
Condicionales (IF)
WAIT FOR DELAY '0:0:10' SQL Server
BENCHMARK() MySQL
pg_sleep(10) PostgreSQL
42
Blind SQL injection
SELECT title, description, body FROM items WHERE ID = 2 ;waitfor delay '0:0:15'--
SELECT title, description, body FROM items WHERE ID = 2;if (select user) = 'sa'
waitfor delay '0:0:15'
43
Tiempo de ejecución > = 15 seg OK!Tiempo de ejecución > = 15 OK!Sabemos que el usuario es “SA”Blind SQL injection
DEMOS [Blind]
44
Blind SQL injection
45
SQL injection
Contramedidas:
Validar los datos de entrada, White Lists
Utilización de procedimientos almacenados
parametrizados
Conexiones con mínimos privilegios, granularidad
Validar, validar, validar, y por las dudas validar.
46
Blind SQL injection
Herramientas:
Sqlbif:
SqPyfia:
Pblind:
Sqlmap:
Sqlix :
/
/
47
http://www.open-labs.orghttp://www.edge-security.comhttp://www.edge-security.comhttp://sqlmap.sourceforge.nethttp://www.owasp.org/index.php/Category:OWASP_SQLiX_ProjectSQL Injection
48
Cross Site Scripting XSS
49
Cross Site Scripting XSS
La vulnerabilidad ocurre cuando una aplicación recibe
datos enviados por el usuario, y los devuelve al
browser sin validarlos o codificarlos.
Para poder explotar esta vulnerabilidad generalmente el
atacante tendrá que engañar a la víctima en abrir un
link, visitar una página, ver una imagen, etc...
50
Cross Site Scripting XSS
Que se puede hacer con ellos?:
Robo de información de autenticación y
secuestro de cuentas
Robo y envenenamiento de cookies
Website Deface
Phishing
51
Cross Site Scripting XSS
Más..
Log Keystrokes
Deface websites
Port Scan Intranet
XSRF
Abusar de
vulnerabilidades del
browser
Robar History
52
Cross Site Scripting XSS
Tipos:
Persistente o Almacenado
No persistente ó reflejado (más común)
Basados en DOM (Document Object Model)
53
Cross Site Scripting XSS
No Persistente - Reflejado
1.Alice visita el sitio “XSSLand”, donde tiene una cuenta para acceder a sus datos
personales.
2. Haxor encuentra un XSS de tipo “No persistente” en “XSSLand”.
3. Haxor prepara una URL que explota la vulnerabilidad, y envia el link a través del correo,
haciendose pasar por el servicio de administración de “XSSLand”
4. Alice visita la URL qu
Comentarios de: Principales vulnerabilidades en aplicaciones Web (0)
No hay comentarios