Sfruttare XSS in jQuery senza caratteri uguali?

7

Questo è un codice JavaScript vulnerabile:

$(document).ready(function(){
    var payload = unescape(document.location.hash.substr(1));
    $(payload);
    document.body.innerText = "The payload is: " + payload;
});

Quando ho provato a sfruttarlo con questo input

http://localhost/xss.html#<img src=x onerror=alert(0)>

ha funzionato bene, facendo apparire l'avviso. Il mio caso è leggermente diverso, c'è un piccolo filtro che impedisce l'exploit:

$(document).ready(function(){
    var payload = unescape(document.location.hash.substr(1));
    payload = payload.split('=')[0];  // <------- The new filter
    $(payload);
    document.body.innerText = "The payload is: " + payload;
});

Troncone tutto dopo il carattere "=", il che significa che non posso iniettare attributi. Ho già provato quanto segue, ma non ha funzionato:

  • HTML codifica il carattere uguale ( onerror&equal;alert() )
  • <script>alert(0);</script>

Qualcuno ha un'idea di cosa posso fare per aggirare questo filtro?

    
posta AlmightyGoat 08.04.2018 - 20:10
fonte

4 risposte

1

Penso sia giusto dire a questo punto che non esiste un bypass banale / di testo per questo filtro usando un browser moderno. Ho condiviso questo snippet di codice con un gruppo di amici e colleghi che considero esperti di XSS e nessuno di loro potrebbe costruire un bypass.

    
risposta data 30.11.2018 - 14:25
fonte
-2

Puoi provare il carattere codificato equivalente a quello che stai cercando di inserire. Prova a utilizzare la codifica URL nella parte del payload del tuo input per ignorare questo filtro.

Ad esempio, puoi codificare URL "=" in %3D o codificare URL <img src=x onerror=alert(0)> in %3Cimg+src%3Dx+onerror%3Dalert%280%29%3E

Questo bypasserà il filtro se è in attesa "="

In alternativa, dal momento che sembra che tu stia eseguendo questo sul tuo localhost, usa uno strumento proxy come Burp Suite per intercettare le tue richieste / risposte, puoi giocare con payload diversi per testare i tuoi payload XSS.

    
risposta data 26.09.2018 - 20:32
fonte
-4

Se non hai ancora ottenuto una risposta hai provato l'equivalente ASCII di '=', & # 61? Non ho un modo pratico per testare, ma potrebbe funzionare nel tuo caso.

    
risposta data 24.04.2018 - 15:46
fonte
-5

dovresti codificarlo. qualcosa del genere funzionerà:

 eval(String.fromCharCode(/*list of codes of payload*/))

devi dividere il carico utile nei caratteri e convertirli uno a uno in interi. puoi creare uno script per questo.

potresti anche voler guardare atob e btoa.

    
risposta data 07.11.2018 - 22:33
fonte

Leggi altre domande sui tag