Mudah belajar SQL Injection



Mudah belajar SQL InjectionSQL injection menggunakan kelemahan atau vulnerability pada validasi input sebuah halaman website. Website yang terhubung ke database, terkadang tanpa sadar memperbolehkan user untuk mengakses sql query melalui web tersebut. Hal ini bisa membuat user yang tidak berkepentingan untuk mengakses database atau parahnya mengacak-acak database milik kalian
karena web dibangun menggunakan bahasa pemrograman berbasis web, seperti asp, php, html, dll. beberapa bahasa pemrograman website seperti php bisa  otomatis mengolah data yang disediakan untuk user. Pemilihan jenis DBMS pada website haruslah lebih jeli. Karena bisa saja salah satu jenis database mengijinkan low-privilaged-users guna mengakses user password pada database tersebut. Hal ini memungkinkan akan tercurinya akun pengguna yang ada di tabel database.
SQL injection yang dilakukan secara manual dapat dilakukan dengan cara menambahkan comments atau karakter tertentu pada website. Karakter yang ditambahkan bisa dalam bentuk petik tunggal (‘) atau strip (-) dengan comments berupa (/*) atau strip 2 (–). Hasil keluaran SQL injection dapat digunakan sebagai input field SQL. Contoh:
Melakukan sebuah request url menggunakan method GET (atau POST):
http://[alamat website]/login.php?passwd=’ or userid=’ admin’ ;-
Jika request tersebut terdapat kesalahan syntak, maka SQL server akan mengeluarkan sebuah pesan error. Pesan error yang tidak disembunyikan (ditampilkan di website), menyebabkan user tidak berkepentingan dapat memanfaatkan script tersebut untuk mengakses halaman admin.
SQL injection dapat dilakukan dengan menuliskan syntak:
$userid=DB(“select userid from users where password=’$passwd’ and username=$user’”);
Maka hasil code SQL yang diberikan akan seperti berikut:
select userid from user where password=’ ’ or userid=’admin’;–‘ and username =’ ’;
Selain itu, jika hasil sql code password 1=1 akan selalu true:
http://[alamat website]/login.php?passwd=’ or 1=1;–
Syntak tersebut memungkinkan attacker dapat login dengan menyisipkan perintah SQL kedalam form login.php:
select userid from user where password=’ ’ or 1=1;–‘ and username=’ ‘;
pada umumnya programmer website akan menyimpan halaman login admin pada /admin, /admin.asp, /admin/login.asp, /admin-login, dll. Penyimpanan yang gampang ditebak dapat digunakan user tidak berkepentingan mengakses halaman admin. Jika user tersebut mendapatkan kredential login, maka database anda dapat dicuri atau dirubah. Selain itu, apabila syntax SQL bisa dieksekusi melalui website, maka user tidak berkepentingan dapat merubah, menambah, menghapus tabel atau procedure dalam database anda.
SQL injection tidak hanya bertujuan mengakses database pada server anda. SQL injection juga dapat mengakses sistem pada database server. Hal memungkinkan terjadi apabila SQL server mengijinkan eksekusi via database melalui procedure xp_cmdshell, dan menjadikan OS compromise. Bagaimapun juga, SQL injection tergantung pada kreativitas attacker. Apabila attacker dapat menemukan syntak SQL yang tepat, maka banyak informasi dapat diterima oleh attacker.
Cara pencegahan SQL injection:
  1. Validasi user input, sebaiknya melakukan filter input SQL comments dan spesial karakter (‘;:”)
  2. Membatasi panjang input box (jika memungkinkan), dengan cara membatasinya di kode program. Sehingga input box tidak dapat diinjeksi dengan perintah yang panjang.
  3. Menonaktifkan fasilitas-fasilitas standar seperti Stored Procedures, Extended Stored Procedures pada SQL queries.
  4. Membatasi akses database pada website. Sebaiknya SQL query tidak dapat diakses melalui website.
  5. Menonaktifkan atau menyembunyikan pesan error SQL server pada web.
  6. Memonitor log error message SQL server.

Comments

Post a Comment