¿Se puede explotar la inyección de objetos de JavaScript?

0

Estoy probando un sitio que se comporta así:

  1. Cuando cambio mi nombre de usuario, envío una solicitud POST con datos JSON como este {"username":"John"} .
  2. Si cambio eso por ejemplo a {"username":{"test":"test"}} , mi nombre de usuario se imprime así: [object Object]
  3. Por lo tanto, llegué a la conclusión de que puedo inyectar objetos y he intentado anular el método toString de mi objeto haciendo esto: {"username":{"test":"test","toString":"function() {return 1;}"}} , pero cuando cargo una página donde se debe imprimir el nombre de usuario, solo aparece un error de tiempo de ejecución en el La consola dice que toString no es una función.

Supongo que he logrado sobrescribir con éxito el método toString, pero parece que lo he reemplazado con una cadena, y por lo tanto ya no es un método y no se puede ejecutar.

¿Alguna idea si esto pudiera ser explotable?

    
pregunta pineappleman 17.05.2017 - 01:24
fuente

1 respuesta

1

JSON no se puede utilizar para la inyección de objetos en JavaScript como sugiere su pregunta.

JSON solo permite cadenas, números, objetos, matrices, booleanos y nulos. No permite funciones. Entonces, lo que está pasando allí puede parecer una función, pero no lo es. Es solo una cadena que debe contener algún código para una función. A menos que haya algo en el servidor que tome cadenas explícitamente y las ejecute como código (por ejemplo, eval ), el código no se ejecutará. La deserialización JSON no ejecuta código en cadenas.

Entonces, ¿por qué el mensaje de error? Cuando le pide a JavaScript que trate una variable como una cadena (por ejemplo, imprímala), intenta convertirla en una cadena si aún no lo es. Esto se hace intentando llamar al miembro toString . Pero lo has configurado como una cadena, no una función, por lo que no se puede llamar. De ahí el error.

    
respondido por el Anders 20.03.2018 - 12:49
fuente

Lea otras preguntas en las etiquetas