Realizar XSS en un enlace donde se pasa la ruta de la imagen en la cadena de consulta

1

Tengo una página en mi sitio web como esta: domain.com?img=test.jpeg Y en la página, el javascript escrito es:

var imgPath = getQuerystring('img');
$("#img").attr('src','/Images/' + imgPath);

Me preguntaba si alguien puede manipular la cadena de consulta para hacer algo por correo.

Dado que el javascript siempre está agregando la ruta con '/ Images /', espero que no sea vulnerable.

Pero luego cambié mi código js a esto:

$("#img").attr('src',imgPath);

Ahora, cuando pasé una cadena de consulta maliciosa como esta:

domain.com?img=alert('XSS')

Pero whoops, no me mostró el cuadro de alerta.

¿Este tipo de ataque es resuelto por nuestros navegadores web?

    
pregunta Lakshay 03.07.2014 - 14:54
fuente

3 respuestas

1

XSS no se trata solo de hacer aparecer los cuadros de alerta y de redirigir a otras páginas, hay otras cosas que puede hacer. ;)

¿Qué estás haciendo con la entrada que el usuario especifica? ¿Se almacena esto en una base de datos, o se usa para recuperar imágenes?

La entrada que está recibiendo, ¿se vuelve a mostrar en cualquier lugar de su sitio? Si es así, podría haber un problema XSS persistente, ya que ha almacenado la entrada que un usuario no confiable le ha dado.

La mejor respuesta es asegurarse de eliminar cualquier carácter especial de ese campo antes de usarlo en otra parte de su aplicación, ya que esto anula el riesgo de XSS.

    
respondido por el TimC 03.07.2014 - 15:03
fuente
0

Si usas

$("#img").attr('src', imgPath);

yo creo

http://example.com/?image=javascript:alert("Hi");

funcionaría.

Sin embargo, como dijiste, las / Imágenes / prefijadas deberían al menos eliminar todos los Javascript. Aún así, es posible mostrar cualquier imagen accesible a través de su sitio web (y con eso significa cualquier script php, etc.) como $("#img") , por ejemplo:

http://example.com/?image=../css/images/some_background.png
    
respondido por el marstato 03.07.2014 - 15:02
fuente
0

Hacer esto $("#img").attr('src',imgPath); es muy malo. Usted permite que un atacante ejecute un javascript arbitrario con las credenciales de su usuario. Pero incluso si bloquea javascript y solo permite url, el atacante puede crear enlaces que le permitirán ejecutar una solicitud de obtención en cualquier url arbitraria en nombre de sus usuarios. Cuando el navegador presenta un nodo, obtiene el valor en el atributo src y realiza una solicitud HTTP GET a esa dirección. En su caso, esa dirección está controlada por el atacante que puede crear un enlace con cualquier url.

Con respecto a la segunda opción $("#img").attr('src','/Images/' + imgPath); , no he pensado en una forma directa de cargar javascript o cualquier otro recurso fuera de su dominio. Pero aún es peligroso y podría ser explotado ya que está permitiendo que el atacante cree un enlace que haga que el usuario realice una solicitud GET a cualquier recurso en su dominio. Por ejemplo, si su sitio web tiene una API, permitirá que el atacante pueda realizar una solicitud de GET de API en nombre del usuario, esto debería ser inofensivo (solo lectura) si siguió las sugerencias de seguridad correctas, pero aún así podría fallar. Tu lógica en el peor de los casos.

Mi sugerencia es encontrar una manera de superar esto con una arquitectura diferente. ¿Por qué no aceptar una ID de una imagen y convertirla en una url en el lado del servidor si es legal? También puede hacer eso en javascript si no quiere hacerlo en el lado del servidor. La idea es aceptar un valor que no pueda controlarse y que afecte a la url final.

    
respondido por el aviv 03.07.2014 - 16:02
fuente

Lea otras preguntas en las etiquetas