È possibile costruire un payload XSS senza l'uso di questi caratteri - & < > "= ()? Il server non sta eseguendo alcuna codifica di output.
Consideriamo entrambi i casi in cui l'input dell'utente viene inserito in 1. valore attributo, 2. Corpo HTML.
@Arminius lo ha coperto abbastanza bene. Ma ci sono delle eccezioni a seconda dell'attributo HTML. Qui ci sono solo due esempi (altri esistono, in gran parte legati agli URL, ma onX
e alcuni altri attributi sono anche casi speciali; inoltre, con l'uso di framework JS anche i gadget di script ).
attributo href:
// user-supplied link:
<a href="[user_input]">click</a>
attacco:
javascript:alert'1'
meta attributo:
// user-supplied link for redirect:
<meta http-equiv="refresh" content="0;url=[user_input]">
attacco:
data:text/html;base64,PHNjcmlwdD5hbGVydCgndGVzdDMnKTwvc2NyaXB0Pg
Generalmente, no. Almeno non senza precondizioni (alcune delle quali @tim hanno messo in evidenza ), perché:
Puoi solo sfuggire da un valore di attributo introducendo la citazione corrispondente . (Presumo che tu ti stia riferendo a un attributo con doppia virgoletta, quindi un payload senza "
non ti porta oltre il valore dell'attributo. Ovviamente, puoi sfuggire a un attributo con quotatura singola perché '
non è nella lista nera , o da uno non quotato utilizzando uno spazio.)
Nello stato dei dati (al di fuori di qualsiasi tag) è possibile ottenere XSS solo introducendo nuovi tag. Tutto il resto viene semplicemente considerato come dati. Quindi se <
è nella lista nera, sei sfortunato.
Leggi altre domande sui tag xss