SQL Injection
-
Upload
tanpa-nama -
Category
Documents
-
view
18 -
download
1
description
Transcript of SQL Injection
SQL INJECTION
A. Definisi
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.
Seiring dengan berjalannya waktu, akibat banyaknya para hacker muda yang lahir untuk
melakukan kejahatan di dunia maya, maka banyak metode yang mereka gunakan untuk
melakukan teknik serangan seperti Cross Site Scripting, Directory Traversal Attack, Parameter
Manipulation dan lain sebagainya. Adapun salah satu contoh teknik serangan yang sering mereka
gunakan adalah teknik serangan melalui SQL injection.
Sebenarnya SQL injection sendiri bukanlah hal baru, dari dulu teknik ini sudah dikenal
dalam dunia hacking sebagai salah satu teknik web hacking, namun baru muncul lagi sekarang
karena sifatnya yang dapat merusak database dari suatu situs. Teknik yang digunakan dalam
SQL injection adalah dengan jalan menginput perintah-perintah standar dalam SQL (DDL,
DML, DCL) seperti create, insert, upate, dorp, alter, union dan select beserta perintah-perintah
lainnya yang tak asing lagi bagi anda yang sudah mengenal SQL secara mendalam maupun yang
baru saja belajar.
SQL singkatan dari Structured Query Language yg merupakan bahasa komputer standar
yang ditetapkan oleh ANSI (American National Standard Institute) untuk mengakses dan
memanupulasi sistem database. SQL bekerja dengan program database seperti MS Access, DB 2,
Informix, MS SQL Server, Oracle, Sybase dan lain sebagainya.
SQL injection attack merupakan salah satu teknik dalam melakukan web hacking untuk
menggapai akses pada sistem database yg berbasis SQL. Teknik ini memanfaatkan kelemahan
dalam bahasa pemprograman scripting pada SQL dalam mengolah suatu sistem database. Hasil
yang ditimbulkan dari teknik ini membawa masalah yang sangat serius.
B. Sebab terjadinya SQL INJECTION
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.
C. Karakteristik SQL INJECTION
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.
D. 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:
a. BSQL hacker
b. The Mole
c. Pangolin
d. SQLMap
e. Havij
f. Enema SQLi
g. SQL Ninja
h. SQL Sus
i. Safe SQL Injector
E. Penanganan SQL INJECTION
a. Merubah Script PHP
b. Menggunakan MYSQL_ESCAPE_STRING
c. Pemfilteran karakter dengan memodifikasi php.ini
F. Meminimalisir serangan SQL injection
Ada beberapa cara yang dapat digunakan untuk meminimalisasikan terjadinya serangan
SQL injection diantaranya adalah sebagai berikut :
a. 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.
b. Developer hendaknya melakukan validasi terhadap URL dan memfilter bentuk request
yang menjurus terhadap tindakan injeksi.
c. 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.
d. Lakukaan audit sendiri dengan berbagai macam tools yang ada.
G. 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 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].
H. 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.
I. CONTOH SQL INJECTION SEDERHANA
Contoh mengenai kasus SQL injection yang sampai saat ini dan detik ini juga masih sering
kita jumpai pada situs-situs di internet. Salah satu penyalahgunaan bug SQL injection adalah
digunakan untuk mem-bypass sistem login pada suatu situs. Contoh kali ini akan kita rancang
sendiri sedemikian rupa mulai dari merancang database, membuat script sampai melakukan SQL
injection terhadap script yang kita buat tersebut. Kita akan menggunakan MS SQL Server
sebagai databasenya, ASP sebagai scripting languange nya dan sembarang HTML editor untuk
membuat layar loginnya (penulis disini menggunakan MS FrontPage). Sebagai contoh, kita
menggunakan MS IIS sebagai web server. Siapkan MS IIS dan juga MS SQL Server 2000.
Pertama-tama kita akan buat dahulu databasenya. Siapkan database dengan nama sqlinject dan
buat tabel di dalamnya dengan nama tbUser. Berikut ini adalah struktur dari tabel tbUser melalui
perintah SQL CREATE TABLE.
Create table tbUser
{
username varchar(50),
password varchar(50))
Isikan data ke dalam tabel tersebut dengan mengetikkan perintah SQL seperti berikut ini.
insert into tbUser values('sql','inject')
Sekarang kita sudah mempunyai sebuah database yang bernama 'sqlinject', sebuah tabel yang
bernama 'tbUser' dan tabel tersebut sudah diisi dengan satu buah row data. Sekarang kita akan
buat sebuah halaman login yang digunakan sebagai interface web-nya. Penulis beri nama filenya
yaitu login.asp.
Bentuk tampilan dari layar login ini bisa Anda lihat seperti berikut ini.
Setelah itu kita buat script untuk memproses login ini, penulis beri nama login_process.asp.
Code pada file login_process.asp adalah sebagai berikut. Untuk koneksi ke database (SQL
Server) penulis menggunakan metode SQL Authentication, server pada localhost, username 'sa'
dan password 'rahasia'.
Script untuk proses login :
<% option explicit %>
<% dim connstring,conn,recset connstring
= "Provider=SQLOLEDB.1; Password=rahasia;
Persist Security Info=True; User ID=sa; Initial Catalog=sqlinject;
ata Source=localhost"
set conn = server.createobject("adodb.connection")
set recset = server.createobject("adodb.recordset")
conn.open connstring
recset.open "select * from tbUser where username = '" &
request.form("username") & "' and password = '" &
request.form("password") & "'",conn,3,2
if not recset.eof then response.write recset.recordcount
session("username") = request.form("username")
response.redirect "secured_page.asp"
else
response.redirect "login.asp" end if
%>
Kita lihat pada code diatas terdapat operasi SELECT ke SQL yang mencari username dan
password dari tabel tbUser. Jika username dan password yang dimasukkan benar maka akan
masuk ke halaman secured_page.asp (ada pada bagian akhir dari tulisan ini). Maksud dari
halaman secured_page.asp ini adalah bahwa halaman tersebut hanya bisa diakses jika Anda
mengisikan username dan password dengan benar. Anda tidak bisa mengetikkan URL halaman
tersebut secara langsung.
J. CARA PENCEGAHAN
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.
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.