Previene la modifica di document.location, quando si inserisce il comando JavaScript document.location

3

Ho trovato un XSS riflesso in un'applicazione durante un test, in cui definisco la stringa passata a:

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

Si verifica qualche sanificazione dell'input, ad esempio la mia stringa viene registrata solo dopo il primo / . Quindi sono riuscito a sfuggire al comando document.location dalla codifica URL /'//\nalert(1) , che esegue alert(1) , ma immediatamente reindirizza alla root / dell'applicazione web.

C'è qualcosa che posso fare per impedire la modifica della posizione del documento?

modifica: con l'input utente sopra menzionato, il codice appare come segue:

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

1 risposta

1

Utilizza hashfragments.

/'.replace(/^.*$/, document.location+"#") porta a document.location='/'.replace(/^.*$/, document.location+"#") che sostanzialmente prende l'URL corrente e inserisce un frammento di hash dopo di esso. Non ricaricherà la pagina poiché hashfragments non lo fa sui broswers.

Metti in seguito quello che vuoi come ;alert(1) .

Poiché il codice originale contiene un ' (cioè document.location='/' ), non dimenticare di eliminarlo, utilizzando un commento ( // o /* ) o lasciando l'ultimo valore di Stringa non chiuso ( cioè scrivi var x='My String e lascia che l'originale ' chiuda la stringa). Altrimenti, potrebbe generare un errore di analisi e Javascript non verrà eseguito affatto.

    
risposta data 03.02.2017 - 15:22
fonte

Leggi altre domande sui tag