¿Cómo trata Javascript guiones?

maritio_o:

Estoy buscando en XSS juego y éste desafío llamado Jeff .

El reto toma un parámetro de consulta denominado jeffcomo entrada, y lo almacena en una variable llamada jeff. El objetivo del reto es cargar un cuadro de alerta en la página. Los usos de soluciones guiones para ejecutar Javascript dentro de una eval()función.

Por lo tanto, tenemos esta eval:

eval(`ma = "Ma name ${jeff}"`)

Y la entrada de la solución para obtener un cuadro de alerta es (Spoiler de alerta sin juego de palabras!).:

"-alert(1337)-"

Ahora, estoy en desesperada necesidad de entender cómo Javascript trata a esos guiones! ¿¡Ayuda!?

CertainPerformance:

El código que utiliza el sitio es:

let jeff = (new URL(location).searchParams.get('jeff') || "JEFFF")
eval(`ma = "Ma name ${jeff}"`)

Tenga en cuenta que searchParamsle da un URLSearchParamsobjeto, y su .getmétodo le da una secuencia correspondiente al parámetro. Por lo tanto, el objetivo es llegar a algunos personajes que, cuando se inserta en

ma = "Ma name <CHARACTERS>"

y correr, da como resultado la ejecución de código arbitrario.

El primer paso es rodear los caracteres en "s, con el fin de acabar con el literal de cadena después de la namey reanudar un literal de cadena después de los caracteres:

ma = "Ma name " <SOMETHING ELSE> ""

Así que ahora usted tiene que averiguar qué tipo de caracteres puede entrar en <SOMETHING ELSE>lo que se traducirá en código Javascript válida.

Si usted acaba de poner en alert(), eso no será válida:

ma = "Ma name " alert() ""

Eso es un error de sintaxis. Usted necesita algo para indicar lo que el alerttiene que ver con el token de cadena literal que se produce justo antes de ella. Una -puede hacer el truco, pero también podía hacerlo cualquier otro operador, como +, %y así sucesivamente. También es necesario conectar el extremo del alertcon el literal de cadena, por lo tanto la necesidad de otro operador al final reanudó:

ma = "Ma name "-alert('foo')-""
//            ^^^^^^^^^^^^^^^^

ma = "Ma name "-alert('foo')-""

Por lo tanto, los caracteres que deben ser insertados son:

"-alert('foo')-"

Tenga en cuenta que debido a que la cadena se entrega dentro de un parámetro de búsqueda, un +No se interpreta como el carácter literal +- más bien, que va a ser interpretado como un espacio . Así que jeff="+alert(1337)+"no va a funcionar, pero jeff="%2balert(1337)%2b"lo hará.

Punto y coma funcionan tan bien, porque dan lugar a:

ma = "Ma name " <SOMETHING ELSE> ""
ma = "Ma name "; alert()        ;""

que es una sintaxis válida.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=303036&siteId=1
Recomendado
Clasificación