¿Por qué los siguientes vectores XSS funcionan sin cerrar el corchete?

3

Las siguientes inyecciones de XSS se ejecutarán sin la etiqueta de cierre que lo acompaña (vea esta demostración ):

<body/onload=alert(1)
<svg/onload=alert(1)
<iframe/onload=alert(1)

Solo necesito saber por qué funcionan estos, cualquier enlace de documentación también será apreciado.

    
pregunta Yatin Mehandiratta 28.10.2018 - 08:22
fuente

1 respuesta

4

Si ve cómo el servidor entrega realmente su código (por ejemplo, al usar el menú contextual "ver fuente del marco" en Chrome para el marco blanco en jsfiddle) puede ver que está incrustado en otro código como este. :

<body>
  <svg/onload=alert(1)

  <script>

Esto significa esencialmente que el elemento HTML completo visto por el navegador comienza con <svg y termina con > . El < no se considerará como el comienzo de un nuevo elemento HTML ya que el elemento existente aún no está cerrado.

<svg/onload=alert(1) <script>

Después de arreglar el navegador, es probable que esto se interprete como <svg onload=A B> , donde A es alert(1) y B es <script , ejecutando así su carga útil A e ignorando el atributo B ya que no hay ningún comportamiento definido para él. >

En cuanto a los detalles sobre cómo se realiza el análisis, consulte la definición de sintaxis de HTML5 que describe el analizador en detalle. Al seguir el estándar terminará con:

initial:    "data state" (8.2.4.1)
'<svg':     move to "tag open state" (8.2.4.6) and then "tag name state" (8.2.4.8)
'/':        move to "self closing state" (8.2.4.40)
'onload':   parse error, go do "before attribute name state" (8.2.4.32) and 
            from there to "attribute name state" (8.2.4.33) and read the attribute
'=':        switch to "attribute value state" (8.2.4.35)
'alert(1)': read attribute within "attribute value (unquoted) state" (8.2.4.38)
' ':        switch to "before attribute name state" (8.2.4.32)
'<script':  read attribute name within "attribute name state" (8.2.4.33)
'>':        switch to "after attribute name state" (8.2.4.34) and from there
            to "data state" (8.2.4.1)

En otras palabras, como dije antes, la etiqueta es svg , el atributo onload tiene un valor de atributo de alert(1) y hay otro atributo <script .

    
respondido por el Steffen Ullrich 28.10.2018 - 15:17
fuente

Lea otras preguntas en las etiquetas