Collo di bottiglia durante la creazione di uno scanner XSS per un sito Web che restituisce una risposta API anziché HTML

4

Sto cercando di creare uno scanner XSS usando Python per un sito web. Il sito Web ha funzionalità di creazione di widget. Il codice sorgente del sito Web contiene modelli per ciascun tipo di widget. Il sito Web restituisce una risposta API per ogni chiamata POST per creare widget, che viene poi recuperata da javascript per popolare il modello del widget con i dati.

Utilizzo di scanner XSS generici: Normalmente gli scanner XSS rilevano XSS inviando caratteri speciali e parole chiave javascript come >, <, script, ", ecc. Nel payload / URL e quindi monitorando la risposta html per verificare se i caratteri sono codificati o filtrati. non codificato / filtrato, quindi viene inviato l'intero vettore XSS. Se si riflette esattamente nella risposta HTML, allora abbiamo una vulnerabilità XSS sulla pagina.

Dichiarazione del problema: Il problema con il sito Web su cui sto lavorando è che ottengo una risposta API invece di html. La risposta dell'API contiene il carico utile immesso ma ha tutti i caratteri speciali nel formato codificato, ma si presenta nell'origine della pagina dell'interfaccia utente senza codifica, che attiva XSS. Se provo a recuperare l'html della pagina Web utilizzando una chiamata GET, ottengo l'html della pagina Web ma contiene modelli vuoti e nessun dato.

C'è un modo per superare il problema? Posso occuparmi della parte di codifica, ma non sono in grado di capire come procedere con questo problema. Un'idea generale su come procedere aiuterà.

    
posta Virtue Crazy 14.07.2016 - 10:52
fonte

1 risposta

1

In questo caso l'XSS è in realtà indipendente dal lato server, il che significa che puoi effettivamente ignorare l'invio di dati all'API e concentrarti invece sull'interfaccia utente. Ciò significa che potresti essenzialmente scrivere uno scanner XSS che prende in giro l'API e quindi rilevare le modifiche nel browser. È possibile utilizzare webdriver / selenio o simili per guidare il browser.

Un'altra alternativa potrebbe essere l'uso di phantomjs, avere il rendering della risposta e quindi prendere l'HTML completo da quello.

    
risposta data 17.07.2016 - 17:06
fonte

Leggi altre domande sui tag