Tutorial Injeksi SQL: Cara Belajar dengan Contoh

Apa itu Injeksi SQL?

SQL Injection adalah serangan yang meracuni pernyataan SQL dinamis 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.

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.

SQL Injection

Bagaimana Serangan Injeksi SQL Bekerja?

Jenis serangan yang dapat dilakukan menggunakan injeksi SQL bervariasi tergantung pada jenis mesin database. 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.

Contoh Injeksi SQL

Mari kita pertimbangkan aplikasi web sederhana dengan formulir login. Kode untuk formulir 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>

SINI,

  • Formulir di atas menerima alamat email dan kata sandi lalu mengirimkannya ke PHP file bernama indeks.php.
  • Ia memiliki opsi untuk menyimpan sesi login dalam sebuah cookie. Kami telah menyimpulkan hal ini dari kotak centang remember_me. Ia menggunakan metode post untuk mengirimkan data. Ini berarti nilai-nilai tersebut tidak ditampilkan dalam URL.

Misalkan pernyataan di backend untuk memeriksa ID pengguna adalah sebagai berikut

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

SINI,

  • Pernyataan di atas menggunakan nilai-nilai $_POST[] array secara langsung tanpa membersihkannya.
  • Kata sandi dienkripsi menggunakan algoritma MD5.

Kami akan mengilustrasikan serangan injeksi SQL menggunakan sqlfiddle. Buka URL-nya http://sqlfiddle.com/ di peramban web Anda. Anda akan melihat jendela berikut.

Catatan: Anda harus menulis pernyataan SQL

Injeksi SQL Berfungsi

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

Injeksi SQL Berfungsi

Misalkan persediaan pengguna 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 memberi komentar pada bagian kata sandi dan menambahkan kondisi yang akan selalu benar. Misalkan penyerang memberikan masukan berikut di kolom alamat email.

xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ]

xxx untuk kata sandinya.

Pernyataan dinamis yang dihasilkan adalah sebagai berikut.

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

SINI,

  • xxx@xxx.xxx diakhiri dengan kutipan 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 tempelkan SQL FiddleJalankan kotak teks SQL seperti yang ditunjukkan di bawah ini

Injeksi SQL Berfungsi

Aktivitas Peretasan: SQL Menyuntikkan Aplikasi Web

Kami memiliki aplikasi web sederhana di http://www.techpanda.org/ yang rentan terhadap serangan SQL Injection untuk tujuan demonstrasi saja. Kode formulir HTML di atas diambil dari halaman login. Aplikasi ini menyediakan keamanan dasar seperti membersihkan kolom email. Ini berarti kode di atas tidak dapat digunakan untuk melewati proses login.

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

SQL Menyuntikkan Aplikasi Web

Misalkan seorang penyerang memberikan input berikut

  • Langkah 1: Masukkan xxx@xxx.xxx sebagai alamat email
  • Langkah 2: Masukkan xxx') ATAU 1 = 1 — ]

SQL Menyuntikkan Aplikasi Web

  • 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.

SQL Menyuntikkan Aplikasi Web

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 Injeksi SQL Lainnya

Suntikan SQL dapat menimbulkan lebih banyak kerugian daripada hanya meneruskan algoritma login. Beberapa serangan tersebut antara lain

  • Menghapus data
  • Memperbarui data
  • Memasukkan 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.
  • Injeksi SQL berdasarkan cookie
  • Injeksi SQL Berbasis Kesalahan
  • Injeksi SQL Buta

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

Cara Mencegah Serangan SQL Injection

Suatu organisasi dapat mengadopsi kebijakan berikut untuk melindungi dirinya terhadap 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 agar berfungsi dengan membuat pernyataan SQL terlebih dahulu kemudian memperlakukan semua data pengguna yang dikirimkan sebagai parameter. Ini tidak berpengaruh pada sintaksis pernyataan SQL.
  • Ekspresi reguler – ini dapat digunakan untuk mendeteksi kode yang berpotensi berbahaya dan menghapusnya sebelum menjalankan pernyataan SQL.
  • Hak akses pengguna koneksi database – hanya hak akses yang diperlukan yang harus diberikan kepada akun biasa terhubung ke database. Hal ini dapat membantu mengurangi kinerja pernyataan SQL di server.
  • Pesan kesalahan – pesan ini tidak boleh mengungkapkan informasi sensitif dan di mana tepatnya kesalahan terjadi. Pesan kesalahan kustom 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: milikmu program anti-virus 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

Gunakan Havij untuk Injeksi SQL

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 serta menghapus data.
  • Alat injeksi SQL meliputi SQLMap, SQLPing, dan SQLSmack, dll.
  • Kebijakan keamanan yang baik saat menulis pernyataan SQL dapat membantu mengurangi serangan injeksi SQL.