La secuencia de comandos XSS reflejada pasa a través de la URL cómo hacer que funcione y cuáles son las condiciones previas para que funcione.

2

Tratando de aprender sobre seguridad, configuré el sitio web más simple en mi host local, que consiste en una página html que sirve un servidor apache. Comencé a probar y agregar el script JS que se ejecutaría al final de una URL:
/index.html?message=<script>alert('XSS');</script>

El navegador lo codifica a:

/index.html?message=%3Cscript%3Ealert(%27XSS%27);%3C/script%3E

Mi comprensión de la forma en que debería funcionar este tipo de vector de ataque es que el atacante envía una URL similar a la víctima - > la víctima hace clic en él - > la secuencia de comandos se ejecuta (¿no está seguro en el momento exacto en que debe ejecutarse?)

Preguntas:

  1. ¿Por qué no se ejecuta?
  2. ¿Cómo hacer que se ejecute?
  3. ¿Cuáles son los requisitos previos de un ataque de este tipo? tal vez no sea suficiente tener una página web simple?
  4. ¿Cuándo debería ejecutarse este script? Después de las cargas de DOM?

La explicación general sobre cómo debería funcionar esto también sería muy apreciada. ¡Gracias!

    
pregunta Mindaugas Bernatavičius 20.09.2014 - 04:37
fuente

1 respuesta

3

Los ataques XSS se basan en el hecho de que la entrada se convierte en salida para el navegador del usuario final. El ataque más común es básicamente un sitio PHP que contiene

<?php
echo $_GET["message"];
?>

A continuación, pasaría a esta URL un parámetro que contiene el código javascript. Si desea configurar esto, cree un archivo something.php en su servidor web, ingrese el código anterior en él y luego acceda a http://your-server/something.php?message=<script>alert('XSS');</script> en su navegador. Entonces debería mostrar una ventana emergente que contenga XSS.

En una página HTML estática, esto no es posible, ya que solo genera contenido basado en el código HTML estático del servidor. XSS necesita la inclusión del código provisto por el usuario. La exclusión es, si el HTML carga un código javascript vulnerable, que permite la entrada proporcionada por el usuario.

El punto principal de XSS es que un atacante desea incluir SU código en SU sitio web, sin piratear realmente el servidor web. Esto solo es posible con los lenguajes de programación del lado del servidor, que producen algo, el atacante previamente colocado en el servidor.

Básicamente, el pirata informático desea que el HTML se vea en el navegador de esta manera

<html><body>Foo<script>alert('XSS');</script></body></html>

en lugar de

<html><body>Foo</body></html>

Piense, por ejemplo, en un foro o comentarios sobre un artículo. El usuario debe poder dejar sus comentarios. El servidor necesita guardar esto y presentar el mismo comentario a otros usuarios. Si el comentario en sí contiene código javascript y el programa del servidor no lo mitiga, generará el mismo código como parte del bloque de comentarios.

En cuanto a cuándo se carga esto en el navegador, esto no es fácil de responder. Depende de dónde se incluye el código del pirata informático en el cuerpo de la página o los archivos javascript cargados posteriormente. Si se incluye como una etiqueta javascript en el HTML principal, se cargará una vez que se complete la carga del DOM. Especialmente como se mencionó anteriormente, la vulnerabilidad XSS también podría ocurrir dentro de un archivo javascript (que toma la entrada del usuario, por ejemplo, una URL y la carga). En este caso, no es posible decir cuándo se ejecutará exactamente el código. Podría vincular este código javascript a un botón, a un evento onblur () del cuadro de texto o a un temporizador.

EDITAR:

Al elaborar el ataque de javascript, esto es lo que pondrías en tu archivo de servidor

<html><body>
<script type="text/javascript">
    var queryDict = {};
    location.search.substr(1).split("&").forEach(function(item) {queryDict[item.split("=")[0]] = item.split("=")[1]});
    document.write(decodeURIComponent(queryDict["message"]));
</script>
</body></html>

Las dos primeras líneas, toman básicamente todos los parámetros GET y los dividen en una matriz (tomada de aquí ). La tercera línea simplemente envía esto a la página HTML. Por supuesto, esto también podría hacerse mediante cualquier otra manipulación de DOM desde el código ejecutado.

    
respondido por el Spacy 20.09.2014 - 11:17
fuente

Lea otras preguntas en las etiquetas