Sto testando un'applicazione web e ho trovato un parametro vulnerabile all'iniezione NoSQL (Elastisearch). Il parametro è denominato username ed è l'unico parametro nella richiesta HTTP. Come risposta, ottengo solo un messaggio vero / falso a seconda che il nome utente esista.
In base ai messaggi di errore che ottengo se inserisco una virgoletta doppia nel nome utente, ho concluso che l'iniezione avviene qui:
[{"size":1000,"query":{"query_string":{"query":"username:INJECTION_POINT"","lowercase_expanded_terms":true}}}]]]
Posso usarlo per estrarre i valori dei campi a cui non ho accesso eseguendo l'iniezione NoSQL basata su boolea, ad esempio fornendo il seguente valore: victim_nomeutente AND phone = 0 * (risulterebbe in un messaggio "vero" se il numero di telefono delle vittime inizia con 0).
Ma c'è qualcos'altro che potrei provare? C'è qualche possibilità di enumerare i nomi dei campi? C'è qualche possibilità di eseguire RCE utilizzando l'iniezione NoSQL in Elastisearch? Altre idee?
Il server Elastisearch non è esposto direttamente, ma suppongo che l'applicazione che sto test esegua le query NoSQL su un server interno.