¿Cómo puedo explotar una vulnerabilidad XSS que no me permite escribir y símbolos y coloca mi entrada entre comillas dobles?

0

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?

    
pregunta can300 12.11.2018 - 19:49
fuente

3 respuestas

-1

Según el fragmento de código, parece que la protección solo está usando JavaScript del lado del cliente para proteger de XSS. Todo lo que tendría que hacer es abrir la consola en esa página y redefinir el método de filtro. Realmente espero que la protección XSS no se haga del lado del cliente o que este sea un CTF.

    
respondido por el MikeSchem 13.11.2018 - 10:21
fuente
2

Sí, este filtro se puede omitir jugando con patrones de reemplazo especiales .

$'$'alert(1)//

La salida de la carga útil anterior se verá similar a lo siguiente:

</script><script>let a = "</script><script>let a = alert(1)//"</script>

Si está interesado en obtener más información sobre técnicas de bypass similares, le recomiendo que pruebe enlace .

    
respondido por el EdOverflow 26.11.2018 - 20:57
fuente
0

No puedo encontrar ninguna forma directa para explotar este filtro. Sin embargo, nunca debes sentirte seguro con un filtro XSS homebrew como ese. Y podría haber formas indirectas .

La propiedad value de un elemento HTML siempre será una cadena. Entonces JSON.stringify escapará y se encerrará entre comillas dobles. Puedo pensar en tres maneras de salir del contexto de la cadena JS, pero ninguna de ellas funciona:

  • Con una etiqueta de secuencia de comandos o un comentario HTML: el reemplazo de < y > nos detiene aquí.
  • Con una cita doble: estos se escapan durante la codificación JSON.
  • Con una nueva línea: también se escapa durante la codificación JSON.

Así que buscaría formas indirectas de explotar esto. ¿Qué le pasa a la variable a ? ¿Se inserta en el DOM en algún lugar? Por ejemplo, si encuentra un código como este, podrá explotarlo:

element.innerHTML = '<img src='${a}'>';
    
respondido por el Anders 14.11.2018 - 10:31
fuente

Lea otras preguntas en las etiquetas