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:

  1. Analisa web target

  2. Pada target terdapat fitur pemilihan kategori barang. Ketika menggunakan fitur sort by category tersebut akan menggunakan parameter category

  3. 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

  4. 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

  5. Lakukan eksploitasi lanjutan untuk memanfaatkan kerentanan ini. Gunakan payload ‘UNION SELECT NULL-- pada parameter tersebut dengan melakukan URL encode pada payload yang diinputkan

  6. 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--

  7. 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

  8. 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

  9. 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

  10. Untuk menyelesaikan tangtangan pada lab ini, login kedalam akun administrator menggunakan username dan password yang telah didapatkan pada tahapan sebelumnya

  11. 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