XSS dentro del atributo HTML donde y "se filtran

7

¿Es posible omitir un filtro XSS donde < y " están codificados como &lt; y &quot; , pero no se escapa > ?

Mis datos se inyectan en un atributo de valor HTML. Sin embargo, no puedo salir de eso porque se escapó " .

Caracteres que se filtran:

'';!--"<XSS>=&{()}

se evalúan como:

&#39;&#39;;!--&quot;&lt;XSS>=&amp;{()}
    
pregunta Ogglas 10.11.2016 - 18:13
fuente

1 respuesta

10

No, si " se escapa correctamente, no hay forma de ir más allá del valor del atributo HTML.

Su navegador analiza HTML como una máquina de estado. Para verificar qué transiciones de estado son posibles con sus caracteres disponibles, puede buscar el estado en especificación de sintaxis HTML5 . En su caso, estas son las opciones:

8.2.4.38 Attribute value (double-quoted) state

Consume the next input character:

U+0022 QUOTATION MARK (")
    Switch to the after attribute value (quoted) state.
U+0026 AMPERSAND (&)
    Switch to the character reference in attribute value state, with the additional allowed character being U+0022 QUOTATION MARK (").
U+0000 NULL
    Parse error. Append a U+FFFD REPLACEMENT CHARACTER character to the current attribute's value.
EOF
    Parse error. Switch to the data state. Reconsume the EOF character.
Anything else
    Append the current input character to the current attribute's value.

Como puede ver, la única forma de salir del Estado de valor de atributo citado es a través de la comilla correspondiente ( " o ' respectivamente). Cualquier otro carácter solo se agrega al valor del atributo actual. Incluso los paréntesis angulares y los caracteres de control no tienen un significado especial dentro de un atributo.

Entonces, en este caso particular, también es irrelevante cómo se manejan < y > . Esto no se desencadena :

<input type="text" value="<script>alert('No bounty for you.')</script>">
    
respondido por el Arminius 10.11.2016 - 19:20
fuente

Lea otras preguntas en las etiquetas