Come eseguire DOM XSS?

0

Ho fatto questa sfida e mi sono imbattuto in un livello super difficile che penso sia tutto merito del DOM XSS.

Lo so perché non ricevo alcuna risposta dal lato server e tutto ciò che inserisco non rifletterà indietro a causa della fuga brutale.

Ecco il codice sorgente della pagina:

<html>
<body>
<script src="analytics.js"></script>

<p>
your cool xss
</p>

<script>

var queryDict = {};
location.href.substr(location.href.indexOf('?')+1).split("&").forEach( function(item) {
  queryDict[item.split("=")[0]] = item.split("=")[1]
});

a = '';

b = document.write('<b>' + decodeURIComponent(queryDict.p) + '</b>');

</script>
<!-- use your head and not automatic scanners like burp.. it will not help -->
</body>
</html>

Qualche aiuto per favore?

    
posta Xozu 25.08.2016 - 11:07
fonte

1 risposta

3

Penso che sia necessario migliorare prima con javascript .

Per rispondere alla tua domanda, la seguente richiesta GET è ciò che devi inviare

http://example.com/test.html?p=%3Cscript%3Ealert(123)%3C%2Fscript%3E

Spiegazione

Nel codice

location.href.substr(location.href.indexOf('?')+1).split("&")

Qui stai prendendo la sottostringa dei patametri GET nell'URL.

E quindi copi ognuno dei parametri GET in oggetto queryDict come queryDict.key = value.

 forEach( function(item) {
  queryDict[item.split("=")[0]] = item.split("=")[1]

Assegna a queryDict.p il valore di %3Cscript%3Ealert(123)%3C%2Fscript%3E che è uguale a encodeURIComponent('<script>alert(123)</script>').

E infine

b = document.write('<b>' + decodeURIComponent(queryDict.p) + '</b>');

decodifica il valore di queryDict.p e lo inserisce in DOM come Javascript

    
risposta data 25.08.2016 - 11:35
fonte

Leggi altre domande sui tag