¿Cómo se puede usar document.referrer para XSS?

10

Un ejemplo muy simple ...

<div id="cat"></div>
<script>
document.getElementById("cat").innerHTML = document.referrer;
</script>

o

<script src="' + document.referrer + '"></script>

He intentado simplemente enviar la solicitud y agregar un encabezado de referencia, pero eso no parece hacer eco en la página.

    
pregunta Michael Blake 27.08.2014 - 08:10
fuente

2 respuestas

5

Los navegadores actualizados codificarán la URL de referencia.

Por lo tanto, sus ejemplos no funcionarán para activar XSS hoy en día.

Prueba esto:

<div id="cat"></div>
<script>
document.getElementById("cat").innerHTML = decodeURIComponent(document.referrer);
</script>

JSFIDDLE:

enlace

    
respondido por el Lucas NN 27.11.2014 - 04:00
fuente
2

El siguiente código es vulnerable a XSS basado en DOM, porque el navegador rastrea el valor controlado por el atacante document.referrer :

<script src="' + document.referrer + '"></script>

El código anterior puede explotarse utilizando una página que, al cargarse por primera vez, redirige el navegador a su destino, en la segunda carga devuelve una carga útil XSS. Una forma de hacerlo es verificando el referente en el lado del servidor:

<?php
if($_SERVER['HTTP_REFERER'] == 'http://target.com/xss'){
   print "alert('xss')";
}else{
   header("location: http://target.com/xss")
}
?>

Cuando se cargue la página enlace , javascript de document.referer lo hará cargar alerta ('xss') .

    
respondido por el rook 15.09.2014 - 19:05
fuente

Lea otras preguntas en las etiquetas