L'injection object JavaScript è sfruttabile?

0

Sto testando un sito che si comporta in questo modo:

  1. Quando cambio il mio nome utente, invio una richiesta POST con dati JSON come questo {"username":"John"} .
  2. Se lo cambio ad esempio {"username":{"test":"test"}} , il mio nome utente è stampato in questo modo: [object Object]
  3. Quindi ho concluso che posso iniettare oggetti e ho provato a sovrascrivere il metodo toString del mio oggetto facendo questo: {"username":{"test":"test","toString":"function() {return 1;}"}} , ma quando carico una pagina dove il nome utente deve essere stampato, ottengo solo un errore di runtime nel console dicendo che toString non è una funzione.

Suppongo di essere riuscito a sovrascrivere il metodo toString, ma sembra che lo abbia appena sostituito con una stringa, e quindi non è più un metodo e non può essere eseguito.

Qualche idea se questo potrebbe essere sfruttabile?

    
posta pineappleman 17.05.2017 - 01:24
fonte

1 risposta

1

JSON non può essere utilizzato per l'iniezione di oggetti in JavaScript come suggerisce la tua domanda.

JSON consente solo stringhe, numeri, oggetti, matrici, booleani e null. Non consente le funzioni. Quindi quello che stai passando potrebbe sembrare una funzione, ma non lo è. È solo una stringa che sembra contenere del codice per una funzione. A meno che sul server non ci sia qualcosa che prenda esplicitamente stringhe e le esegua come codice (ad esempio eval ), il codice non verrà eseguito. La deserializzazione JSON non esegue codice nelle stringhe.

Quindi perché il messaggio di errore? Quando chiedi a JavaScript di trattare una variabile come una stringa (ad esempio, stampala), prova a convertirla in una stringa se non è già una. Questo viene fatto cercando di chiamare il membro toString . Ma hai impostato come stringa, non come funzione, quindi non può essere chiamata. Quindi l'errore.

    
risposta data 20.03.2018 - 12:49
fonte

Leggi altre domande sui tag