XSS Cross Site Scripting

  • Posted on: 10 December 2013
  • By: ReYDeS

Los ataques Cross Site Scripting son un tipo de problema de inyección, en el cual scripts maliciosos son inyectados dentro de sitios webs confiables y benignos. El ataque XSS ocurre cuando un atacante utiliza una aplicación web para enviar código maliciosos, generalmente en la forma de un script en el lado del navegador, a un usuario final diferente. Las fallas que permiten a este tipo de ataque ser satisfactorios está ampliamente diseminados y cuando en cualquier lugar donde la aplicación web utiliza una entrada del usuario para la salida que esta generada sin validarlo o codificarlo.

Un atacante puede utilizar un XSS para enviar un script malicioso a un usuario desprevenido. El navegador del usuario final no tiene manera de conocer si el script podría no ser confiable, y podría ejecutar el script. Debido a este pensamiento de que el script proviene de una fuente de confianza, el script maliciosos puede acceder a cualquier cookie, tokens de sesión, y otra información sensible retenida por el navegador y utilizado con este sitio. Estos script puede reescribir el contenido de un página HTML.

Para los siguientes ejemplos se utiliza DVWA (Damn Vulnerable Web Application) que se incluye en la Máquina Virtual de OWASP Broken Web Applications Project.

Nivel Bajo (Low)

Esto se obtiene al visualizar el código fuente:

Se realiza la evaluación utilizando el siguiente código:

Siendo el resultado de la prueba lo mostrado en la siguiente imagen

Nivel Medio (Medium)

Al visualizar el Código fuente se identifica la función str_replace de PHP, la cual devuelve un string o un array con todas las apariciones de search en subject reemplazadas con el valor dado de replace.

Si no se necesitan reglas complicadas de reemplazo (como expresiones regulares), se puede utilizar siempre esta función en lugar de preg_replace().

Se realiza la evaluación utilizando el siguiente código

Siendo el resultado de la prueba lo mostrado en la siguiente imagen

Nivel Alto (High)

Al visualizar el Código fuente se identifica la función htmlspecialchars.

Ciertos caracteres tienen un significado especial en HTML y deben ser representados por entidades HTML si se desea preservar su significado. Esta función devuelve un string con estas conversiones realizadas. Si se requiere que todas las subcadenas de entrada tengan asociadas entidades con nombre para que sean traducidas, use htmlentities() en su lugar.

Si el string de entrada pasado a esta función y el documento final comparten el mismo conjunto de caracteres, esta función es suficiente para preparar entradas para su inclusión en la mayoría de los contextos de un documento HTML. Sin embargo, si la entrada puede representar caracteres que no están codificados en el conjunto de caracteres del documento final, y es necesario conservar dichos caracteres (tales como números o entidades con nombre), esta función y htmlentities() (la cual solamente codifica subcadenas que tienen equivalentes de entidades con nombre) podrían ser insuficientes. Se podría usar mb_encode_numericentity() en su lugar.

Fuentes:
https://www.owasp.org/index.php/Cross-site_Scripting_%28XSS%29
https://www.owasp.org/index.php/OWASP_Broken_Web_Applications_Project
http://www.dvwa.co.uk/
http://www.php.net/manual/es/function.str-replace.php
http://php.net/htmlspecialchars

Sobre el Autor


Alonso Eduardo Caballero Quezada - ReYDeS
Instructor y Consultor en Hacking Ético, Forense Digital & GNU/Linux
Correo Electrónico: ReYDeS@gmail.com
Twitter: @Alonso_ReYDeS
LinkedIn: pe.linkedin.com/in/alonsocaballeroquezada
Facebook: https://www.facebook.com/alonsoreydes
Youtube: http://www.youtube.com/c/AlonsoCaballero
Resumen de mi CV: http://www.reydes.com/d/?q=node/1