Apakah Anda seorang pemilik aplikasi atau website? Jika iya, waspadai jenis kejahatan siber bernama SQL injection.
SQL injection menjadi salah satu jenis cyber crime yang banyak dilakukan karena hasil yang efektif dengan cara kerjanya cukup sederhana.
Untuk mengetahui lebih dalam mengenai apa yang dimaksud dengan SQL injection, cara kerja, dan contoh serangannya, simak artikel ini dengan baik.
Apa Itu SQL Injection
SQL injection adalah salah satu metode peretasan yang dilakukan peretas untuk menyalahgunakan celah keamanan pada aplikasi website yang menggunakan SQL.
Dalam hal ini, peretas akan memanfaatkan kerentanan website dengan menginput query SQL yang berbahaya pada halaman login atau URL parameter yang kemudian server akan mengembalikan data dari database sesuai dengan parameter yang diminta.
Ketika permintaan dengan kode berbahaya tersebut dieksekusi oleh database, peretas akhirnya mendapatkan akses data di dalam basis data yang memungkinkannya untuk mengubah maupun menghapus data.
Kejahatan siber yang menyebabkan kebocoran data tersebut tidak lain karena peretas yang menemukan celah pada sistem keamanan aplikasi website yang menggunakan SQL.
Cara Kerja SQL Injection
Pada dasarnya, injeksi pada SQL ini tidak akan berhasil jika sistem aplikasi atau website ini mengaplikasikan filter pada karakter yang diinput dalam form.
Seperti dengan memberlakukan validasi pada input query yang harus menggunakan angka atau huruf dan tidak menerima karakter lainnya (-, ?, *, dll).
Atau dengan membuang karakter yang berpotensi menempatkan aplikasi dalam bahaya seperti ‘1’ = ‘1’ yang bernilai True.
Mulanya, pada form login yang perlu untuk memasukkan username dan password, umumnya akan diisi dengan karakter huruf dan angka.
Namun, seorang peretas yang tidak mengetahui username dan password akan menginput ‘1’ = ‘1’ yang bersifat True pada SQL.
Ketika sistem tidak mengaplikasikan filter yang hanya berlaku pada karakter huruf dan angka, maka karakter lain yang dalam hal ini adalah ‘1’ = ‘1’ akan dianggap benar dan query tersebut pun akan dieksekusi.
Contoh:
# Ketika user menginput myname sebagai username dan 98765 sebagai password.
SELECT * FROM users
WHERE username = ‘myname’ AND password = ‘98765’
Jika username dan password tersebut benar, maka user dapat login,
# Ketika peretas yang memasukkan ‘1’=’1’
SELECT * FROM users
WHERE username = ‘’ OR ‘1’=’1’ AND password = ‘’ OR ‘1’=’1’;
Karena ‘1’ = ‘1’ bernilai benar, peretas dapat login dan menyusup ke dalamnya.
Dalam kondisi inilah peretas berhasil meng-hack sebuah aplikasi website, sehingga dapat mengakses, memodifikasi, dan menghapus data di dalam database.
Data yang dapat diakses mencakup seluruh data dalam basis data yang meliput informasi privasi pengguna, informasi bisnis, data produk, dan informasi penting lainnya yang berisiko pada sebuah instansi pemilik.
Jenis-Jenis SQL Injection
Classic/ In-band SQLi
Jenis SQL injection ini merupakan salah satu yang paling umum digunakan karena kesederhanaan dan efisiensinya.
Dalam hal ini, peretas tipe in-band SQLi akan melancarkan serangan dan menghimpun hasilnya menggunakan kanal komunikasi yang sama.
Metode ini memiliki dua variasi yang meliputi:
Error-based SQLi
Mengacu pada error messages yang didapatkan dari tindakan yang dilakukan peretas. Pesan tersebut memungkinkan attacker menggunakan datanya untuk menghimpun informasi terkait struktur database.
Union-based SQLi
Mengacu pada pemanfaatan operator UNION yang memungkinkan peretas untuk menggabungkan hasil dua query atau lebih yang diberikan database menjadi HTTP tunggal. Data tersebut mungkin dapat dimanfaatkan untuk meretas data lainnya.
Blind/ Inferential SQLi
Blind SQL injection ini tidak akan menerima error message seperti tipe klasik sebelumnya. Hal ini karena jenis ini mengacu pada respons dan tindakan yang akan diberikan oleh server.
Sehingga pada tipe ini, peretas akan mengobservasi dan meninjau tindakan server setelah menginput kode berbahaya pada sistemnya.
Hal ini memungkinkan prosesnya cukup lambat karena hasilnya akan bergantung dengan umpan balik yang diberikan server pada kode yang diinput oleh peretas. Inferential SQLi ini dikelompokkan menjadi dua, yakni:
Boolean
Peretas akan mengirim query SQL ke database untuk mendapatkan hasil atau respons dari aplikasi yang bernilai True atau False.
Setelah hasil didapatkan, maka peretas akan mengidentifikasi apakah terdapat perubahan respons HTTP atau tetap sama sehingga dapat disimpulkan nilai benar atau salahnya, meskipun jika tidak ada data dari basis data yang dikembalikan.
Namun, serangan ini cukup lambat karena attacker perlu mencoba tiap karakternya untuk mendapatkan nilai benar atau salah, terutama pada basis data yang besar.
Baca Juga: Mengenal Tipe Data Boolean, Fungsi, Operator, dan Contohnya
Time-based
Mulanya, peretas akan mengirim query SQL pada database untuk mengirimkan kembali hasilnya dalam waktu respons tertentu (dalam hitungan detik).
Dalam hal inilah peretas dapat mengenali nilai benar atau salah dari waktu respons aplikasi, dimana respons yang membutuhkan waktu lebih lama berarti benar dan respons yang langsung dikembalikan bernilai salah.
Sehingga meskipun tipe ini juga lambat karena perlu menyebutkan karakter demi karakternya, time-based SQL injection ini tidak mengandalkan data dari database untuk mengetahui keberhasilan serangannya.
Out-of-band SQLi
Merupakan tipe yang tidak umum digunakan dan akan diaplikasikan jika boolean, time-based, dan jenis lainnya tidak dapat dideteksi. Seperti ketika tidak adanya error message atau waktu respons aplikasi yang tidak stabil.
Dalam hal ini, out-of-band SQLi memungkinkan peretas untuk meminta database mengirimkan data melalui server eksternal lain seperti DNS atau HTTP request.
Contoh Serangan SQL Injection
Berikut diantara contoh serangan SQL injection adalah:
Pencurian data atau informasi
Dimana peretas akan menyerang secara langsung maupun tidak langsung untuk mendapatkan informasi sensitif di dalam basis data.
Seperti pada pernyataan berikut dimana SQL dilakukan untuk mencari item dengan informasi nama pengguna dan nama item tertentu.
String userName = ctx.getAuthenticatedUserName();
String query = “SELECT * FROM items WHERE owner = “ ‘ “
- userName = “ ‘ AND itemname = ‘ “
- ItemName.Text + “ ‘ “;
Dalam hal ini, query menggunakan concatenation yang menggabungkan username dan itemname, sehingga penyerang yang menyadari celah tersebut akan memberikan string Book’ OR 5=5 untuk itemname.
SELECT * FROM items
WHERE owner = ‘Karina’ AND itemname = ‘Book’ OR 5=5’;
Karena 5=5 selalu bernilai True, maka itemname tersebut akan bernilai benar. Sehingga, query dapat mengembalikan data dari seluruh tabel dan memungkinkan peretas untuk mengakses data sensitif.
Autentikasi sebagai administrator
Dimana penyerang akan menyusup ke dalam aplikasi website dengan akses administrator yang tidak sah, tanpa menginput username maupun password yang benar.
Seperti pada query SQL berikut:
SELECT id FROM users
WHERE username = ‘ “ user + “ ‘ AND password = ‘ “ = pass “ “
Dalam hal ini query SQL menerapkan concatenation untuk menggabungkan data. Sehingga peretas dapat menginput password’ OR 5=5 daripada variable pass tersebut.
Sehingga SQL akan dijalankan menjadi:
SELECT id FROM users
WHERE username = ‘user’ AND password = ‘pass’ OR 5=5
Karena 5=5 selalu bernilai benar, maka pernyataan di atas akan dinilai benar meskipun username dan password itu salah. Lalu, pernyataan tersebut akan kembali pada ID pertama dalam tabel pengguna yang umumnya adalah admin.
Sehingga, peretas berhasil menyerang dan mendapatkan akses tanpa autentikasi dengan akses administratif.
Menginput Statement Berbahaya
Peretas akan menggunakan apostrof (‘) untuk membuat sistem menjadi error. Hal ini akan diterapkan pada form yang memerlukan input nama depan dan nama belakang.
Contoh query SQL yang menerima input dari user:
SELECT id, firstname, lastname FROM authors
WHERE firstname = ‘ “ + firstName = “ ‘ AND lastname = ‘ “ + lastName + “ ‘
Ketika attacker memasukkan input sebagai berikut:
- Nama depan:karina’ex
- Nama belakang:Rachel
Maka query SQL yang dijalankan adalah:
SELECT id, firstname, lastname FROM authors
WHERE firstname = ‘karina’ex’ AND lastname = ‘Rachel’
Input pada nama depan dengan apostrof tersebut akan diidentifikasi sebagai error syntax. Kesalahan tersebut akan memberikan error message yang dapat dimanfaatkan peretas untuk membangun struktur database.
Demikian adalah penjelasan mengenai apa itu SQL injection beserta jenis, cara kerja, dan contoh serangannya yang dapat mengancam keamanan suatu aplikasi website.
Hal ini tentu karena Anda perlu melakukan aksi pencegahan seperti menggunakan dua database, menerapkan batasan pada karakter parameter, dan masih banyak lagi untuk melindungi aplikasi website.
Sekawan Media sebagai perusahaan penyedia jasa pembuatan website, tentu menerapkan tips-tips untuk memastikan situs web yang dihasilkan akan aman dan terhindar dari aksi kejahatan siber. Jika Anda tertarik untuk mencoba membuat website dengan layanan kami, silakan menghubungi kontak Sekawan Media!