Jumat, 26 November 2010

SQL INJECTION




PENGERTIAN

SQL injection adalah suatu teknik yang dapat dilakukan oleh cracker untuk dapat masuk kedalam system administrator tanpa mengetahui username dan password administrator terlebih dahulu dengan memanfaatkan perintah-perintah SQL yang dimasukkan kedalam database mesin server.

Akan menurut para ahli pengertian dari SQL injection adalah sebagai berikut :

- Menurut Rosihan Ari Yuana

SQL injection merupakan perbuatan orang yang memberikan perintah SQL untuk dijalankan di mesin server SQL tanpa sepengetahuan Anda sebagai administrator. Proses injection biasanya dilakukan orang ketika memasukkan input melalui form dengan perintah atau kode tertentu.

- Menurut Muhammad Ilhamdi Rusydi

SQL injection adalah teknik memanipulasi perintah SQL dengan memasukkan ke database server sehingga dapat dimanfaatkan untuk mendapatkan informasi dan merubah database yang telah ada.

- Menurut Slamet Risnanto

SQL injection merupakan suatu teknik dengan menggunakan perintah SQL yang memungkinkan cracker dapat masuk ke dalam suatu system yang terproteksi tanpa mengetahui username dan password administrator terlebih dahulu.

- Menurut Deris Stiawan

SQL injection adalah suatu metode yang digunakan untuk memanfaatkan kelemahan pada mesin server SQL, misalnya server menjalankan layanan SQL (MySQL, PostgraseSQL, SQL server dan lain-lain). Kemudian Craker mencoba memasukkan sesuatu script untuk mencoba menampilkan halaman error di browser dan biasanya halaman error akan menampilkan paling tidak struktur dari hierarki server SQL.

SEBAB TERJADINYA

SQL injection yang dapat diartikan sebagai suatu aksi hacking yang dilakukan di aplikasi client dengan cara memodifikasi perintah SQL yang ada di memori aplikasi client dapat terjadinya karena disebabkan oleh beberapa penyebab yatu :

  1. Tidak adanya penanganan terhadap karakter – karakter tanda petik satu dan juga karakter double minus yang menyebabkan suatu aplikasi dapat disisipi dengan perintah SQL.
  2. Sehingga seorang Hacker menyisipkan perintah SQL kedalam suatu parameter maupun suatu form.

KARAKTERISTIK

SQL injection yang merupakan jenis serangan dari para hacker mempunyai beberapa karakteristik yaitu :

1. Teknik serangan 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. Bahkan yang lebih berbahaya lagi yaitu mematikan database itu sendiri, sehingga tidak bisa memberi layanan kepada web server.

TOOLS PENDUKUNG

Untuk dapat melakukan aksi SQL injection, para hacker membutuhkan beberapa tools yang akan mereka gunakan sebagai pendukung untuk melakukan teknik penyerangan diantaranya adalah sebagai berikut :

1. Internet Exploler / Browser

2. PC yang terhubung internet

3. Program atau software seperti softice

CONTOH SINTAKS DALAM PHP

Adapun beberapa contoh sintaks agar para hacker dapat melakukan penyerangan dengan menggunakan metode SQL injection adalah sebagai berikut :

  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. Dan hasilnya, para hacker bisa inject sintax SQL kedalam SQL

PENANGANAN SQL INJECTION

1. MERUBAH SCRIPT PHP

$query = "select id,name,email,password,type,block from user " .

"where email = '$Email' and password = '$Password'";

$hasil = mySQL_query($query, $id_mySQL);

while($row = mySQL_fetch_row($hasil))

{

$Id = $row[0];

$name = $row[1];

$email = $row[2];

$password = $row[3];

$type = $row[4];

$block = $row[5];

}

if(strcmp($block, 'yes') == 0)

{

echo "\n";

exit ( );

}

else if(!empty($Id) && !empty($name) && !empty($email) &&

!empty($password));

Script diatas memungkinkan seseorang dapat login dengan menyisipkan perintah SQL kedalam form login. Ketika hacker menyisipkan karakter ’ or ’’ = ’ kedala form email dan password maka akan terbentuk query sebagai berikut :

Maka dilakukan perubahan script menjadi

$query = "select id,name,email,password,type,block from user".

"where email = '$Email'";

$hasil = mySQL_query($query, $id_mySQL);

while($row = mySQL_fetch_row($hasil))

{

$Id = $row[0];

$name = $row[1];

$email = $row[2];

$password = $row[3];

$type = $row[4];

$block = $row[5];

}

if(strcmp($block, 'yes') == 0)

{

echo "\n";

exit ( );

}

$pass = md5($Password);

else if((strcmp($Email,$email) == 0) && strcmp($pass,$password) == 0));

MENGGUNAKAN MYSQL_ESCAPE_STRING

Merubah string yang mengandung karakter ‘ menjadi \’ misal SQL injec’tion menjadi SQL injec\’tion

Contoh :

$kar = “SQL injec’tion”;

$filter = mySQL_escape_string($kar);

echo ”Hasil filter : $filter”;


PEMFILTERAN KARAKTER DENGAN MEMODIFIKASI PHP.INI

Modifikasi dilakukan dengan mengenablekan variabel magic_quotes pada php.ini sehingga menyebabkan string maupun karakter ‘ diubah menjadi \’ secara otomatis oleh php.

Contoh :

Contoh script yang membatasi karakter yang bisa masukkan :

function validatepassword( input )

good_password_chars =

"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

validatepassword = true for i = 1 to len( input )

c = mid( input, i, 1 )

if ( InStr( good_password_chars, c ) = 0 ) then

validatepassword = false

exit function

end if

next

end function

MEMINIMALISASIKAN SQL INJECTION

Ada beberapa cara yang dapat digunakan untuk meminimalisasikan terjadinya serangan SQL injection diantaranya adalah sebagai berikut :

1. Warning atau Error pada query tidak perlu ditampilkan. Lebih baik dibuat script yang akan langsung memfeedback log error/warning ke developer/adminnya jika terjadi kesalahan query, sementara di end-user bisa ditampilkan, misal error 404. Kalau Anda pernah / sering hosting di beberapa web hosting, pastinya ada beberapa web hosting yang memberikan penamaan yang sama untuk direktori usernya (shared hosting), misal /sompret/x2324/nama-domain (dimana sompret selalu sama untuk setiap user dalam satu mesin, x2324 adalah username, dan nama-domain adalah nama domain yang digunakan si x2324. Pesan warning dan error query yang terjadi akibat script akan menampilkan path letak file tersebut. Akan lebih parah lagi jika user memberi permission 777 ke dir / file.

2. Developer hendaknya melakukan validasi terhadap URL dan memfilter bentuk request yang menjurus terhadap tindakan injeksi.

3. Jangan pernah dumping database ke direktori yang tidak restrict permissionnya / publik. Dan lagi penamaan terhadap file hasil dumping database diusahakan tidak umum seperti pemberian tanggal-bulan-tahun (misal : 13071984.sql). Beberapa third party atau extension / module suatu CMS yang menggunakan konfigurasi default bisa ditebak direktori dan nama filenya.

4. Lakukaan audit sendiri dengan berbagai macam tools yang ada.

5. Jika dana tidak mencukupi maka tidak ada salahnya konsultasi dengan pihak yang lebih pandai tentang SQL Injection.

LOKASI SQL INJECTION

Untuk dapat melakukan SQL injection pada setiap target situs tidak harus melalui inboxnya saja akan tetapi hacker bisa memasukan string-string SQL di URL situs yang telah menjadi target sebelumnya.

Misalnya ada sebuah situs www.target.com/moreinfo.cfm dengan ProductID = 245 lalu hacker mengetikkan string injeksi debuging SQL tadi ke address bar yang dituju dibelakang url target itu, contohnya: www.target.com/moreinfo.cfm dengan ProductID = 245' having 1 = 1 dan juga hacker dapat menghapus nilai produk dari URL tersebut dan menggantinya dengan debugging code, sebagai contoh: www.target.com/moreinfo ProductID = 'having 1=1รข€”

Setelah itu akan keluar sebuah error page dari situs itu yang memberi informasi tentang struktur database situs itu. Dari hasil informasi yang telah didapat ini, hacker dapat melakukan serangan berikutnya. Apabila browser kita adalah Internet Explorer, ada sebagian situs yang tidak menampilkan error-nya, ini dikarenakan opsi Show Friendly HTTP Error Messages diaktifkan.

Untuk itu hacker perlu menonaktifkannya dengan cara menghilangkan tanda centang di kotaknya. Opsi ini dapat anda temukan di Tools > Internet Option > Advanced cari opsinya di bagian Browsing lalu hilangkan tanda centangnya dan klik tombol Apply. Sesudah itu apabila anda menemui error page yang berisi HTTP 500 error - internal server error- sebelum men-set opsi tadi, anda cukup menekan tombol Refresh, lalu terlihatlah sudah error-nya. Setelah kita tahu struktur database-nya, dengan pengetahuan dasar dari belajar SQL kita dapat menghancurkan database itu dengan perintah ' drop database [nama_database] atau drop table [nama_table].



Tidak ada komentar: