Jun 29, 2024 Sistem Operasi

SQL Injection

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.

Injeksi SQL

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.

SQL Injection sqlfiddle

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

Suntikkan SQL ke Aplikasi Web

Misalkan seorang penyerang memberikan input berikut

  • Langkah 1: Masukkan xxx@xxx.xxx sebagai alamat email
  • Langkah 2: Masukkan xxx’) OR 1 = 1 — ]
Suntikkan SQL ke 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 berikut mengilustrasikan pernyataan yang telah dibuat.

Suntikkan SQL ke Aplikasi Web

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

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

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.

Baca juga:

referensi:

https://www.guru99.com/learn-sql-injection-with-practical-example.html

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *