SQL injection UNION attack, retrieving data from other tables
Link: https://portswigger.net/web-security/sql-injection/union-attacks/lab-retrieve-data-from-other-tables
Last updated
Link: https://portswigger.net/web-security/sql-injection/union-attacks/lab-retrieve-data-from-other-tables
Last updated
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. To construct such an attack, you need to combine some of the techniques you learned in previous labs.
The database contains a different table called users
, with columns called username
and password
.
To solve the lab, perform a SQL injection UNION attack that retrieves all usernames and passwords, and use the information to log in as the administrator
user.
Proof of concept:
Lakukan analisa pada fitur-fitur yang tersedia pada target
Dari hasil analisa didapati bahwa ketika memilih category
akan memanggil endpoint filter
dan terdapat parameter category
didalamnya. Inputkan karaker single-quote (’)
untuk mengidentifikasi kerentanan SQL Injection
Ketika diinputkan karakter single-quote (’)
maka response yang diberikan akan error, itu merupakan indikasi awal bahwa parameter category tersebut rentan terhadap SQL Injection. Untuk lebih memastikannya lagi, inputkan payload ‘OR ‘1’=’1—
atau ‘OR ‘1’=’1#
yang telah dilakukan URL encode. Jika response yang diberikan 200 OK, maka artinya sistem mengeksekusi query SQL yang diinputkan tersebut
Dari hasil enumerasi awal, disimpulkan bahwa parameter category
pada endpoint filter
rentan terhadap SQL Injection. Langkah selanjutnya adalah gunakan payload ini 'UNION SELECT '1','2'—
untuk memastikan bahwa teknik SQL injection yang digunakan dapat menggunakan Union Based
Selanjutnya gunakan payload 'UNION SELECT '1',table_name FROM information_schema.tables—
untuk mengekstrak daftar table yang tersedia pada database target
Dari hasil langkah sebelumnya, didapati bahwa terdapat tabel users. Langkah selanjutnya adalah melakukan ekstrak isi dari tabel tersebut. Namun untuk dapat mengekstrak data pada tabel users
, kita harus mengetahui daftar nama column yang ada pada tabel users
. Untuk dapat mengetahuinya, dapat menggunakan payload berikut 'UNION SELECT '1',column_name FROM information_schema.columns WHERE table_name='users'—
Dari langkah sebelumnya didapati bahwa pada tabel users
terdapat column data email, username dan password
. Maka selanjutnya adalah melakukan ekstrak data username dan password
pada tabel users
tersebut. Untuk dapat melakukannya, dapat menggunakan perintah/payload seperti berikut ini 'UNION SELECT username, password FROM users—
Berhasil mengakses akun administrator dari hasil ekstrak database target memanfaatkan kerentanan SQL Injection
Selain secara manual, SQL Injection ini memungkinkan dilakukan secara otomatis menggunakan tools SQLMap atau ghauri seperti yang dapat dilihat pada gambar dibawah ini.
Perintah basic SQLMap : sqlmap -u ‘<<Affected URL>>’ —dbs
Perintah basic Ghauri : gharui -u ‘<<Affected URL>>’ —db
Thanks, Stay Ethical & Happy Hacking! 🍻