Tutorial SQL Suntikan: Belajar dengan Contoh

Isi kandungan:

Anonim

Data adalah salah satu komponen sistem maklumat yang paling penting. Aplikasi web bertenaga pangkalan data digunakan oleh organisasi untuk mendapatkan data dari pelanggan. SQL adalah akronim untuk Bahasa Pertanyaan Berstruktur. Ia digunakan untuk mengambil dan memanipulasi data dalam pangkalan data.

Apakah Suntikan SQL?

SQL Injection adalah serangan yang meracuni pernyataan SQL dinamik untuk memberi komen bahagian tertentu dari pernyataan atau menambahkan keadaan yang akan selalu benar. Ia memanfaatkan kelemahan reka bentuk dalam aplikasi web yang tidak dirancang dengan baik untuk memanfaatkan pernyataan SQL untuk melaksanakan kod SQL yang berniat jahat.

Dalam tutorial ini, anda akan mempelajari teknik SQL Injection dan bagaimana anda dapat melindungi aplikasi web dari serangan tersebut.

  • Bagaimana SQL Injection Berfungsi
  • Aktiviti Peretasan: SQL Suntik Aplikasi Web
  • Jenis serangan SQL Injection yang lain
  • Alat Automasi untuk SQL Suntikan
  • Cara Mencegah Serangan Suntikan SQL
  • Aktiviti Peretasan: Gunakan Havji untuk SQL Injection

Bagaimana SQL Injection Berfungsi

Jenis serangan yang dapat dilakukan menggunakan suntikan SQL berbeza-beza bergantung pada jenis mesin pangkalan data. Serangan itu berfungsi pada pernyataan SQL dinamik . Pernyataan dinamik adalah pernyataan yang dihasilkan pada waktu berjalan menggunakan kata laluan parameter dari borang web atau rentetan pertanyaan URI.

Mari pertimbangkan aplikasi web mudah dengan borang log masuk. Kod untuk borang HTML ditunjukkan di bawah.

DI SINI,

  • Borang di atas menerima alamat e-mel, dan kata laluan kemudian menyerahkannya ke fail PHP bernama index.php.
  • Ini mempunyai pilihan untuk menyimpan sesi log masuk dalam kuki. Kami telah menyimpulkannya dari kotak centang ingat_me. Ia menggunakan kaedah pos untuk menghantar data. Ini bermaksud nilai tidak ditunjukkan dalam URL.

Mari anggap pernyataan di bahagian belakang untuk memeriksa ID pengguna adalah seperti berikut

PILIH * DARI pengguna DI MANA e-mel = $ _POST ['email'] DAN kata laluan = md5 ($ _ POST ['password']);

DI SINI,

  • Penyataan di atas menggunakan nilai array $ _POST [] secara langsung tanpa membersihkannya.
  • Kata laluan dienkripsi menggunakan algoritma MD5.

Kami akan menggambarkan serangan suntikan SQL menggunakan sqlfiddle. Buka URL http://sqlfiddle.com/ di penyemak imbas web anda. Anda akan mendapat tetingkap berikut.

Catatan: anda perlu menulis pernyataan SQL

Langkah 1) Masukkan kod 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 Bina Skema

Langkah 3) Masukkan kod ini di panel kanan

pilih * dari pengguna;

Langkah 4) Klik Jalankan SQL. Anda akan melihat hasil berikut

Misalkan persediaan pengguna Alamat e-mel ini dilindungi dari robot spam. Anda perlu mengaktifkan JavaScript untuk melihatnya. dan 1234 sebagai kata laluan. Pernyataan yang akan dijalankan terhadap pangkalan data adalah

PILIH * DARI pengguna DI MANA e-mel = ' Alamat e-mel ini dilindungi dari robot spam. Anda perlu mengaktifkan JavaScript untuk melihatnya. ' DAN kata laluan = md5 ('1234');

Kod di atas dapat dimanfaatkan dengan mengomentari bahagian kata laluan dan menambahkan syarat yang akan selalu berlaku. Anggaplah penyerang memberikan input berikut di medan alamat e-mel.

Alamat e-mel ini dilindungi dari robot spam. Anda perlu mengaktifkan JavaScript untuk melihatnya. ' ATAU 1 = 1 TERHAD 1 - ']

xxx untuk kata laluan.

Penyataan dinamik yang dihasilkan adalah seperti berikut.

PILIH * DARI pengguna DI MANA e-mel = ' Alamat e-mel ini dilindungi dari robot spam. Anda perlu mengaktifkan JavaScript untuk melihatnya. ' ATAU 1 = 1 TERHAD 1 - '] DAN kata laluan = md5 (' 1234 ');

DI SINI,

  • Alamat e-mel ini dilindungi dari robot spam. Anda perlu mengaktifkan JavaScript untuk melihatnya. diakhiri dengan satu petikan yang melengkapkan petikan rentetan
  • ATAU 1 = 1 TERHAD 1 adalah syarat yang akan selalu berlaku dan menghadkan hasil yang dikembalikan kepada satu rekod sahaja.
  • - 'DAN ... adalah komen SQL yang menghilangkan bahagian kata laluan.

Salin pernyataan SQL di atas dan tampal di kotak Teks SQL FiddleRun seperti ditunjukkan di bawah

Aktiviti Peretasan: SQL Suntik Aplikasi Web

Kami mempunyai aplikasi web sederhana di http://www.techpanda.org/ yang rentan terhadap serangan SQL Injection untuk tujuan demonstrasi sahaja. Kod borang HTML di atas diambil dari halaman log masuk. Aplikasi ini memberikan keselamatan asas seperti membersihkan bidang e-mel. Ini bermaksud kod kami di atas tidak boleh digunakan untuk memotong masuk.

Untuk menyelesaikannya, kita boleh memanfaatkan medan kata laluan. Rajah di bawah menunjukkan langkah-langkah yang mesti anda ikuti

Anggaplah penyerang memberikan input berikut

  • Langkah 1: Masukkan Alamat e-mel ini dilindungi dari robot spam. Anda perlu mengaktifkan JavaScript untuk melihatnya. sebagai alamat e-mel
  • Langkah 2: Masukkan xxx ') ATAU 1 = 1 -]
  • Klik pada butang Hantar
  • Anda akan diarahkan ke papan pemuka

Penyataan SQL yang dihasilkan adalah seperti berikut

PILIH * DARI pengguna DI MANA e-mel = ' Alamat e-mel ini dilindungi dari robot spam. Anda perlu mengaktifkan JavaScript untuk melihatnya. ' DAN kata laluan = md5 ('xxx') ATAU 1 = 1 -] ');

Rajah di bawah menggambarkan pernyataan yang telah dihasilkan.

DI SINI,

  • Penyataan dengan bijak menganggap penyulitan md5 digunakan
  • Melengkapkan tanda kutip tunggal dan tanda kurung penutup
  • Menambah syarat untuk pernyataan yang akan selalu benar

Secara umum, serangan SQL Injection yang berjaya mencuba beberapa teknik yang berbeza seperti yang ditunjukkan di atas untuk melakukan serangan yang berjaya.

Jenis serangan SQL Injection yang lain

SQL Suntikan boleh melakukan lebih banyak bahaya daripada hanya dengan memasukkan algoritma log masuk. Beberapa serangan termasuk

  • Memadamkan data
  • Mengemas kini data
  • Memasukkan data
  • Melaksanakan perintah di pelayan yang boleh memuat turun dan memasang program jahat seperti Trojan
  • Mengeksport data berharga seperti butiran kad kredit, e-mel, dan kata laluan ke pelayan jauh penyerang
  • Mendapatkan maklumat masuk pengguna dll

Senarai di atas tidak lengkap; ia hanya memberi anda idea mengenai SQL Injection

Alat Automasi untuk SQL Suntikan

Dalam contoh di atas, kami menggunakan teknik serangan manual berdasarkan pengetahuan SQL kami yang luas. Terdapat alat automatik yang dapat membantu anda melakukan serangan dengan lebih cekap dan dalam waktu sesingkat mungkin. Alat-alat ini merangkumi

  • SQLSmack - https://securiteam.com/tools/5GP081P75C
  • SQLPing 2 - http://www.sqlsecurity.com/downloads/sqlping2.zip?attredirects=0&d=1
  • Peta SQL - http://sqlmap.org/

Cara Mencegah Serangan Suntikan SQL

Sebuah organisasi boleh menggunakan dasar berikut untuk melindungi dirinya daripada serangan SQL Injection.

  • Input pengguna tidak boleh dipercayai - Ia mesti sentiasa dibersihkan sebelum digunakan dalam pernyataan SQL dinamik.
  • Prosedur yang disimpan - ini dapat merangkumi pernyataan SQL dan menganggap semua input sebagai parameter.
  • Penyataan siap - penyataan yang disiapkan untuk berfungsi dengan membuat pernyataan SQL terlebih dahulu kemudian memperlakukan semua data pengguna yang diserahkan sebagai parameter. Ini tidak mempengaruhi sintaks pernyataan SQL.
  • Ungkapan biasa - ini dapat digunakan untuk mengesan potensi kod berbahaya dan menghapusnya sebelum melaksanakan pernyataan SQL.
  • Hak akses pengguna sambungan pangkalan data - hanya hak akses yang diperlukan yang harus diberikan kepada akaun yang digunakan untuk menyambung ke pangkalan data. Ini dapat membantu mengurangkan prestasi penyataan SQL di pelayan.
  • Mesej ralat - ini tidak boleh mendedahkan maklumat sensitif dan di mana sebenarnya berlaku kesalahan. Mesej ralat tersuai sederhana seperti “Maaf, kami mengalami kesalahan teknikal. Pasukan teknikal telah dihubungi. Cuba lagi nanti ”boleh digunakan dan bukannya memaparkan pernyataan SQL yang menyebabkan kesalahan.

Aktiviti Peretasan: Gunakan Havij untuk SQL Injection

Dalam senario praktikal ini, kita akan menggunakan program Havij Advanced SQL Injection untuk mengimbas laman web untuk kelemahan.

Catatan: program anti-virus anda mungkin menandakannya kerana sifatnya. Anda harus menambahkannya ke senarai pengecualian atau menjeda perisian anti-virus anda.

Gambar di bawah menunjukkan tetingkap utama untuk Havij

Alat di atas boleh digunakan untuk menilai kerentanan laman web / aplikasi.

Ringkasan

  • SQL Injection adalah jenis serangan yang mengeksploitasi pernyataan SQL yang buruk
  • Suntikan SQL dapat digunakan untuk memintas algoritma log masuk, mengambil, memasukkan, dan mengemas kini dan menghapus data.
  • Alat suntikan SQL merangkumi SQLMap, SQLPing, dan SQLSmack, dll.
  • Dasar keselamatan yang baik semasa menulis pernyataan SQL dapat membantu mengurangkan serangan suntikan SQL.