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
category
tersebut dengan menginputkan karaktersingle-quote (’)
. Jika muncul pesan kesahalan, maka parameter tersebut memiliki kemungkinan rentan terhadap SQL InjectionDari 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 InjectionLakukan eksploitasi lanjutan untuk memanfaatkan kerentanan ini. Gunakan payload
‘UNION SELECT NULL--
pada parameter tersebut dengan melakukan URL encode pada payload yang diinputkanSeperti 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 tersebutDari 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 diantaranyaemail
,username_awcalj
danpassword_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 targetUntuk 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