Freddy Syahrul AP - 08053111074
Freddy Syahrul AP - 08053111074
DAN PENCEGAHANYA
OLEH
FREDDY SYAHRUL AP (08053111074)
UNIVERSITAS SRIWIJAYA
FAKULTAS ILMU KOMPUTER
TEKNIK INFORMATIKA
MEI 2008
1
DAFTAR ISI
BAB I PENDAHULUAN
1. KEJAHATAN DUNIA MAYA .............................................................. 3
2. MAKSUD DAN TUJUAN .................................................................... 4
3. METODE PELAKSANAAN ............................................................... 4
BAB II PEMBAHASAN
1. PENGERTIAN ...................................................................................... 5
2. SEBAB TERJADINYA ......................................................................... 6
3. KARAKTERISTIK .............................................................................. 6
4. TOOLS PENDUKUNG ........................................................................ 6
5. CONTOH SINTAKS DALAM PHP .................................................... 7
6. PENANGANAN SQL INJECTION .................................................... 8
7. MEMINIMALISASIKAN SQL INJECTION ....................................11
8. LOKASI SQL INJECTION .................................................................11
9. IMPLEMENTASI SQL INJECTION .................................................12
10. CONTOH SQL SEDERHANA ............................................................13
11. CONTOH KASUS ................................................................................19
12. CARA PENCEGAHAN ........................................................................21
BAB III PENUTUP
1. KESIMPULAN .....................................................................................22
2
BAB I
PENDAHULUAN
3
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
utk menggapai akses pada sistem database yg berbasis SQL. Teknik ini
memanfaatkan kelemahan dalam bahasa pemprograman scripting pada SQL dalam
mengolah suatu sistem database. Hasil yg ditimbulkan dari teknik ini membawa
masalah yg sangat serius.
Maka setelah mengetahui bahwa SQL injection merupakan suatu teknik
serangan hacker yang dapat mereka lakukan dari jarak jauh, maka penulis
memutuskan untuk mengambil tema ini dengan menggunakan judul Metode
Serangan SQL Injection.
4
2. MAKSUD DAN TUJUAN
Setelah menentukan judul dalam tulisan ini, penulis mempunyai maksud dan tujuan
dalam penulisan tugas ini diantaranya adalah sebagai birkut :
1. Diharapkan agar setiap pembaca dapat mengerti akan teknik serangan SQL
Injection
2. Dimaksudkan agar para pembaca dapat memahami cara kerja teknik serangan
yang dilakukan oleh para hacker dalam merusak suatu sistem atau website.
3. Serta memberikan penjelasan tentang keuntungan dan kerugian dari
pelaksanaan teknik serangan SQL Injection ini.
3. METODE PELAKSANAAN
Dikarenakan keterbatasan kemampuan yang dimiliki oleh penulis dalam menulis
tulisan ini, maka tulisan ini dibuat oleh penulis yang pelaksanaannya hanya dengan
menggunakan bantuan dari Metode perpustakaan.
5
BAB II
PEMBAHASAN
1. 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.
6
2. 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.
3. 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 datadata yang berada didalam database. Bahkan yang
lebih berbahaya lagi yaitu mematikan database itu sendiri, sehingga tidak bisa
memberi layanan kepada web server.
4. 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
7
5. 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
8
{
$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 :
9
}
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 injection
menjadi SQL injec\tion
Contoh :
$kar = SQL injection;
$filter = mySQL_escape_string($kar);
echo Hasil filter : $filter;
10
Contoh :
11
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.
12
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].
13
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 duaduanya misal :
or 0=0 -- ; or 0=0 -- ; or 0=0 -- ; or 0=0 # ;
or 0=0 # ; orx=x ; or x=x ; ) or (x=x
8. Cobalah sampai berhasil hingga anda bisa masuk ke admin panel.
Isikan data ke dalam tabel tersebut dengan mengetikkan perintah SQL seperti
berikut ini.
14
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'.
= "Provider=SQLOLEDB.1; Password=rahasia;
ata Source=localhost"
conn.open connstring
15
request.form("username") & "' and password = '" &
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. Gambar contoh halaman secured_page.asp bisa Anda lihat berikut ini.
16
Pada halaman secured_page.asp di atas terdapat sebuah link logout yang
mengarah pada dokumen logout.asp. Ini digunakan untuk melakukan sign-out atau
log-out dari halaman secured_page.asp dan menuju ke halaman login.asp kembali.
<%
session.abandon response.redirect "login.asp"
%>
Sekarang semua file sudah kita buat. Letakkan semua file tadi (login.asp,
login_process.asp, secured_page.asp, logout.asp) dalam satu folder dan jadikan
sebagai home directory pada MS IIS (web server) Anda. Hasilnya bisa Anda test
dengan mengetikkan URL yang mengarah pada web Anda tadi misalnya
http://localhost/login.asp.
Sekarang saatnya penulis akan menyajikan contoh SQL injection untuk mem-bypass
login. Tampilkan URL yang berisi login.asp tadi (misalnya http://localhost/login.asp).
Sekarang coba masukkan username 'a' dan password 'a', program akan kembali lagi
ke halaman login.asp karena username dan password tersebut salah. Sekarang
coba sekali lagi, kali ini username 'sql' dan password 'inject'. Karena username dan
password benar maka Anda akan diarahkan ke halaman secured_page.asp. Anda
bisa klik link logout jika ingin logout. Aktivitas tersebut adalah aktivitas normal pada
suatu sistem pada login. Bagaimanakah cara tidak normalnya? Kita memeriksa
apakah login tersebut bisa di bypass atau tidak dengan cara memberikan inputan
tanda ' (single quote) pada bagian inputan username dan masukkan sembarang
string pada bagian password.
Jika Anda tekan tombol submit maka akan muncul error seperti berikut ini.
Error Type:
17
'aku'. /login_process.asp, line 8
Error di atas merupakan error dari database SQL Server yang sebenarnya
menyatakan ada kesalahan pada statement SQL (akibat kita masukkan karakter '
tadi). Penyebab utama kejadian di atas adalah karena karakter ' (single quote) yang
kita inputkan pada bagian username. Karakter ' (single quote) merupakan karakter
pemutus dari statement SQL dan dari sini bisa kita kembangkan untuk membelokkan
statement SQL asli menjadi statement SQL sesuai keinginan kita. Mari kita lihat
kembali kejadiannya. Misalnya kita masukkan string 'user' dan password 'pass' maka
statement
Jalankan pada MS Query Analyzer maka hasilnya akan menjadi suatu zero
recordset dan tidak error. Sekarang misalnya kita memasukkan karakter ' pada
username dan string 'aku' pada bagian password maka statement SQL pada
database akan menjadi seperti berikut ini.
Coba jalankan pada MS Query Analyzer dan akan muncul error seperti berikut ini.
Kita lihat error yang pertama persis sama pesannya seperti yg terjadi pada web tadi.
Itu terjadi karena Anda melakukan pemotongan statement SQL dengan karakter '
dan belum Anda selesaikan. Efek dari pemotongan ini akhirnya Anda bisa
menambahkan statement SQL Anda sendiri setelah karakter ' tadi. Sekarang kita
18
selesaikan pemotongan statement SQL tadi dengan menambahkan string or 1=1.
Setelah karakter ' tadi (jadi pada bagian username
Anda ketikkan ' or 1=1 sehingga sekarang statement SQL nya akan menjadi seperti
berikut ini.
select * from tbUser where username = '' or 1=1 --' and password = 'aku'
Jadi perintah di atas akan men-select username yang berupa blank character dan
kemudian di OR dengan suatu kondisi TRUE (dalam hal ini diwakili dengan 1=1).
Kondisi apapun jika di OR dengan keadaan TRUE maka hasilnya akan selalu TRUE
pula. Itulah inti dari kejadian di atas.
19
Dalam contoh ini kita buat userID dengan nama yamakasi. Tetapi sebelumnya
hacker harus dapat menguji apakah situs ini memakai SQL. Cara mengujinya
dapat pada input box login dengan string yang telah dibahas di atas.
4. Setelah itu klik OK, dan account anda telah terbentuk.
5. Proses penyerangan akan dimulai, anda masuk ke members direktory yang
URL-nya adalah www.yepcell.com /members.asp lalu masukan debuging code '
having 1=1- di kolom username dan masukan sembarang password di kolom
password.
6. Lalu akan keluar error page-nya, dan dari erro page tersebut telah dijelaskan:
bahwa terdapat Error Type: Microsoft OLE DB Provider for ODBC Drivers
(0x80040E14) [Microsoft] [ODBC SQL Server Driver] [SQL Server] Column
'YepCell_membersDB.UserID' is invalid in the select list because it is not
contained in an aggregate function and there is no GROUP BY clause. Lalu
hacker harus tahu bahwa ada table Yepcell_membersDB dan ada field UserID,
ini adalah informasi berharga. untuk itu siapa tahu ada lagi filed lainnya, jadi
hacker masukan string 'GROUP BY YepCell_membersDB
7. Lalu muncul lagi error-nya. Error Type: Microsoft OLE DB Provider for ODBC
Drivers (0x80040E14) [ Microsoft ] [ ODBC SQL Server Driver ] [ SQL Server ]
Column 'YepCell_membersDB.Password' is invalid in the select list because it is
not contained in an aggregate function and there is no GROUP BY clause. Jika
ada lagi fieldnya yaitu Password, dan hackerpun mencoba kembali untuk
menginjeksi jikalau ada kemungkinan lagi field lainnya dengan 'GROUP BY
YepCell_membersDB.Password, tapi jika ternyata error-nya kembali ke awal lagi,
berarti ada dua field dalam satu table YepCell_membersDB.
8. Karena sejak awal hacker melakukan SQL Injection ini untuk menambah Credits
(string khusus penghitung SMS) di situs ini, maka hacker mengubah account
mereka dengan injeksi ini. Perintah UPDATE adalah perintah SQl yang berguna
untuk mengubah atau memperbaiki data dalam suatu field di table yang memuat
field itu, dengan kode 'UPDATE [nama_table] set [field1] = [nilai1] where kondisi ;
Jadi dengan info yang kita dapatkan dari error page yang tadi maka kita dapat
membuat string-nya 'UPDATE YepCell_membersDB set Credits = 100 where
UserID ='yamakasi' kita klik submit lalu.
9. Jika terjadi error, hacker butuh keyakinan bahwa semua kegiatan akan selalu
berjalan mulus tapi dicek terlebih dahulu account mereka.
20
10. Bila sudah terlihat credits kita bertambah menjadi seratus.Artinya hacker telah
sukses menginjeksi database situs itu dengan perintah SQL dasar tadi dan
bukan dengan cara carding.
11. Dan hasilnya hacker telah menginjeksi situs tersebut dan mereka bisa ber SMS
ria sepuasnya. Namun kadang-kadang SMS gateway situs ini sering down.
21
BAB III
PENUTUP
1. KESIMPULAN
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 utk
menggapai akses pada sistem database yg berbasis SQL. Teknik ini memanfaatkan
kelemahan dalam bahasa pemprograman scripting pada SQL dalam mengolah
suatu sistem database. Hasil yg ditimbulkan dari teknik ini membawa masalah yg
sangat serius.
SQL Injection dapat terjadi karena :
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.
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 datadata yang berada didalam database. Bahkan yang
lebih berbahaya lagi yaitu mematikan database itu sendiri, sehingga tidak bisa
memberi layanan kepada web server.
22
Adapun cara pencegahan dari SQL Injection adalah sebagai berikut :
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.
23
DAFTAR PUSTAKA
Stiawan Deris. 2005. Sistem Keamanan Komputer. PT. Elex Media Komputindo: Jakarta.
http://www.sony ak.com. 12/01/2004. SQL Injection Menggunakan ASP dan MS SQL
Server.
http://www.wartaegov.com. 04/06/2007. Tujuh Jurus Mengantisipasi Serangan Ke Situs
Web.
http://www.gedex.web.id 02/07/2007. Microsoft Kena Deface Lagi !!! Lagi-lagi SQL
Injection.
http://www.rose-see.nr. 07/11/2007. Hacking Security - Jamu Penawar SQL Injection.
http://www.demittegal.multiply.com.10/12/2007. Masalah_SQL_Injection_dan_Solusinya.
http://www.blogger.com 07/05/2008. Tutorial SQL Injection.
24