SQL Injection Tutorial: Belajar dengan Contoh dan Cara Mencegah Serangan SQL Injection

Data merupakan salah satu komponen terpenting dalam sistem informasi. Aplikasi web yang didukung basis data 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 Injeksi SQL?

SQL Injection adalah serangan yang poisons dynamic SQL statements untuk mengomentari bagian tertentu dari pernyataan atau menambahkan kondisi yang akan selalu benar. Ia memanfaatkan kelemahan desain dalam aplikasi web yang dirancang dengan buruk untuk mengeksploitasi pernyataan SQL untuk mengeksekusi kode SQL berbahaya


Daftar Isi:

  • Apa itu Injeksi SQL?
  • Cara Kerja Injeksi SQL
  • Aktivitas PeretasanSQL Inject a Web Application
  • Jenis serangan SQL Injection lainnya
  • Alat Otomatisasi untuk Injeksi SQL
  • Cara Mencegah Serangan SQL Injection
  • Aktivitas Peretasan: Gunakan Havij untuk SQL Injection
  • Ringkasan
Cara Kerja Injeksi SQL

Jenis serangan yang dapat dilakukan menggunakan injeksi SQL bervariasi tergantung pada jenis database engine. Serangan ini bekerja pada pernyataan SQL dinamis. Pernyataan dinamis adalah pernyataan yang dihasilkan saat dijalankan menggunakan parameter kata sandi dari formulir web atau string kueri URI.

Mari kita pertimbangkan aplikasi web sederhana dengan form login. Kode untuk form HTML ditunjukkan di bawah ini.

<form action=‘index.php’ method="post">

<input type="email" name="email" required="required"/>

<input type="password" name="password"/>

<input type="checkbox" name="remember_me" value="Remember me"/>

<input type="submit" value="Submit"/>

</form>

DI SINI,

  • Formulir di atas menerima alamat email, dan kata sandi kemudian mengirimkannya ke file PHP bernama index.php.
  • Ia 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

SELECT * FROM users WHERE email = $_POST[’email’] AND password = md5($_POST[‘password’]);

DI SINI,

  • Pernyataan di atas menggunakan nilai array $_POST[] secara langsung tanpa membersihkannya.
  • Kata sandi dienkripsi menggunakan algoritma MD5.
Kami akan mengilustrasikan 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 ('m@m.com',md5('abc'));

Langkah 2) Klik Bangun Skema 
Langkah 3) Masukkan kode ini di panel kanan

select * from users;

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

Misalkan pengguna menyediakan admin@admin.sys dan 1234 sebagai kata sandi. Pernyataan yang akan dieksekusi terhadap database adalah

SELECT * FROM users WHERE email = ‘admin@admin.sys’ AND password = md5(‘1234’);

Kode di atas dapat dimanfaatkan dengan mengomentari bagian kata sandi dan menambahkan kondisi yang selalu benar. Misalkan seorang penyerang memberikan masukan berikut di bidang alamat email.

xxx@xxx.xxx’ OR 1 = 1 LIMIT 1 — ‘ ] 
xxx for the password.

Pernyataan dinamis yang dihasilkan adalah sebagai berikut

SELECT * FROM users WHERE email = ‘xxx@xxx.xxx’ OR 1 = 1 LIMIT 1 — ‘ ] AND password = md5(‘1234’);

DI SINI,

  • xxx@xxx.xxx diakhiri dengan tanda kutip tunggal yang melengkapi kutipan string
  • OR 1 = 1 LIMIT 1 adalah kondisi yang akan selalu benar dan membatasi hasil yang dikembalikan hanya pada satu record.
  • — ' DAN… adalah komentar SQL yang menghilangkan bagian kata sandi.
Salin pernyataan SQL di atas dan tempel di kotak Teks SQL FiddleRun SQL seperti yang ditunjukkan di bawah ini



Hacking Activity: 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. Artinya kode kita di atas tidak dapat digunakan untuk mem-bypass login.

Untuk menyiasatinya, kita dapat mengeksploitasi kolom kata sandi. Diagram di bawah menunjukkan langkah-langkah yang harus Anda ikuti.


Misalkan seorang penyerang memberikan masukan berikut

  • Langkah 1: Masukkan xxx@xxx.xxx 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

SELECT * FROM users WHERE email = ‘xxx@xxx.xxx’ AND password = md5(‘xxx’) OR 1 = 1 — ]’);

Diagram di bawah ini menggambarkan pernyataan yang telah dihasilkan.


DI SINI,

  • Pernyataan tersebut secara cerdas mengasumsikan enkripsi md5 digunakan
  • Melengkapi kutipan tunggal dan kurung tutup
  • Menambahkan kondisi pada pernyataan yang akan selalu benar
Secara umum, serangan SQL Injection yang sukses mencoba sejumlah teknik berbeda seperti yang ditunjukkan di atas untuk melakukan serangan yang berhasil.

Jenis serangan SQL Injection lainnya

  • Deleting data 
  • Updating data 
  • Inserting data
  • Menjalankan perintah di server yang dapat mengunduh dan menginstal program jahat 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 tidaklah lengkap; itu hanya memberi Anda gambaran tentang apa itu SQL Injection

Alat Otomatisasi untuk Injeksi SQL

Dalam contoh di atas, kami menggunakan teknik serangan manual berdasarkan pengetahuan kami yang luas tentang SQL. Ada alat otomatis yang dapat membantu Anda melakukan serangan dengan lebih efisien dan dalam waktu sesingkat mungkin. Alat-alat tersebut antara lain.

  • SQLMap – http://sqlmap.org/
  • https://tools.kali.org/vulnerability-analysis/jsql
Cara Mencegah Serangan SQL Injection

Sebuah organisasi dapat mengadopsi kebijakan berikut untuk melindungi dirinya dari serangan SQL Injection.

  • User input should never be trusted – Masukan harus selalu dibersihkan sebelum digunakan dalam pernyataan SQL dinamis.
  • Stored procedures – ini dapat merangkum pernyataan SQL dan memperlakukan semua masukan sebagai parameter.
  • Prepared statements –pernyataan yang disiapkan untuk bekerja dengan membuat pernyataan SQL terlebih dahulu kemudian memperlakukan semua data pengguna yang dikirimkan sebagai parameter. Ini tidak berpengaruh pada sintaksis pernyataan SQL.
  • Regular expressions – ini dapat digunakan untuk mendeteksi kode yang berpotensi berbahaya dan menghapusnya sebelum menjalankan pernyataan SQL.
  • Database connection user access rights –hanya hak akses yang diperlukan yang harus diberikan ke akun yang digunakan untuk terhubung ke database. Hal ini dapat membantu mengurangi kinerja pernyataan SQL di server.
  • Error messages – ini tidak boleh mengungkapkan informasi sensitif dan di mana tepatnya kesalahan terjadi. Pesan kesalahan khusus sederhana seperti “Maaf, kami mengalami kesalahan teknis. Tim teknis telah dihubungi. Silakan coba lagi nanti” dapat digunakan sebagai ganti 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 menghentikan sementara perangkat lunak anti-virus Anda.

Gambar di bawah 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 bypass login algorithms, retrieve, insert, and update and delete data.
  • Alat injeksi SQL termasuk SQLMap, SQLPing, dan SQLSmack, dll
  • Kebijakan keamanan yang baik saat menulis pernyataan SQL dapat membantu mengurangi serangan injeksi SQL.




Share on Google Plus

About Muhamad Reza Pahlepi

Howdy, I’m Reza. I’m a supervisor IT Infrastructure living in jakarta. I am a fan of entrepreneurship, technology, networking engineer and web development. I’m also interested in coffee and basketball. You can read my articles with a click on the button above.
    Blogger Comment