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.

  • 💉 Definisi: Injeksi SQL menyisipkan SQL berbahaya ke dalam kueri melalui kolom input yang tidak tervalidasi.
  • 🔓 Dampak: Serangan yang berhasil dapat melewati proses login dan membaca, memodifikasi, atau menghapus data.
  • 🧪 Contoh: Kondisi yang selalu benar ditambah komentar mengubah pemeriksaan login menjadi celah untuk melewati pemeriksaan tersebut.
  • ️ Alat: SQLMap dan jSQL mengotomatiskan deteksi dan eksploitasi parameter yang dapat disuntikkan.
  • 🛡️ Pencegahan: Kueri berparameter, validasi input, dan akun dengan hak akses minimal menutup kesenjangan tersebut.
  • 🤖 Sentuhan modern: Pemindai dan firewall berbasis AI menandai pola injeksi yang terlewatkan oleh tanda tangan tetap.

Tutorial Injeksi SQL

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.

Diagram yang menunjukkan bagaimana serangan SQL injection memanipulasi kueri basis data dinamis.

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.

Empty SQL Fiddle jendela siap untuk skema dan kueri

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.

SQL Fiddle hasil yang menunjukkan catatan pengguna tunggal yang dikembalikan

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 = 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 di... SQL Fiddle Jalankan kotak teks SQL seperti yang ditunjukkan di bawah ini.

SQL Fiddle mengembalikan catatan setelah kondisi yang disuntikkan berjalan

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.

Diagram alur langkah-langkah untuk menyisipkan kolom kata sandi pada formulir login.

Mari kita misalkan seorang penyerang memberikan masukan berikut.

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

Formulir login dengan string injeksi yang dimasukkan di kolom kata sandi.

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

Penjelasan tentang bagaimana pernyataan SQL yang disuntikkan 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:

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.

Jendela utama alat injeksi SQL Havij

Alat di atas dapat digunakan untuk menilai kerentanan suatu situs web atau aplikasi.

Pertanyaan Umum Demo Slot

Hanya dengan izin tertulis dari pemilik situs. Menguji aplikasi yang bukan milik Anda adalah ilegal menurut undang-undang seperti US Computer Fraud and Abuse Act. Cakupan program bug bounty menentukan apa yang diperbolehkan.

Ya. Dalam OWASP Top 10:2025, injeksi berada di peringkat A05, dan pengujian masih menemukan injeksi di hampir setiap aplikasi. Dengan ribuan CVE injeksi SQL baru setiap tahunnya, ini tetap menjadi risiko web utama.

MD5 adalah algoritma hash yang cepat, bukan enkripsi, dan penyerang dapat dengan cepat memecahkannya menggunakan rainbow table dan GPU. Gunakan algoritma yang lambat dan diberi salt seperti bcrypt atau Argon2 untuk kata sandi sebagai gantinya.

Basis data apa pun yang diakses melalui SQL yang dibangun secara dinamis — MySQL, PostgreSQL, Microsoft SQL Server, Oracle, dan SQLiteKelemahannya terletak pada cara aplikasi menggabungkan input pengguna ke dalam kueri, bukan pada mesin basis datanya.

Firewall dan pemindai berbasis AI mempelajari pola lalu lintas normal, kemudian menandai input anomali seperti kondisi atau komentar yang disuntikkan secara real-time. Model pembelajaran mesin menangkap muatan terenkripsi yang tidak terdeteksi oleh tanda tangan tetap.

Asisten AI seperti Kopilot GitHub Saran tersebut dapat menyarankan kueri berparameter dan validasi input, tetapi juga dapat mereproduksi pola yang tidak aman. Perlakukan setiap saran sebagai draf dan pasangkan dengan pemeriksa keamanan (security linter) dan tinjau.

Serangan SQL injection menargetkan basis data dengan menyuntikkan SQL ke dalam kueri sisi server. Serangan cross-site scripting menargetkan pengguna lain dengan menyuntikkan skrip yang berjalan di peramban mereka. Yang satu mengekspos data; yang lain membajak sesi.

ORM (object-relational mapper) membangun kueri dari objek kode dengan parameterisasi secara default, mencegah sebagian besar injeksi SQL. Namun, ini bukan solusi yang sempurna — kueri mentah dan metode yang tidak aman masih memungkinkan terjadinya kebocoran, sehingga validasi tetap penting.

Ringkaslah postingan ini dengan: