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?