Apa itu SQL Injection (SQLi)?
SQL Injection (SQLi) adalah kerentanan keamanan web yang memungkinkan penyerang mengganggu kueri yang dibuat oleh aplikasi ke database. Kerentanan ini memungkinkan penyerang untuk:
- Mengakses data yang seharusnya tidak dapat diakses, seperti informasi pengguna lain atau data sensitif lainnya.
- Memodifikasi atau menghapus data, yang dapat mengubah perilaku aplikasi secara permanen.
- Dalam beberapa kasus, mengkompromikan server atau infrastruktur back-end lainnya.
SQL injection (SQLi) merupakan teknik serangan siber yang mengeksploitasi kerentanan dalam aplikasi web untuk memanipulasi database di baliknya. Penyerang menyisipkan kode SQL berbahaya ke dalam input yang diterima aplikasi, yang kemudian dieksekusi oleh database.
Bagaimana SQL Injection Bekerja?
Bayangkan sebuah aplikasi web dengan formulir login. Formulir ini meminta pengguna memasukkan username dan password. Normalnya, aplikasi akan mengambil input tersebut dan menggunakannya dalam query SQL untuk memeriksa kecocokan data di database.
Misalnya, query SQL yang normal akan terlihat seperti ini:
SELECT * FROM users WHERE username = ‘username_input’ AND password = ‘password_input’
Jika penyerang memasukkan kode SQL berbahaya ke dalam kolom username, seperti:
‘ OR ‘1’=’1
Maka query SQL yang dieksekusi akan menjadi:
SELECT * FROM users WHERE username = ” OR ‘1’=’1′ AND password = ‘password_input’
Karena kondisi ‘1’=’1′ selalu benar, query ini akan mengembalikan semua data user tanpa memeriksa password, memberikan akses ilegal kepada penyerang.
Risiko SQL Injection:
- Pencurian data: Penyerang dapat mengakses data sensitif seperti username, password, informasi kartu kredit, dan data pribadi lainnya.
- Modifikasi data: Penyerang dapat mengubah atau menghapus data penting, merusak integritas dan fungsi aplikasi.
- Pengambilalihan akun: Penyerang dapat mengambil alih akun pengguna dan melakukan tindakan atas nama mereka.
- Akses ke sistem: Dalam kasus yang parah, penyerang dapat memperoleh akses ke server yang mendasari database dan seluruh infrastruktur sistem.
- Kerugian reputasi: Serangan SQL injection yang berhasil dapat merusak reputasi perusahaan dan kepercayaan pengguna.
Contoh Kasus Nyata:
Banyak kasus pelanggaran data besar terjadi akibat SQL injection, seperti kasus pembobolan data Sony PlayStation Network di tahun 2011 yang mengakibatkan kebocoran data 77 juta pengguna.
Dampak dari Serangan SQL Injection yang Berhasil
Jika berhasil, SQL Injection dapat menyebabkan:
- Akses tidak sah ke data sensitif seperti:
- Password
- Detail kartu kredit
- Informasi pribadi pengguna
- Kerusakan reputasi dan denda regulasi akibat pelanggaran data.
- Pembukaan backdoor yang memungkinkan kompromi sistem dalam jangka panjang.
Cara Mendeteksi Kerentanan SQL Injection
Kerentanan SQL Injection dapat dideteksi secara manual melalui:
- Menggunakan karakter kutip tunggal (‘) dan mencari pesan kesalahan atau anomali.
- Menyisipkan sintaks SQL seperti OR 1=1 atau OR 1=2 untuk melihat perbedaan dalam respons aplikasi.
- Menggunakan payload untuk memicu keterlambatan waktu (time delay) atau interaksi jaringan out-of-band.
Pendekatan yang lebih cepat dan andal dapat dilakukan menggunakan alat otomatis seperti Burp Scanner.
Lokasi SQL Injection dalam Kueri
Kerentanan SQL Injection sering terjadi di:
- Klausul WHERE dari kueri SELECT.
- Pernyataan UPDATE, baik di nilai yang diperbarui maupun klausul WHERE.
- Pernyataan INSERT, dalam nilai yang disisipkan.
- Klausul ORDER BY pada kueri SELECT.
Contoh SQL Injection
- Mengakses Data Tersembunyi – URL yang digunakan:
https://insecure-website.com/products?category=Gifts
– Kueri SQL:
SELECT * FROM products WHERE category = ‘Gifts’ AND released = 1;
– Serangan:
https://insecure-website.com/products?category=Gifts’–
– Hasil: Semua produk ditampilkan, termasuk yang belum dirilis.
Mengubah Logika Aplikasi – Serangan untuk melewati login:
Username: administrator’–
- Password: (kosong)
– Kueri SQL:
SELECT * FROM users WHERE username = ‘administrator’–‘ AND password = ”;
– Hasil: Login berhasil tanpa memerlukan password. - UNION Attack – Contoh serangan:
‘ UNION SELECT username, password FROM users–
– Hasil: Data pengguna (username dan password) ditampilkan bersama data produk. - Blind SQL Injection Teknik ini digunakan saat hasil kueri tidak ditampilkan langsung. Metode eksploitasi meliputi:
- Memicu perbedaan respons aplikasi berdasarkan kondisi Boolean.
- Menggunakan keterlambatan waktu untuk menginferensi kondisi tertentu.
- Memanfaatkan interaksi jaringan out-of-band untuk mendapatkan data.
Cara Mencegah SQL Injection
Menggunakan Parameterized Query (Prepared Statements) Contoh:
PreparedStatement statement = connection.prepareStatement(“SELECT * FROM products WHERE category = ?”);
statement.setString(1, input);
- ResultSet resultSet = statement.executeQuery();
Pendekatan ini memastikan input pengguna tidak dapat mengubah struktur kueri. - Whitelist Input
- Batasi nilai yang diterima untuk bagian kueri seperti nama tabel, kolom, atau klausul ORDER BY.
- Hindari String Concatenation Jangan gunakan concatenation untuk menyisipkan data pengguna ke dalam kueri SQL.
- Validasi dan Sanitasi Input Terapkan validasi yang ketat untuk semua data yang diterima dari pengguna.
Kesimpulan
SQL Injection adalah ancaman serius bagi keamanan web. Dengan memahami cara kerja dan dampaknya, kita dapat mengambil langkah-langkah untuk mencegahnya melalui pengkodean yang aman, penggunaan alat deteksi, dan pelatihan keamanan yang berkelanjutan. Praktik terbaik seperti penggunaan parameterized query harus selalu menjadi prioritas dalam pengembangan aplikasi.
Untuk latihan praktis dalam mendeteksi dan mengeksploitasi SQL Injection, kunjungi lab berikut: SQL Injection Labs: https://tryhackme.com/r/room/sqlilab
Baca juga: Studi Kasus: Pelanggaran Data Sony PlayStation Network (PSN) 2011 Akibat SQL Injection















Comments are closed