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:
Analisa web target menggunakan akun testing
Terlihat ketika mengakses halaman
my-account
akan mengambil data dari endpoint/user/lookup?user=<>
Ubah data
username
menjadiusername milik pengguna lain
, sebagai contoh disini melihat data account milik akunadministrator
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 administratorKetika menginputkan payload diatas, response yang diberikan
false
dengan ditandai tidak tampilnya data milik akunadministrator
. Namun ketika menginputkan payloadadministrator' && this.password.length < 9 || 'a'=='b
, data milik akunadministrator
muncul yang artinya nilai tersebuttrue
atau yang artinya password milik akun administrator berjumlah8 karaketer
Langkah selanjutnya adalah menebak password milik akun
administrator
dengan teknikboolean
dengan menggunakan payloadadministrator' && this.password[0]=='a
. Jika tidak tampil dataadministrator
artinyafalse
jika tampil dataadministrator
artinyatrue
. Contohnya ketika menginputkan payload diatas tidak menampilkan dataadministrator
yang artinya karakter pertama dari password admin bukan huruf ANamun ketika
administrator' && this.password[0]=='x
payload tersebut diinputkan maka bernilaitrue
dengan ditandai tampilnya data akunadministrator
. Yang artinya huruf pertama dari password administrator adalah hurufX
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 administratorHingga didapati 8 huruf password akun administrator dan lakukan login menggunakan credentials tersebut untuk menyelesaikan tangtangan lab ini
Thanks, Stay Ethical & Happy Hacking! 🍻
Last updated