Filtraggio bypass di virgolette per XSS nel campo di input

1

Esiste un modo possibile per scrivere un payload che può ignorare il filtraggio di ' , " , < e > ? Per quanto ne so, è javascript:alert() in quanto non utilizza nessuno dei precedenti. Quindi dovrebbe funzionare se lo uso in un campo di input in cui tutti i caratteri sopra menzionati sono filtrati?

Ho un campo come questo:

<input type="text" name="name" value=''></input>

Ora devo chiudere la citazione a value e inserire la mia stringa (ad esempio ' onload=javascript:alert() ), ma quella quota non viene visualizzata nell'origine della mia risorsa.

    
posta user144140 06.04.2017 - 22:33
fonte

2 risposte

4

No, XSS non può funzionare qui senza una sola citazione.

In javascript:alert() , la prima parte è il protocollo javascript. È necessario essere in un contesto URL affinché funzioni (ad esempio, all'interno di un attributo href ). Funzionerà anche, ma non sarà necessario, in un attributo Event (ad esempio onload ).

Per eseguire XSS nel tuo contesto, devi essere in grado di uscire dal contesto di stringa dell'attributo value. Per fare questo, hai bisogno di virgolette singole. Se sono filtrati correttamente, non c'è XSS qui.

(C'è un leggero cambiamento nel fatto che il filtro non funziona correttamente, il filtro può essere fatto prima per primo, dopo di che l'input viene gestito ulteriormente - ad esempio decodificato da un certo formato - che potrebbe consentire di bypassare il filtro; non è possibile ignorare il filtro e iniettare una virgoletta singola, non è possibile eseguire XSS).

    
risposta data 07.04.2017 - 08:35
fonte
0

La precedente risposta a questa domanda, per quanto ne so, è errata. Puoi ignorare le virgolette singole utilizzando le funzioni che non determinano valori di ritorno vuoti.

Ad esempio

<img src=javascript:eval(alert(new Data.now()))>

Questo attiverà un avviso XSS senza le virgolette richieste.

    
risposta data 18.05.2018 - 14:46
fonte

Leggi altre domande sui tag