¿Cómo se realiza DOM XSS?

0

He estado haciendo este desafío y encontré un nivel súper difícil que creo que se trata de DOM XSS.

Lo sé porque no recibo ninguna respuesta del servidor y todo lo que inserto no se reflejará debido a un escape brutal.

Aquí está el código fuente de la página:

<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>

¿Alguna ayuda por favor?

    
pregunta Xozu 25.08.2016 - 11:07
fuente

1 respuesta

3

Creo que primero debes mejorar con tu javascript .

Para responder a su pregunta, la siguiente solicitud GET es lo que necesita enviar

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

Explicación

En el código

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

Aquí, estás tomando la subcadena de los parámetros de GET en la URL.

Y luego estás copiando cada uno de los parámetros GET en el objeto queryDict como queryDict.key = value.

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

Esto asigna a queryDict.p el valor de %3Cscript%3Ealert(123)%3C%2Fscript%3E que es igual a encodeURIComponent('<script>alert(123)</script>').

Y finalmente

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

descodifica el valor de queryDict.p y lo inyecta en DOM como Javascript

    
respondido por el Sravan 25.08.2016 - 11:35
fuente

Lea otras preguntas en las etiquetas