Tutorial Injeksi SQL: Belajar dengan Contoh
⚡ Ringkasan Cerdas
SQL injection adalah serangan yang merusak pernyataan SQL dinamis untuk melewati otentikasi atau mengekspos data, dengan mengeksploitasi aplikasi web yang membangun kueri dari input pengguna yang tidak disanitasi. Halaman ini menunjukkan cara kerja serangan dan cara mencegahnya.

Apa itu Injeksi SQL?
SQL Injection adalah serangan yang merusak pernyataan SQL dinamis dengan mengomentari bagian-bagian tertentu dari pernyataan tersebut atau menambahkan kondisi yang akan selalu benar. Serangan ini memanfaatkan kelemahan desain pada aplikasi web yang dirancang dengan buruk untuk mengeksploitasi pernyataan SQL dan mengeksekusi kode SQL berbahaya.
Data adalah salah satu komponen terpenting dalam sistem informasi. Aplikasi web berbasis basis data digunakan oleh organisasi untuk mendapatkan data dari pelanggan. SQL adalah akronim untuk Bahasa Query TerstrukturIni digunakan untuk mengambil dan memanipulasi data dalam basis data.
Bagaimana Cara Kerja Serangan Injeksi SQL?
Jenis serangan yang dapat dilakukan menggunakan injeksi SQL bervariasi tergantung pada jenis mesin basis data. Serangan ini bekerja pada pernyataan SQL dinamis. Pernyataan dinamis adalah pernyataan yang dihasilkan saat runtime menggunakan parameter yang diteruskan dari formulir web atau string kueri URI.
Contoh Injeksi SQL
Mari kita pertimbangkan sebuah 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 suatu sistem. PHP file bernama indeks.php.
- Tersedia opsi untuk menyimpan sesi login dalam cookie. Kami menyimpulkan ini dari kotak centang remember_me. Aplikasi ini menggunakan metode POST untuk mengirimkan data. Ini berarti nilai-nilai tersebut tidak ditampilkan di layar. URL.
Mari kita misalkan pernyataan di bagian 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 dari array $_POST[] secara langsung tanpa membersihkannya terlebih dahulu.
- Kata sandi di-hash menggunakan algoritma MD5.
Kami akan mengilustrasikan serangan injeksi SQL menggunakan SQL Fiddle. Buka URL http://sqlfiddle.com/ di peramban web Anda. Anda akan melihat jendela berikut.
Catatan: Anda harus menulis pernyataan SQL.
Langkah 1) Masukkan kode ini di panel sebelah 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 Buat Skema.
Langkah 3) Masukkan kode ini di panel sebelah kanan.
select * from users;
Langkah 4) Klik Jalankan SQL. Anda akan melihat hasil berikut.
Misalkan seorang pengguna memasukkan admin@admin.sys dan 1234 sebagai kata sandi. Pernyataan yang dieksekusi terhadap basis data adalah:
SELECT * FROM users WHERE email = 'admin@admin.sys' AND password = md5('1234');
Kode di atas dapat dieksploitasi dengan mengomentari bagian kata sandi dan menambahkan kondisi yang akan selalu benar. Mari kita misalkan penyerang memberikan input 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 tanda kutip tunggal yang melengkapi string kutipan.
OR 1 = 1LIMIT 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 di... SQL Fiddle Jalankan kotak teks SQL seperti yang ditunjukkan di bawah ini.
Aktivitas Peretasan: SQL Menyuntikkan Aplikasi Web
Kami memiliki aplikasi web sederhana di http://www.techpanda.org/ Kode tersebut rentan terhadap serangan SQL Injection hanya untuk tujuan demonstrasi. 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 mengatasi hal itu, kita memanfaatkan celah pada kolom kata sandi. Diagram di bawah ini menunjukkan langkah-langkah yang harus diikuti.
Mari kita 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 akan seperti berikut.
SELECT * FROM users WHERE email = 'xxx@xxx.xxx' AND password = md5('xxx') OR 1 = 1 -- ]');
Diagram di bawah ini menggambarkan bagaimana pernyataan tersebut dihasilkan.
SINI,
- Pernyataan tersebut secara cerdas mengasumsikan bahwa enkripsi md5 digunakan.
- Melengkapi tanda kutip tunggal dan tanda kurung tutup.
- Menambahkan suatu kondisi pada pernyataan yang akan selalu benar.
Secara umum, serangan yang berhasil menggabungkan beberapa teknik seperti yang ditunjukkan di atas.
Jenis Serangan Injeksi SQL Lainnya
Serangan SQL Injection dapat menimbulkan kerusakan yang lebih besar daripada sekadar melewati algoritma login. Beberapa serangan tersebut meliputi:
- 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 bukanlah daftar lengkap; ini hanya memberikan gambaran tentang apa yang dapat dilakukan oleh SQL Injection.
Alat Otomatisasi untuk Injeksi SQL
Pada contoh di atas, kami menggunakan teknik serangan manual berdasarkan pengetahuan SQL kami yang luas. Terdapat alat otomatis yang dapat membantu Anda melakukan serangan dengan lebih efisien dan dalam waktu sesingkat mungkin. Alat-alat tersebut meliputi:
- Peta SQL – http://sqlmap.org/
- Injeksi jSQL – https://www.kali.org/tools/jsql/
Cara Mencegah Serangan Injeksi SQL
Suatu organisasi dapat mengadopsi kebijakan berikut untuk melindungi dirinya terhadap serangan SQL Injection.
- Input pengguna tidak boleh dipercaya sama sekali. – Data tersebut harus selalu dibersihkan (sanitasi) sebelum digunakan dalam pernyataan SQL dinamis.
- Prosedur tersimpan – ini dapat merangkum pernyataan SQL dan memperlakukan semua input sebagai parameter.
- Pernyataan yang disiapkan – Prepared statements bekerja dengan membuat pernyataan SQL terlebih dahulu, kemudian memperlakukan semua data pengguna yang dikirimkan sebagai parameter. Hal ini tidak berpengaruh pada sintaks pernyataan SQL.
- Ekspresi reguler – ini dapat digunakan untuk mendeteksi kode yang berpotensi berbahaya dan menghapusnya sebelum mengeksekusi pernyataan SQL.
- Hak akses pengguna koneksi basis data – hanya hak akses yang diperlukan yang boleh diberikan kepada akun yang digunakan untuk terhubung ke database. Hal ini dapat membantu mengurangi kinerja pernyataan SQL di server.
- Pesan kesalahan – Pesan kesalahan ini tidak boleh mengungkapkan informasi sensitif atau lokasi pasti terjadinya kesalahan. Pesan kesalahan khusus yang sederhana seperti “Maaf, kami mengalami kesalahan teknis. Tim teknis telah dihubungi. Silakan coba lagi nanti” dapat digunakan sebagai pengganti menampilkan pernyataan SQL yang menyebabkan kesalahan.
Aktivitas Peretasan: Gunakan Havij untuk SQL Injection
Dalam skenario praktis ini, kita menggunakan program Havij Advanced SQL Injection untuk memindai situs web guna mencari kerentanan.
Catatan: Havij adalah situs web lama yang tidak terawat. Windows Alat — SQLMap di atas adalah standar sumber terbuka saat ini.
Catatan: program antivirus Anda mungkin akan menandainya sebagai konten berbahaya karena sifatnya. Anda harus menambahkannya ke daftar pengecualian atau menonaktifkan sementara program antivirus Anda. program anti-virus.
Gambar di bawah ini menunjukkan jendela utama untuk Havij.
Alat di atas dapat digunakan untuk menilai kerentanan suatu situs web atau aplikasi.








