SQL injection attack, listing the database contents on non-Oracle databases
Link: https://portswigger.net/web-security/sql-injection/examining-the-database/lab-listing-database-contents-non-oracle
Last updated
Link: https://portswigger.net/web-security/sql-injection/examining-the-database/lab-listing-database-contents-non-oracle
Last updated
Description:
This lab contains a vulnerability in the product category filter. The results from the query are returned in the application's response so you can use a UNION attack to retrieve data from other tables.
The application has a login function, and the database contains a table that holds usernames and passwords. You need to determine the name of this table and the columns it contains, then retrieve the contents of the table to obtain the username and password of all users.
To solve the lab, log in as the administrator
user.
Proof of concept:
Analisa web target
Pada target terdapat fitur pemilihan kategori barang. Ketika menggunakan fitur sort by category tersebut akan menggunakan parameter category
Lakukan pengecekan SQL Injection pada parameter category
tersebut dengan menginputkan karakter single-quote (’)
. Jika muncul pesan kesahalan, maka parameter tersebut memiliki kemungkinan rentan terhadap SQL Injection
Dari pengecekan tersebut, seperti yang dapat dilihat bahwa muncul pesan kesalahan. Untuk memastikannya, inputkan payload basic ‘OR ‘1’=’1--
. Payload tersebut bernilai true
, maka jika sistem menampilkan data maka dapat dipastikan parameter category tersebut rentan terhadap SQL Injection
Lakukan eksploitasi lanjutan untuk memanfaatkan kerentanan ini. Gunakan payload ‘UNION SELECT NULL--
pada parameter tersebut dengan melakukan URL encode pada payload yang diinputkan
Seperti yang dapat dilihat pada gambar diatas, menunjukan pesan kesalahan dengan ditandai response HTTP code yang diberikan adalah 500 (Internal Server Error)
. Ini terjadi mungkin dikarenakan jumlah column belum sesuai. Maka tambahkan kembali dengan menggunakan payload ‘UNION SELECT NULL, NULL--
Maka tidak ada pesan kesalah, yang artinya terdapat 2 column yang digunakan. Selanjutnya, gunakan payload ‘UNION SELECT NULL, table_name FROM information_schema.tables--
untuk mendapatkan nama-nama table yang terdapat pada database target. Jangan lupa untuk melakukan URL encode pada payload tersebut
Dari tahapan sebelumnya telah didapati informasi bahwa terdapat tabel users_dlnqza
pada database target. Langkah selanjutnya yaitu perlu untuk mengetahui kolom apa saja yang terdapat pada tabel tersebut. Untuk mendapatkan informasi tersebut, dapat menggunakan payload berikut
‘UNION SELECT NULL, column_name FROM information_schema.columns WHERE table_name = ‘users_dlnqza’--
Seperti biasa, untuk melakukan URL encode terlebih dahulu pada payload yang diinputkan
Dari payload sebelumnya telah didapati informasi bahwa pada tabel users_dlnqza
terdapat beberapa kolom diantaranya email
, username_awcalj
dan password_ymkdqd
. Langkah selanjutnya adalah mengambil data username dan password dari pengguna-pengguna yang terdaftar pada web target. Untuk melakukannya, dapat menggunakan payload ‘UNION SELECT username_awcalj, password_ymkdqd FROM users_dlnqza--
. Maka akan ditampilkan data-data username dan password dari pengguna-pengguna yang terdaftar pada database target
Untuk menyelesaikan tangtangan pada lab ini, login kedalam akun administrator menggunakan username dan password yang telah didapatkan pada tahapan sebelumnya
Selain denganc cara manual, SQL Injection ini dapat menggunakan tools otomasi baik menggunakan SQLMap atau Ghauri. Sebagai contoh disini menggunakan tool SQLMap dengan perintah sqlmap -u ‘http://<>?parameter=’ --dbs --level=3 --risk=3
Thanks, Stay Ethical & Happy Hacking! 🍻