Tengo el siguiente 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));
}
En primer lugar, lee la cadena enviada con la ayuda de la entrada HTML. Luego, analiza la cadena para los símbolos < y > . Si son encontrados, son reemplazados. Luego, reemplaza %userData% con nuestra entrada y la escribe.
¿Cómo puedo omitir este filtro y explotar XSS aquí? La línea <script>let a = %userData%</script> parece bastante interesante ya que ya contiene una etiqueta de script y una variable a . Tampoco tiene sentido usar los símbolos > y < en la entrada, así que supongo que nos vemos obligados a usar la variable a . El problema es que todas mis entradas están entre comillas dobles (el resultado es <script>let some = "text"</script> cuando mi entrada es texto), por lo que no puedo ejecutar ninguna función. Tal vez es posible de alguna manera deshacerse de las comillas?