Exploiting NoSQL injection to extract data

Link: https://portswigger.net/web-security/nosql-injection/lab-nosql-injection-extract-data

Description:

The user lookup functionality for this lab is powered by a MongoDB NoSQL database. It is vulnerable to NoSQL injection.

To solve the lab, extract the password for the administrator user, then log in to their account.

You can log in to your own account using the following credentials: wiener:peter.

Proof of concept:

  1. Analisa web target menggunakan akun testing

  2. Terlihat ketika mengakses halaman my-account akan mengambil data dari endpoint /user/lookup?user=<>

  3. Ubah data username menjadi username milik pengguna lain, sebagai contoh disini melihat data account milik akun administrator

  4. Jelas, disini aplikasi rentan terhadap IDOR. Lalu kombinasikan kerentanan IDOR ini dengan NoSQL Injection. Injeksikan payload administrator' && this.password.length < 8 || 'a'=='b untuk mentahui panjang dari password milik akun administrator

  5. Ketika menginputkan payload diatas, response yang diberikan false dengan ditandai tidak tampilnya data milik akun administrator. Namun ketika menginputkan payload administrator' && this.password.length < 9 || 'a'=='b , data milik akun administrator muncul yang artinya nilai tersebut true atau yang artinya password milik akun administrator berjumlah 8 karaketer

  6. Langkah selanjutnya adalah menebak password milik akun administrator dengan teknik boolean dengan menggunakan payload administrator' && this.password[0]=='a. Jika tidak tampil data administrator artinya false jika tampil data administrator artinya true. Contohnya ketika menginputkan payload diatas tidak menampilkan data administrator yang artinya karakter pertama dari password admin bukan huruf A

  7. Namun ketika administrator' && this.password[0]=='x payload tersebut diinputkan maka bernilai true dengan ditandai tampilnya data akun administrator. Yang artinya huruf pertama dari password administrator adalah huruf X

  8. Langkah selanjutnya adalah menggunakan payload yang sama dengan array yang berbeda. administrator' && this.password[1]=='a-z. Lakukan hal yang sama sampai mendapatkan 8 huruf password akun administrator

  9. Hingga didapati 8 huruf password akun administrator dan lakukan login menggunakan credentials tersebut untuk menyelesaikan tangtangan lab ini

Thanks, Stay Ethical & Happy Hacking! 🍻

Last updated