Seguridad en aplicaciones web (Parte 2 - XSS Cross Site Scripting)

Ya vimos la primera parte de este tutorial, ahora vamos a expandirlo y enfocarnos en buscar formas de inseguridad y seguridad en la temática XSS.

XSS - Cross Site Scripting
Un XSS es un tipo de vulnerabilidad surgida como consecuencia de errores de filtrado de las entradas del usuario en aplicaciones web.

Estos ataques se aprovechan de la confianza del usuario en la aplicación, el atacante inyecta código JavaScript en nuestra web.

¿Qué se puede lograr mediante un ataque XSS?

  • Robar las cookies de un usuario y entrar en su lugar.
  • Mostrar una página falsa de login en tu web (phishing).
  • Llevar a cabo cualquier acción como si fuera otro usuario.
  • Malograr y modificar la página vulnerable.

Dos tipos de ataques XSS


Existen dos tipos de ataques que se pueden realizar con XSS los cuales son:

Persistentes

Son “menos” frecuentes, son datos introducidos por el usuario y son almacenados de manera PERSISTENTE (db) y utilizados para generar una página HTML.

Reflejados

Son los más frecuentes, son datos introducidos por el usuario y son utilizados INMEDIATAMENTE para generar una página HTML.

Ejemplo XSS


un pequeño ejemplo sería con la utilización de un formulario como este:

ejemplo1.php ejemplo1-2.php En el ejemplo1.php se presenta una encuesta, luego de seleccionar alguna opción, los datos son enviados a la página “ejemplo12.php” , en donde se los imprime.

Este simple ejemplo permite inyectar código XSS, debido a que la variable no está filtrada, un ejemplo de inyección podría ser:

Otro ejemplo XSS


Digamos que el usuario necesita rellenar un formulario, para que luego esta información se guarde en una base de datos ó archivo.

Y tenemos algo como lo siguiente:

formularioxss.php Ahora debemos procesar esos datos que se van a introducir para eso tenemos:

guardar.php El php es vulnerable ya que no tiene ningún filtro de seguridad para evitar inyecciones y al introducir código malicioso en vez de datos ocurriría fallos en la página.


Ahora vamos y abrimos el archivo "almacen.html" y podemos observar que se dejo pasar el código malicioso:


Ahora debemos aplicar seguridad, hagamoslo editando el archivo "guardar.php" y dejándolo de esta forma: Y ahora el resultado sería:


La variable $_GET


La variable predefinida $_GET se utiliza para recoger los valores en un formulario con method="get".

Ejemplo
Cuando el usuario hace clic en el botón "Enviar", la URL enviada al servidor podría ser algo como esto: El "validar.php" puede utilizar la variable $_GET para recoger los datos del formulario (los nombres de los campos del formulario será automáticamente las claves de la matriz $_GET):

validar.php El método de inyección de este ejemplo es el siguiente: Y el resultado sería:


Aplicando la seguridad de htmlspecialchars() la estructura php sería así: Y el resultado libre de cualquier peligro sería así:


$PHP_SELF


También aprovecho para exponer lo peligroso que es utilizar la variable $PHP_SELF, entonces tenemos un ejemplo como este: La url para atacar la vulnerabilidad sería así: $_SERVER['PHP_SELF'] en este caso tomaría el valor de: Que produciría lo siguiente: Ejemplo básico de $PHP_SELF en fomularios

Supongamos que tenemos un formulario como este:

formulario.php El cual es vulnerable y se puede introducir código malicioso de esta forma: El resultado sería de esta forma:


Claramente podemos observar que se inyecto con éxito el código introducido, ahora vamos a ver el código fuente como señale en la imagen y nos generaría lo siguiente:


Podemos observar en esta segunda imagen que el código inyectado hizo que el código normal se modificará y en la línea 7 quedase el código de esta forma: Y eso es lo que pasa cuando se utiliza $PHP_SELF sin protección.

Añadiendo protección a $PHP_SELF


Es simple, lo único de debemos hacer es codificar la url y es posible realizarlo de esta forma: Y con eso termino la segunda parte de este tutorial, si tienen algo más que anexar o alguna duda dejarlo en los comentarios, pronto realizo una tercera parte.

Más información

Comenta con Facebook

No hay comentarios

                   

¿Quieres mantenerte informado sobre este artículo? Descarga nuestro Software en tu PC▼