Evita el cambio de document.location, al inyectar el comando document.location de JavaScript

3

Encontré un XSS reflejado en una aplicación durante una prueba, donde defino la cadena que se pasa a:

<script language='JavaScript'>
document.location='/this-is-my-input'
</script>

Se produce algún error de entrada, por ejemplo, mi cadena solo se registra después del primer / . Así que logré escapar el comando document.location mediante la codificación de URL /'//\nalert(1) , que ejecuta alert(1) , pero inmediatamente me redirige a la raíz / de la aplicación web.

¿Hay algo que pueda hacer para evitar el cambio de la ubicación del documento?

editar: Con la entrada del usuario mencionada anteriormente, el código tiene el siguiente aspecto:

<script language='JavaScript'>
document.location='/'//
alert(1)//'
</script>
    
pregunta SaAtomic 03.02.2017 - 13:54
fuente

1 respuesta

1

Usa hashfragments.

/'.replace(/^.*$/, document.location+"#") lleva a document.location='/'.replace(/^.*$/, document.location+"#") , que básicamente toma la URL actual y pone un fragmento de hash detrás de ella. No volverá a cargar la página ya que hashfragments no lo hace en broswers.

Coloca lo que quieras después como ;alert(1) .

Dado que el código original contiene ' (es decir, document.location='/' ), entonces no olvide descartarlo, usando un comentario ( // o /* ), o dejando su último valor de Cadena sin cerrar ( es decir, escriba var x='My String y deje que el original ' cierre la cadena). De lo contrario, puede generar un error de análisis y no se ejecutará Javascript en absoluto.

    
respondido por el Xenos 03.02.2017 - 15:22
fuente

Lea otras preguntas en las etiquetas