Data merupakan salah satu komponen terpenting dari sistem informasi. Aplikasi web yang didukung database digunakan oleh organisasi untuk mendapatkan data dari pelanggan. SQL adalah singkatan dari Structured Query Language. Ini digunakan untuk mengambil dan memanipulasi data dalam database.
Apa itu SQL Injection?
SQL Injection adalah serangan yang meracuni pernyataan SQL dinamis untuk mengomentari bagian tertentu dari pernyataan atau menambahkan kondisi yang akan selalu benar. Ini memanfaatkan kekurangan desain dalam aplikasi web yang dirancang dengan buruk untuk mengeksploitasi pernyataan SQL untuk mengeksekusi kode SQL yang berbahaya.
Dalam tutorial ini, Anda akan mempelajari teknik SQL Injection dan bagaimana Anda dapat melindungi aplikasi web dari serangan tersebut.
- Cara Kerja SQL Injection
- Aktivitas Peretasan: SQL Inject a Web Application
- Jenis serangan SQL Injection lainnya
- Alat Otomasi untuk SQL Injection
- Bagaimana Mencegah Serangan SQL Injection
- Aktivitas Peretasan: Gunakan Havji untuk SQL Injection
Cara Kerja SQL Injection
Jenis serangan yang dapat dilakukan menggunakan injeksi SQL bervariasi tergantung pada jenis mesin database. Serangan tersebut bekerja pada pernyataan SQL dinamis . Pernyataan dinamis adalah pernyataan yang dibuat pada waktu proses menggunakan kata sandi parameter dari formulir web atau string kueri URI.
Mari pertimbangkan aplikasi web sederhana dengan formulir login. Kode untuk formulir HTML ditampilkan di bawah ini.
SINI,
- Formulir di atas menerima alamat email, dan kata sandi kemudian mengirimkannya ke file PHP bernama index.php.
- Ini memiliki opsi untuk menyimpan sesi login dalam cookie. Kami telah menyimpulkan ini dari kotak centang remember_me. Ini menggunakan metode posting untuk mengirimkan data. Ini berarti nilainya tidak ditampilkan di URL.
Misalkan pernyataan di backend untuk memeriksa ID pengguna adalah sebagai berikut
PILIH * DARI pengguna DI MANA email = $ _POST ['email'] DAN kata sandi = md5 ($ _ POST ['kata sandi']);
SINI,
- Pernyataan di atas menggunakan nilai dari array $ _POST [] secara langsung tanpa membersihkannya.
- Kata sandi dienkripsi menggunakan algoritma MD5.
Kami akan menggambarkan serangan injeksi SQL menggunakan sqlfiddle. Buka URL http://sqlfiddle.com/ di browser web Anda. Anda akan mendapatkan jendela berikut.
Catatan: Anda harus menulis pernyataan SQL
Langkah 1) Masukkan kode ini di panel kiri
CREATE TABLE `users` (`id` INT NOT NULL AUTO_INCREMENT,`email` VARCHAR(45) NULL,`password` VARCHAR(45) NULL,PRIMARY KEY (`id`));insert into users (email,password) values ('This email address is being protected from spambots. You need JavaScript enabled to view it.',md5('abc'));
Langkah 2) Klik Build Schema
Langkah 3) Masukkan kode ini di panel kanan
pilih * dari pengguna;
Langkah 4) Klik Jalankan SQL. Anda akan melihat hasil sebagai berikut
Misalkan persediaan pengguna Alamat email ini dilindungi dari robot spam. Anda perlu mengaktifkan JavaScript untuk melihatnya. dan 1234 sebagai sandi. Pernyataan yang akan dieksekusi terhadap database adalah
PILIH * FROM users WHERE email = ' Alamat email ini dilindungi dari robot spam. Anda perlu mengaktifkan JavaScript untuk melihatnya. ' DAN kata sandi = md5 ('1234');
Kode di atas dapat dimanfaatkan dengan mengomentari bagian kata sandi dan menambahkan kondisi yang akan selalu benar. Misalkan seorang penyerang memberikan masukan berikut di bidang alamat email.
Alamat email ini dilindungi dari robot spam. Anda perlu mengaktifkan JavaScript untuk melihatnya. ' ATAU 1 = 1 BATAS 1 - ']
xxx untuk kata sandinya.
Pernyataan dinamis yang dihasilkan adalah sebagai berikut.
PILIH * FROM users WHERE email = ' Alamat email ini dilindungi dari robot spam. Anda perlu mengaktifkan JavaScript untuk melihatnya. ' ATAU 1 = 1 BATAS 1 - '] DAN kata sandi = md5 (' 1234 ');
SINI,
- Alamat email ini dilindungi dari robot spam. Anda perlu mengaktifkan JavaScript untuk melihatnya. diakhiri dengan kutipan tunggal yang melengkapi kutipan string
- ATAU 1 = 1 BATAS 1 adalah kondisi yang akan selalu benar dan membatasi hasil yang dikembalikan hanya untuk satu catatan.
- - 'DAN… adalah komentar SQL yang menghilangkan bagian kata sandi.
Salin pernyataan SQL di atas dan tempelkan di kotak Teks SQL FiddleRun SQL seperti yang ditunjukkan di bawah ini
Aktivitas Peretasan: SQL Inject a Web Application
Kami memiliki aplikasi web sederhana di http://www.techpanda.org/ yang rentan terhadap serangan SQL Injection untuk tujuan demonstrasi saja. Kode form HTML di atas diambil dari halaman login. Aplikasi ini menyediakan keamanan dasar seperti membersihkan bidang email. Ini berarti kode kami di atas tidak dapat digunakan untuk melewati proses masuk.
Untuk mengatasinya, kita dapat memanfaatkan bidang kata sandi. Diagram di bawah menunjukkan langkah-langkah yang harus Anda ikuti
Misalkan penyerang memberikan masukan berikut
- Langkah 1: Masukkan Alamat email ini dilindungi dari robot spam. Anda perlu mengaktifkan JavaScript untuk melihatnya. sebagai alamat email
- Langkah 2: Masukkan xxx ') ATAU 1 = 1 -]
- Klik tombol Kirim
- Anda akan diarahkan ke dasbor
Pernyataan SQL yang dihasilkan adalah sebagai berikut
PILIH * FROM users WHERE email = ' Alamat email ini dilindungi dari robot spam. Anda perlu mengaktifkan JavaScript untuk melihatnya. ' DAN kata sandi = md5 ('xxx') ATAU 1 = 1 -] ');
Diagram di bawah ini menggambarkan pernyataan yang telah dihasilkan.
SINI,
- Pernyataan tersebut dengan cerdas mengasumsikan enkripsi md5 digunakan
- Melengkapi tanda kutip tunggal dan tanda kurung tutup
- Menambahkan kondisi pada pernyataan yang akan selalu benar
Secara umum, serangan SQL Injection yang berhasil mencoba sejumlah teknik berbeda seperti yang ditunjukkan di atas untuk melakukan serangan yang berhasil.
Jenis serangan SQL Injection lainnya
Injeksi SQL dapat melakukan lebih banyak kerusakan daripada hanya dengan meneruskan algoritme masuk. Beberapa serangan termasuk
- Menghapus data
- Memperbarui data
- Memasukkan data
- Menjalankan perintah di server yang dapat mengunduh dan menginstal program berbahaya seperti Trojan
- Mengekspor data berharga seperti detail kartu kredit, email, dan kata sandi ke server jarak jauh penyerang
- Mendapatkan detail login pengguna, dll
Daftar di atas tidak lengkap; itu hanya memberi Anda gambaran tentang apa SQL Injection
Alat Otomasi untuk SQL Injection
Dalam contoh di atas, kami menggunakan teknik serangan manual berdasarkan pengetahuan luas kami tentang SQL. Ada alat otomatis yang dapat membantu Anda melakukan serangan dengan lebih efisien dan dalam waktu sesingkat mungkin. Alat-alat ini termasuk
- SQLSmack - https://securiteam.com/tools/5GP081P75C
- SQLPing 2 - http://www.sqlsecurity.com/downloads/sqlping2.zip?attredirects=0&d=1
- SQLMap - http://sqlmap.org/
Bagaimana Mencegah Serangan SQL Injection
Organisasi dapat mengadopsi kebijakan berikut untuk melindungi dirinya dari serangan SQL Injection.
- Masukan pengguna tidak boleh dipercaya - Itu harus selalu dibersihkan sebelum digunakan dalam pernyataan SQL dinamis.
- Prosedur tersimpan - ini dapat merangkum pernyataan SQL dan memperlakukan semua masukan sebagai parameter.
- Pernyataan yang telah disiapkan - pernyataan yang disiapkan untuk bekerja dengan membuat pernyataan SQL terlebih dahulu, kemudian memperlakukan semua data pengguna yang dikirimkan sebagai parameter. Ini tidak berpengaruh pada sintaks pernyataan SQL.
- Ekspresi reguler - ini dapat digunakan untuk mendeteksi potensi kode berbahaya dan menghapusnya sebelum menjalankan pernyataan SQL.
- Hak akses pengguna koneksi database - hanya hak akses yang diperlukan yang harus diberikan ke akun yang digunakan untuk menyambung ke database. Ini dapat membantu mengurangi apa yang dapat dilakukan pernyataan SQL di server.
- Pesan kesalahan - ini seharusnya tidak mengungkapkan informasi sensitif dan di mana sebenarnya kesalahan terjadi. Pesan kesalahan khusus sederhana seperti "Maaf, kami mengalami kesalahan teknis. Tim teknis telah dihubungi. Silakan coba lagi nanti ”dapat digunakan alih-alih menampilkan pernyataan SQL yang menyebabkan kesalahan.
Aktivitas Peretasan: Gunakan Havij untuk SQL Injection
Dalam skenario praktis ini, kita akan menggunakan program Havij Advanced SQL Injection untuk memindai kerentanan situs web.
Catatan: program anti-virus Anda mungkin menandainya karena sifatnya. Anda harus menambahkannya ke daftar pengecualian atau menjeda perangkat lunak anti-virus Anda.
Gambar di bawah ini menunjukkan jendela utama untuk Havij
Alat di atas dapat digunakan untuk menilai kerentanan situs web / aplikasi.
Ringkasan
- SQL Injection adalah jenis serangan yang mengeksploitasi pernyataan SQL yang buruk
- Injeksi SQL dapat digunakan untuk melewati algoritma login, mengambil, menyisipkan, dan memperbarui dan menghapus data.
- Alat injeksi SQL termasuk SQLMap, SQLPing, dan SQLSmack, dll.
- Kebijakan keamanan yang baik saat menulis pernyataan SQL dapat membantu mengurangi serangan injeksi SQL.