SQL Injection (Injeksi SQL) membahas tentang apa itu injeksi SQL, bagaimana serangan injeksi SQL bekerja, jenis-jenis serangan injeksi SQL, tool otomatis untuk injeksi SQL, dan bagaimana cara mencegah serangan SQL Ijection.
Apa itu Injeksi SQL?
Injeksi SQL adalah serangan yang meracuni pernyataan SQL dinamis untuk mengomentari bagian tertentu dari pernyataan atau menambahkan kondisi yang akan selalu benar. Serangan ini memanfaatkan kelemahan desain dalam aplikasi web yang dirancang dengan buruk untuk mengeksploitasi pernyataan SQL guna mengeksekusi kode SQL yang berbahaya.
Data merupakan salah satu komponen terpenting dari sistem informasi. Aplikasi web yang didukung oleh basis data digunakan oleh organisasi untuk mendapatkan data dari pelanggan. SQL merupakan akronim dari Structured Query Language. Bahasa ini digunakan untuk mengambil dan memanipulasi data dalam basis data.
Bagaimana Serangan Injeksi SQL Bekerja?
Jenis serangan yang dapat dilakukan menggunakan injeksi SQL bervariasi tergantung pada jenis mesin basis data. Serangan tersebut bekerja pada pernyataan SQL yang dinamis . Pernyataan dinamis adalah pernyataan yang dihasilkan pada waktu proses 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="diperlukan"/> <input type="password" name="password"/> <input type="checkbox" name="remember_me" value="Ingat saya"/> <input type="submit" value="Kirim"/> </form>
DI SINI,
- Formulir di atas menerima alamat email dan kata sandi lalu 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-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
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'));
select * from users;
Langkah 2) Klik execute.
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 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');
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 rekaman.- — ‘ AND … 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
Aktivitas Peretasan: SQL Menyuntikkan Aplikasi Web
Kami memiliki aplikasi web sederhana di http://www.techpanda.org/ yang rentan terhadap serangan Injeksi SQL 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 kami di atas tidak dapat digunakan untuk melewati login.
Untuk menyiasatinya, kita dapat mengeksploitasi kolom kata sandi. Diagram di bawah menunjukkan langkah-langkah yang harus Anda ikuti
Misalkan seorang penyerang memberikan input berikut
- Langkah 1: Masukkan xxx@xxx.xxx sebagai alamat email
- Langkah 2: Masukkan xxx’) OR 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 berikut mengilustrasikan pernyataan yang telah dibuat.
DI SINI,
- Pernyataan tersebut secara cerdas mengasumsikan enkripsi md5 digunakan
- Melengkapi tanda kutip tunggal dan tanda kurung tutup
- Menambahkan kondisi pada pernyataan yang akan selalu benar
Secara umum, serangan Injeksi SQL yang berhasil mencoba sejumlah teknik berbeda seperti yang ditunjukkan di atas untuk melaksanakan serangan yang berhasil.
Jenis Serangan Injeksi SQL Lainnya
Injeksi SQL dapat menimbulkan lebih banyak kerusakan daripada hanya dengan melewatkan algoritma login. Beberapa serangan termasuk:
- Menghapus data
- Memperbarui data
- Memasukkan data
- Menjalankan perintah pada 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
- SQL injection based on cookies
- Error Based SQL Injection
- Blind SQL Injection
Daftar di atas tidaklah lengkap; itu hanya memberi Anda gambaran tentang apa itu SQL Injection
Alat Otomasi 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/
- JSQL Injection – https://tools.kali.org/vulnerability-analysis/jsql
Cara Mencegah Serangan SQL Injection
Suatu organisasi dapat mengadopsi kebijakan berikut untuk melindungi dirinya terhadap serangan Injeksi SQL.
- Masukan pengguna tidak boleh dipercaya – Masukan tersebut harus selalu dibersihkan sebelum digunakan dalam pernyataan SQL dinamis.
- Prosedur tersimpan – ini dapat merangkum pernyataan SQL dan memperlakukan semua masukan sebagai parameter.
- Pernyataan yang disiapkan – pernyataan yang disiapkan untuk 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 potensi kode berbahaya dan menghapusnya sebelum menjalankan pernyataan SQL.
- Hak akses pengguna koneksi basis data – hanya hak akses yang diperlukan yang boleh diberikan ke akun yang digunakan untuk terhubung ke basis data . Hal ini dapat membantu mengurangi apa yang dapat dilakukan pernyataan SQL di server.
- Pesan kesalahan – pesan 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 situs web untuk mencari kerentanan.
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 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.
Baca juga:
referensi:
https://www.guru99.com/learn-sql-injection-with-practical-example.html