Penjelasan SQL Injection
Sebuah web biasanya memiliki database di belakangnya. Kebanyakan database tersebut menggunakan bahasa SQL untuk membaca dan mengambil data. Web server menggunakan membuat SQL lalu memberikannya kepada database. Namun, kadang, developer lupa bahwa SQL yang dibuat berpotensi disusupi SQL asing yang jahat.
Apa SQL Injection
SQL Injection adalah salah satu serangan yang dapat digunakan oleh pihak tidak bertanggungjawab untuk mengakses suatu database dengan cara menyisipkan SQL jahat. Jika berhasil, pihak tersebut dapat memiliki akses ke database target, membaca dan menulis data, bahkan menrusak database target.
Menurut OWASP, penyerangan jenis injection ini adalah penyerangan yang sering terjadi di dunia maya dan pada web application. OWASP adalah salah satu organisasi yang bergerak di bidang keamanan digital dan banyak memberikan rekomendasi serta panduan untuk mengamankan website.
Kegunaan SQL Injection
Bagi penyerang, SQL Injection digunakan sebagai salah satu cara untuk mengakses database korban. Di dalam database ini biasanya berisi data-data yang penting. Jika penyerang berhasil masuk ke database dan memiliki akses yang cukup, penyerang dapat mengambil data-data ini.
Data-data ini bisa digunakan untuk di jual kembali di pasar gelap, melakukan blackmailing kepada seseorang, atau kejahatan keuangan seperti carding dan pinjaman online ilegal.
Bagaimana SQL Injection Bekerja
Cara kerja SQL Injection adalah dengan menyisipkan perintah SQL jahat ke dalam suatu SQL yang akan dijalankan oleh suatu database. Cara SQL Injection ini bekerja dalam suatu sistem sangatlah bergantung pada implementasi sistem tersebut. Masing-masing sistem memiliki cara yang mungkin berbeda-beda.
Salah satu contoh cara menggunakan SQL Injection untuk mengetahui cara kerjanya,
Kondisi Sistem
Kamu memiliki suatu website yang dapat melakukan login. SQL paling sederhana untuk melakukan pengecekan apakah username dan passwordnya benar atau salah adalah seperti ini,
SELECT * FROM users WHERE username = "$username" AND password = "$password";
Pengguna akan memasukkan username dan password pada suatu formulir login yang kamu sediakan. Username dan password tersebut akan dijadikan variabel untuk mengisi nilai $username
dan $password
.
Eksploitasi Sistem
Apa yang terjadi jika pengguna jahat memasukkan username yang isinya seperti ini?
admin"; --
Saat sistemmu menggunakan data masukan pengguna jahat tanpa dicek maupun divalidasi, maka SQL yang terbentuk akan seperti ini:
SELECT * FROM users WHERE username = "admin"; -- AND password = "";
Bagian SQL setelah tanda --
dianggap sebagai komentar dan SQL tersebut akan menjadi:
SELECT * FROM users WHERE username = "admin";
Karena SQL yang dijalankan adalah yang bawah tersebut, bisa-bisa pengguna jahat tersebut mendapatkan akses ke user “admin” tanpa perlu tahu password-nya!
Kenapa SQL Injection Bisa Terjadi
Penyerangan ini bisa berhasil biasanya karena dua hal utama yakni developer tidak melakukan validasi input, dan tidak ada pembatasan akses database.
Tidak Melakukan Validasi Input
SQL Injection biasanya terjadi karena developer tidak membersihkan input atau masukan dari pengguna. Sebagai developer yang baik, kita harus selalu curiga terhadap input yang berasal dari pengguna. Kita tidak boleh percaya begitu saja apa yang diberikan oleh pengguna.
Tidak Ada Pembatasan Akses Database
Selain itu, SQL Injection menjadi sangat berbahaya kalau berhasil dilakukan jika developer tidak membatasi akses pada database. Akses suatu user pada database haruslah memiliki akses yang sesedikit mungkin (least privilege rule). Jika website kamu hanya dapat membaca database, maka user yang digunakan untuk mengakses database haruslah hanya memiliki akses baca. Jangan berikan juga akses tulis atau bahkan admin!
SQL Injection Cheat Sheet
Berikut ini beberapa contoh input yang bisa digunakan untuk melakukan SQL Injection. Gunakan Cheat Sheet ini untuk melindungin website buatan kamu, dan bukan untuk melakukan penyerangan!
Comment - Membuat Query Selanjutnya Menjadi Komentar
Metode ini sudah dicontohkan pada contoh di atas. Input yang dimasukkan diakhiri dengan syntax comment sehingga query menjadi terpotong.
Query target:
SELECT * FROM users WHERE username = "$username" AND password = "$password";
Input:
admin";--
Hasil:
SELECT * FROM users WHERE username = "admin";--" AND password = "$password";
Input ini memotong query target dan mengubah makna dari query tersebut.
Stacking Query - Menjalankan Lebih Dari Satu Query
Metode ini memanfaatkan fitur untuk menjalankan lebih dari satu query dalam satu perintah. Input yang dimasukkan diakhiri dengan tanda ;
yang menyatakan query pertama sudah selesai dan ada query selanjutnya.
Query target:
SELECT * FROM users WHERE username = "$username" AND password = "$password";
Input:
"; DROP users;--
Hasil:
SELECT * FROM users WHERE username = ""; DROP users;--" AND password = "$password";
Input ini jika berhasil akan menghapus tabel bernama users
dan dapat merusak keseluruhan sistem.
UNION Injection - Mengambil Data Lebih Banyak
Teknik ini membuat query mengeluarkan data lebih banyak dari yang seharusnya dengan cara mengambilnya dari tabel lain yang bisa jadi tidak berhubungan.
Query target:
SELECT title, content FROM articles WHERE article_id = "$id";
Input:
" UNION ALL SELECT username, password FROM users;--
Hasil:
SELECT title, content FROM articles WHERE article_id = "" UNION ALL SELECT username, password FROM users;--";
Injection bisa berpotensi akan membuat query mengambil data tentang users
dan menampilkan semua username dan password.
Bagikan di
Kolom Diskusi