Am scris cel mai simplu frontend pentru MongoDB cu un mecanism de autentificare de bază cu un nume de utilizator și o parolă pe care le puteți găsi într-o aplicație mai puțin serioasă. O colecție personalizată este stocată de baza de date MongoDB împreună cu PHP și Apache.
Următorul este un instantaneu al colecției din tabelul "Myusers":
Figura 1: Conținutul mesei "myusers"
Pe partea aplicației, este implementat cel mai simplu mecanism de autentificare, în care sunt comparate numele de utilizator și parola introduse (a se vedea imaginea de mai jos).
Figura 2: Un fragment de cod responsabil pentru procesul de autentificare
Pentru a înțelege mai bine principiul codului, un pic de format de interogare. Toate cererile din MongoDB trebuie să fie în format JSON, unde sunt transferate matricea parametrilor și a valorilor. Driverul MongoDB este o componentă care convertește un matrice într-un format JSON.
O interogare plină cu valori va fi transmisă către MongoDB în următoarea formă:
Adresa URL care efectuează autentificarea în cazul meu arată astfel:
De regulă, în atacurile asociate manipulării datelor de intrare, obiectivul principal este de a "depăși" logica activității backend-ului. În cazul nostru, logica este simplă - este necesar ca valoarea adevărată să fie returnată.
Valoarea adevărată este returnată atunci când: (username = X) și (password = Y).
În plus, următoarea expresie este de asemenea adevărată: (nume de utilizator! = A) și (parola! = B).
Pentru a ocoli mecanismul de autentificare, vom folosi un argument negativ atât în numele anonim, cât și în numele unui anumit utilizator.
În PHP, puteți trece parametrii negativi prin intermediul operatorului [$ ne], ceea ce ne va ajuta să ocolim mecanismul de autentificare cu următoarea adresă URL:
În partea MongoDB, se execută următoarea interogare:
care va returna întregul conținut al colecției și injectarea noastră va fi finalizată cu succes:
(username = Mark) și (parola! = bar)
În loc de bara de cuvinte, puteți înlocui orice altă combinație de caractere care nu este o parolă a lui Mark.
URL-ul va arăta astfel:
Baza de date MongoDB va rula următoarea interogare: