Exploiting NoSQL injection to extract data
Link: https://portswigger.net/web-security/nosql-injection/lab-nosql-injection-extract-data
Last updated
Link: https://portswigger.net/web-security/nosql-injection/lab-nosql-injection-extract-data
Last updated
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:
Analisa web target menggunakan akun testing
Terlihat ketika mengakses halaman my-account
akan mengambil data dari endpoint /user/lookup?user=<>
Ubah data username
menjadi username milik pengguna lain
, sebagai contoh disini melihat data account milik akun administrator
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
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
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
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
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
Hingga didapati 8 huruf password akun administrator dan lakukan login menggunakan credentials tersebut untuk menyelesaikan tangtangan lab ini
Thanks, Stay Ethical & Happy Hacking! 🍻