Selasa, 28 Desember 2010

PENGENALAN SQL INJECTION

SQL injection adalah sebuah aksi hacking yang dilakukan di aplikasi client dengan cara memodifikasi perintah SQL yang ada di memori aplikasi client. teknik ini memungkinkan kita masuk ke suatu system yang terproteksi sebagai siapa saja dengan hanya mengetahui username tanpa harus mengetahui passwordnya bahkan kita juga bisa login tanpa perlu mengetahui username dan password sama sekali. SQL Injection ini merupakan teknik mengeksploitasi web aplikasi yang didalamnya menggunakan database untuk penyimpanan data. Beberapa sebab mencuatnya SQL injection adalah Tidak adanya penanganan terhadap karakter–karakter tanda petik satu ’ dan juga karakter double minus -- yang menyebabkan suatu aplikasi dapat disisipi dengan perintah SQL. Sehingga seorang Hacker menyisipkan perintah SQL kedalam suatu parameter maupun suatu form.
Beberapa bahaya dari SQL injection adalah Teknik ini memungkinkan seseorang dapat login kedalam sistem tanpa harus memiliki account. Selain itu SQL injection juga memungkinkan seseorang merubah, menghapus, maupun menambahkan data–data yang berada didalam database. Bahkan yang lebih berbahaya lagi yaitu mematikan database itu sendiri, sehingga tidak bisa memberi layanan kepada web server.
Beberapa yang penting diperhatikan dalam proses SQL injection adalah computer yang tersambung dengan internet. Perhatian! Harap hati-hati karena log.file-nya tercatat maka sebaiknya tidak memakai IP pribadi jika menggunakan speedy atau ISP yang sifatnya tetap. Dan bisa menggunakan bantuan software Softice.
SoftIce adalah debugger under Windows 95/NT. Apa itu Debugger ? Debugging adalah proses untuk melihat apakah suatu program berjalan dengan baik. Debugger adalah subjeknya, dalam hal ini alatnya. Debugging disini melibatkan kode kode assembly. Setelah menginstall SI, kita dapat menekan CTRL-D di dalam Windows 95 untuk masuk ke layar softice.
Beberapa contoh sintax SQL injection:
  1. $SQL = “select * from login where username =’$username’ and password = ‘$password’”; , {dari GET atau POST variable }
  2. isikan password dengan string ’ or ’’ = ’
  3. hasilnya maka SQL akan seperti ini = “select   * from login where username = ’$username’ and password=’pass’ or ‘=′”; , { dengan SQL ini hasil selection akan selalu TRUE }
  4. maka kita bisa inject sintax SQL (dalam hal ini OR) kedalam SQL

Diilustrasikan PLN wilayah Kalimantan Timur mempunyai situs dengan nama www.pln-wilkatim.co.id , untuk   mengelola situs ini administrator membuat halaman web untuk atifitas update semua halaman web sehingga bisa dikelola darimanapun dan kapanpun , halaman web tersebut tersimpan di www.pln-wilkaltim.ac.id/admin.asp , untuk mengamankan halaman2 yang dikhususkan untuk web administrator ini , web admin membuat halaman web yang terproteksi yang berfungsi sebagai pintu masuk ke halama2 berikutnya ,sehingga setiap user yang akan masuk ke halaman halaman yang terproteksi harus memasukan username dan password mereka , daftar password dan user tersebut tersimpan dalam sql server dengan nama table admin dengan field field diantaranya username dan password. Statement sql bukanlah bahasa pemrograman seperti pascal,Delphi atau visual basic , statemen sql biasanya digunakan bersama sama dengan bahasa pemrograman lain pada saat mengakses database , pada ilustrasi diatas , untuk mencocokan user yang login , maka digunakan statemen sql yang kurang lebih sebagai berikut

Select * from admin where username = input_username
And password = input_password

Sebagai contoh apabila penulis sebagai administrator dengan username = administrator dan password = admin bermaksud login maka sql statemennya sebagai berikut

Select * from admin where username = ‘administrator’ and
Password = ‘admin’

Dapat dipastikan bahwa apabila field username terdapat record administrator dengan filed password terdapat admin penulis dapat melewati proteksi dan masuk kehalaman berikutnya ,akan tetapi apabila sebaliknya ,maka akan keluar pesan kesalahan yang kurang lebih isinya kita tidak bisa masuk ke halaman berikutnya , lalu bagaimana kalau penulis memasukan input ‘ or ‘’=’ pada username dan password , perhatikan perubahan statemen sql berikut ini

Select * from admin where username = ‘’ or ‘’ = ‘’ and
Password = ‘’ or ‘’=’’

Logika OR menyebabkan statement membalikan nilai false jadi true sehingga kita bisa masuk sebagai user yang terdapat pada record pertama dalam table admin ( record pertama biasanya administrator) , dan bagaimana kalo kita hanya mengetahui username saja tapi passwordnya tidak , misalkan username = administrator , caranya cukup sederhana , pada text box tempat menginput username isi dengan “administrator’—“ sedangkan pada textbox password boleh diisi sembarang misalkan ‘ or ‘’=’ maka statement sql akan berubah menjadi

Select * from admin where username = ‘ administrator ‘—“
And password = ‘’ or ‘’=’’

Tanda “—“ (dua tanda minus) di sql server berarti akhir dari statement sql sehingga perintah dibelakannya tidak dieksekusi lagi.Untuk web admin, bagaimana cara mencegahnya? Batasi panjang input box (jika memungkinkan), dengan cara membatasinya di kode program, jadi si cracker pemula akan bingung sejenak melihat input box nya gak bisa diinject dengan perintah yang panjang. Filter input yang dimasukkan oleh user, terutama penggunaan tanda kutip tunggal (Input Validation). Matikan atau sembunyikan pesan-pesan error yang keluar dari SQL Server yang berjalan. Matikan fasilitas-fasilitas standar seperti Stored Procedures, Extended Stored Procedures jika memungkinkan. Ubah "Startup and run SQL Server" menggunakan low privilege user di SQL Server Security tab. Umumnya versi MYSQL yang bisa dilakukan SQL injection adalah MYSQL dibawah versi5.

Tidak ada komentar:

Posting Komentar