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
Description:
This lab contains a SQL injection 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
categorytersebut dengan menginputkan karaktersingle-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 bernilaitrue, 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_dlnqzapada 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_dlnqzaterdapat beberapa kolom diantaranyaemail,username_awcaljdanpassword_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! 🍻
Last updated