# Exploiting NoSQL operator injection to extract unknown fields
* Yêu cầu của bài lab là chúng ta khai thác lỗ hổng NoSQLi để trích xuất từ những trường không nhìn thấy được và login vào account của user `carlos`. Đầu tiên ta login bằng một account tùy ý để lấy request trong Proxy.


* Ta dùng payload `"password":{"$ne":"invalid"}` để login vào user `wierner` thì thành công.

* Nhưng dùng cho user `carlos` thì chúng ta lại nhận được response là "Account locked: please reset password".

* Vì nhận được thông báo trên nên chúng ta sẽ gửi request `POST /forgot-password` của user `carlos`. Giờ ta phải tìm token reset password để đổi password của user `carlos`.

* Chúng ta phải tìm được trường chứa token reset password trong database. Sử dụng `$where` và thử lần lượt với '0' và '1', chúng ta sẽ thấy khi `"$where":"0"` thì kết quả là "Invalid username or password" nhưng khi `"$where":"1"` thì nó trả về "Account locked" như lúc nãy.


* Sau khi xác định được vị trí các trường thì chúng ta sẽ đi tìm tên trường đó. Gửi request qua Intruder, thêm vào `"$where":"Object.keys(this)[1].match('^.{$$}$$.*')"` để tìm tên trường, payload đầu tiên là các số từ 0 đến 20, payload thứ hai là gồm các kí tự thường, in hoa với số.

* Kết quả trả về thì ta được trường `username`.

* Tăng vị trí từ 1 lên 2. Sau khi tấn công chúng ta được trường `password`.

* Tăng vị trí lên 3. Sau khi tấn công, chúng ta được một trường mới là `pwResetTkn`. Đây có thể là trường chứa token reset password.

* Ta thêm trường này vào request `GET /forgot-password`, cho giá trị là tùy ý. Sau khi gửi chúng ta sẽ nhận được response là "Invalid token", vậy đúng là trường chứa token reset pasword.

* Giờ chúng ta sẽ phải đi tìm token đó, sử dụng payload `"$where":"this.pwResetTkn.match('^.{$$}$$.*')"`, payload đầu tiên là các số từ 0 đến 20, payload thứ hai là gồm các kí tự thường, in hoa với số.

* Sau khi tấn công, chúng ta đã tìm được token gồm 16 kí tự.

* Thay token vừa tìm được vào request `GET /forgot-password?pwResetTkn=...` và gửi. Chúng ta đã nhận được response chứa form đổi password.

* Đổi password và login vào user `carlos`. Hoàn thành bài lab.
