XSS all'interno dell'attributo HTML dove e "sono filtrati

7

È possibile ignorare un filtro XSS in cui < e " sono codificati come &lt; e &quot; , ma > non è sfuggito?

I miei dati sono iniettati in un attributo del valore HTML. Tuttavia non posso uscirne perché " è sfuggito.

Caratteri filtrati:

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

sono valutati come:

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

1 risposta

10

No, se " è correttamente scappato non c'è modo di andare oltre il valore dell'attributo HTML.

Il tuo browser analizza l'HTML come una macchina a stati. Per verificare quali transizioni di stato sono possibili con i tuoi caratteri disponibili, puoi cercare lo stato in specifica della sintassi HTML5 . Nel tuo caso, queste sono le opzioni:

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.

Come puoi vedere, l'unico modo per uscire dal stato del valore dell'attributo è tramite le virgolette corrispondenti ( " o ' rispettivamente). Qualsiasi altro carattere aggiunge semplicemente al valore dell'attributo corrente. Anche le parentesi angolari e i caratteri di controllo non hanno alcun significato speciale all'interno di un attributo.

Quindi, in questo caso particolare è anche irrilevante come vengono gestiti < e > . Questo è il trigger non :

<input type="text" value="<script>alert('No bounty for you.')</script>">
    
risposta data 10.11.2016 - 19:20
fonte

Leggi altre domande sui tag