Ho il seguente script:
function filter() {
const inputstring = JSON.stringify(document.getElementById('input').value)
.replace(/[<]/g, '%lt')
.replace(/[>]/g, '%gt');
const userTemplate = '<script>let a = %userData%</script>';
document.write(userTemplate.replace(/%userData%/, inputstring));
}
Prima di tutto, legge la stringa inviata con l'aiuto dell'input HTML. Quindi analizza la stringa per i simboli < e > . Se vengono trovati, vengono sostituiti. Quindi, sostituisce %userData% con il nostro input e lo scrive.
Come posso ignorare questo filtro e sfruttare XSS qui? La riga <script>let a = %userData%</script> sembra abbastanza interessante in quanto contiene già un tag script e una variabile a . È anche abbastanza inutile usare > e < simboli in input, quindi suppongo che siamo costretti a usare la variabile a . Il problema è che tutto il mio input viene circondato da virgolette doppie (il risultato è <script>let some = "text"</script> quando il mio input è testo), quindi non posso eseguire alcuna funzione. Forse è in qualche modo possibile sbarazzarsi delle virgolette?