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?