Autor Tema: Explotando XSS desde el Header Referer IE 6,7,8  (Leído 3937 veces)

0 Usuarios y 1 Visitante están viendo este tema.

preth00nker

  • *
  • Mensajes: 130
  • Liked: 1
  • mov [MyBrain], IA
Explotando XSS desde el Header Referer IE 6,7,8
« : octubre 16, 2011, 02:38:41 pm »
En los pasados días estuve analizando un XSS encontrado en el campo Referrer del protocolo HTTP. cosa que no es rara, seguramente muchos han encontrado este tipo de vulnerabilidades en algunos lugares como en los logs administrativos de foros, blogs, SMF, CRM, etc.. sin embargo, no había visto una forma en la cuál estas fueran explotadas.
A primera instancia muchos dicen que no es factible una inyección de este tipo, o que el escenario depende de muchas variables, en ejemplo,si se quisiera modificar la cabezera Referrer mediante alguna petición de tipo AJAX; la página desde donde se realiza la petición debería estar en el mismo dominio, esto debido a restricciones SOP, por tanto, de que serviría inyectar código JS/HTML, si ya se ha inyectado previamente para la petición? por tanto, este tipo de vulnerabilidades se cataloga como de poca importancia, sin embargo, el fin de esta explicación es encontrar una manera en la cuál la explotación sea exitosa sin demasiada ingeniería social.

Una vez descartada (aclaro, no del todo) el uso de una implementación AJAX para este ataque se debería encontrar una forma alternativa para modificar el campo suseptible, de forma que, si ponemos un poco de atención en el comportamiento del Header sabremos que el campo "permite al cliente especificar (en beneficio del servidor) la dirección URI del recurso desde el cuál el Request (N. del T. Petición) procede" [ Léase: http://tools.ietf.org/html/rfc2616 Apartado 14.36 Referer]. De forma que lo que el cliente necesitaría es proceder de una dirección de tipo <script>alert('Hi');<script> cosa que por el standard URI no es factible una dirección como tal, sin embargo, qué sucede si la página anterior fuera algo como http://evil.me/index.php?something=<script>alert('Hi')</script> ? aquí viene la explicación de porqué este ataque funciona en IE 6,7,8  y no en Mozilla. lo que Mozilla hace cada que el campo de referencia (Referer) es añadido a una petición es codificar en formato URL-Encode y entregar la información al server de forma que si del lado del cliente se refleja el XSS en algo como..

Código: [Seleccionar]
<html>
<head>
<Title>Oops! something went wrong</Title>
<body>
<h1>Sorry, we're in troubles</h1>
<i>please return to back page or click <a href="<? echo $_SERVER['HTTP_REFERER']; ?>">Here</a>.</i>
</body>
</head>
</html>

Como podemos ver, es posible modificar un poco la URL resultando en algo interpretable por el navegador: i.e. http://evil.me/index.php?something="><script>alert('Hi')</script><!--, ahora, en qué ocasiones es agregado el header por el navegador? Por mencionar algunas

1)Cuando el recurso proviene de una liga (Tag <a>)
2)Cuando el recurso proviene de un formulario (Tag <form>)
3)Cuando el recurso proviene de una redirección ( JS: document.location o Tag <meta>)

así que por facilidad ocuparemos la forma 3) debido a que creo que es la forma más corta y que no necesita interacción directa con el usuario obteniendo el mismo resultado.

de modo que haremos dos archivos, el primero para camuflajear la petición y que el URL no paresca tan maléfico, y el segundo para llegar a la víctima, de forma que el engaño seguiría la secuencia:

URL Normal, ejemplo, http://myserver.com/index.php el cual realizará una redirección a la página que contiene el código malicioso, ejemplo
Código: [Seleccionar]
<script>
document.location.href='http://evil.me/one.php?something="><script>alert("Hi")</script><!--';
</script>  
en el siguiente script (one.php) realizamos una nueva Redirección a la página suseptible al Referer XSS.

Código: [Seleccionar]
<script>document.location.href="http://victim.com/vulnerableURL";<script>

de forma que el único reto será que el usuario entre a http://myserver.com/index.php :)

Bien eso es todo, espero haber aportado algo a la explotación del ataque, cualquier sugerencia quedo a su disposición. finalmente para ver una alternativa de código pueden visitar http://www.gremwell.com/exploiting_xss_in_referer_header
un saludo!
« Última Modificación: octubre 16, 2011, 02:57:21 pm por preth00nker »
Mov MyHeart, 4C6F7665h!!!

whk

  • Mensajes: 2
  • Liked: 2
Re:Explotando XSS desde el Header Referer IE 6,7,8
« Respuesta #1 : enero 14, 2013, 07:44:55 am »
Muy buena info!, de hecho firefox envía la referencia urlencodeada pero el servidor se encarga de decodificarla de forma automática, este tipo de explotaciones funciona tan bien en ie como en ff y chrome, de hecho así logré explotar un xss en elhacker.net hace años ya que en el sistema de noticias imprimía la url de referencia y a traves de un simple iframe pude ejecutar el xss a pesar de que tenía un filtro,.. que la url tenía que ser proveniente del mismo foro en teoría, pero era solo una verificación con strpos asi que la url podía estar en cualquier lado...

Código: [Seleccionar]
<iframe src="http://www.elhacker.net/noticias/index.php"></iframe>

Luego lo veias desde
Código: [Seleccionar]
http://miweb.com/ataque.php?http://www.elhacker.net/&"><script>alert(document['cookie'])</script>

era entretenido porque también bypaseabas el mod evasive cuando querias intentar ejecutar un document.cookie :) recordemos ese viejo truco... que document es un array como cualquier otro que puede ser llamado como objeto con puntos o con llaves directamente o clonar dentro de otras variables como por ejemplo b=document;alert(b['location'])

Saludos.