XSS - El ataque XSS reflejado
Publicado el 2 agosto, 2011 por sshMan
Cross Site Scripting, en adelante XSS es una vulnerabilidad en la que se manipula la entrada de parámetros de una aplicación para obtener una salida que no sea la que corresponde con el funcionamiento normal del sistema. Según la OWASP es la segunda vulnerabilidad más presente en las aplicaciones (despues de SQLi, de la quehablamos aqui).
Hay bastantes tipos de XSS. Hablaremos un poco de ellos, y después unos ejemplos en la aplicación web vulnerable WebGoat de la OWASP.
Algunos tipos de XSS
Reflected XSS
Stored XSS
Cross Site Request/Reference Forgery (CSRF)
Cross Frame Scripting (XFS)
Cross Agent Scripting (XAS)
Cross Referer Scripting (XRS)
DoS (XSS DoS)
Instalando WebGoat
Requisitos:
1. Java
2. TomcatPara ejecutar WebGoat, nos descargamos el siguiente archivo y lo descomprimimos. Para ponerlo en marcha sólo hay que abrir la carpeta que descomprimimos y ejecutar webgoat.bat. Para acceder al servicio web hay que ir a http://localhost/WebGoat/attack.
Reflected XSS
El ataque XSS reflejado o no-persistente es un tipo de inyección de código que no se almacena en la aplicación sino que ocurre cuandose carga una URL en el navegador.
La idea de este ataque es que el atacante le pasa a la víctima una URL maliciosa y esta, al introducir la URL en el navegador ejecuta el código malicioso.
En WebGoat:
Entramos en el apartado Cross Site Scripting(XSS) en la barra lateral izquierda. Y luego Stage 5: Reflected XSS.
Elegimos Larry Stooge (employee) y de contraseña larry.
Pinchamosen SearchStaffy ahora introducimos en el campo de búsqueda:
1
">alert('XSS reflejado')
También podemos introducir el siguiente código para obtener la cookie:
1
">alert(document.cookie)
Hay ocasiones en las que se filtran los carácteres ‘‘ y ‘/‘. Podemos pensar a priori que la aplicación no es vulnerable a XSS, sin embargo podemos probar a usar dichos caracteres en hexadecimal. En este caso hay quesustituir los carácteres. ‘‘ es %3e y ‘/‘ es%2f. En este caso el código quedaría:
1
"%3e%3cscript%3ealert(document.cookie)%3c%2fscript%3e
Echandole imaginación se puede realizar este tipo de ataque de inyección de código en formularios de login, búsqueda…
Stored XSS
El XSS persistente se basa en el XSS no persistente, la diferencia que hay entre ambos y la que hace al persistente más peligrosoes que se almacena en la aplicación web.
El vector de ataque seria algo así:
1. Se escribe el código malicioso en la web (ya sea en forma de comentarios, gestores de archivos, perfiles de usuario…).
2. La victima accede a la aplicación web.
3. El codigo malicioso se ejecuta en el navegador del usuario.
En WebGoat:
Entramos en el apartado Cross Site Scripting(XSS) en la barra lateralizquierda. Y luego Stage 1: Stored XSS.
Nos logueamos por ejemplo como Tom Cat, contraseña tom. Pinchamos en View Profile y después en Edit Profile. Y por ejemplo en el campo Commentsintroducimos:
1
">alert(document.cookie)
Si ahora entramos como otro usuario, por ejemplo Jerry Mouse, contraseña jerry y accedemos al perfil de Tom Catveremos esto:
Para escapar los caracteres, en caso de que laaplicación los filtre se pueden utilizar los mismos ejemplos que en el caso de reflected XSS.
Cross Site Request/Reference Forgery (CSRF)
El Cross Site Request Forgery (CSRF) es un ataque que se basa en la confianza entre un usuario y la aplicación para hacer que el usuario ejecute código malicioso sin saberlo y al estar logueado en la aplicación, esta no sabe si es el usuario legítimo el quequiere ejecutar el código o este ha sido ocultado mediante CSRF.
Con este ataque se puede forzar a un usuario de por ejemplo un blog o foro, a que postee algo sin el saberlo. La manera más comun de realizar esto es mediante javascript, o con parámetros via GET y POST. Por ejemplo:
Imaginad que estamos logueados en una tienda online que tiene una funcion comprar y cuando se compra un objeto, se...
Regístrate para leer el documento completo.