Anda di halaman 1dari 11

Sql injection diknas.go.

id
Posted April 21st, 2007 by
htamici
Dea Cyndi rahman

hman

CINA BANGSAT
LUHHHHHHHHHHHHHHHHHHHH bikin
susah orang kecilllllllllllllll
Pendahuluan
Setelah banyaknya bug-bug yang bertebaran di internet dari unicode hingga yang baru-
baru ini menggemparkan jagad maya yaitu RPC Dcom, sekarang muncul lagi satu lubang
keamanan yang membahayakan sebuah websites. SQL Injection atau dikenal juga dengan
SQL insertion adalah 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 situs. Teknik yang
digunakan dalam SQL Injection adalah dengan jalan menginput perintah-perintah standar
dalam SQL (DDL, DML, DCL) seperti CREATE, INSERT, UPDATE, DROP, ALTER,
UNION, SELECT dan perintah-perintah lainnya yang tak asing lagi bagi anda yang
sudah mengenal SQL secara mendalam maupun yang baru saja belajar. Dari berbagai
jenis SQL dari MySQL, PostgreSQL, Nuke SQL, dan MS-SQL, yang paling rentan
terhadap SQL Injection adalah MS-SQL.

Bahaya Default Setting


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--
Nah 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++ mark-nya //
atau /*)

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.

Mencari Target
Situs web MS-SQL dengan ASP adalah situs yang paling rentan terhadap serangan ini.
Jadi bagaimana jika kita ingin mencari target yang menggunakan bahasa scripting ASP
yang dapat kita serang? Seperti biasa buka www.google.com nah, di kolom keywordnya
masukkan allinurl:.co.nz/admin.asp. Keyword ini dapat anda modifikasi ke berbagai
bentuk tapi intinya allinurl: harus dimasukkan karena Google akan mencari semua URL
dalam sebuah situs yang mempunyai direktori /admin.asp.
Bisa saja anda ganti dengan allinurl:.co.id atau net atau org, or.id, sampai
allinurl:.fr/admin.asp semua tergantung kreativitas anda dalam mencari target
menggunakan Google, dan yang terpenting dari semua itu adalah anda harus tahu di mana
harus menginput string SQL tadi, misalnya di member login, user login, dan bahkan
dapat pula di search product.

Lokasi SQL Injection


Lalu apakah setiap situs target kita harus di-inject lewat input box-nya? Tidak juga. Kita
bisa memasukan string-string SQL di URL situs target.
Misalnya ada sebuah situs www.target.com/moreinfo.cfm?ProductID=245
Nah, ketikkan string injeksi debuging SQL tadi ke address bar anda dibelakang url target
itu, contohnya:
www.target.com/moreinfo.cfm?ProductID=245' having 1=1--
atau juga anda hapus nilai produk dari URL tersebut dan ganti dengan debugging
codenya, 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 kita dapat ini, kita 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 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.

Praktek SQL Injection


Bagaimana misalnya kalau anda menemukan sebuah situs yang menyediakan jasa kirim
SMS dari web, namun setiap SMS ada perhitungannya dalam sebuah string, dan kita
harus membayar dengan kartu kredit. Kita tidak akan melakukan carding disini, namun
kita dapat meng-inject database-nya agar string SMS tadi diberi nilai dan bisa dipakai
untuk mengirim SMS. Untuk mengetahui lebih lanjut dari serangan SQL Injection,
perhatikan SQL Injection dari sebuah situs yang memberi layanan SMS web ke
handphone ini. Disini akan dijelaskan string dasar SQL yang dapat berubah menjadi hal
yang membahayakan suatu situs.
1. Cari target dengan Google, keywordnya allinurl:.com/sendsms.asp. Inilah URL yang
sering dipakai oleh web site yang menyediakan jasa mengirim SMS.

2. Dalam contoh ini kita pakai 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. Anda harus mendaftar dulu untuk menjadi anggota supaya bisa mengirim SMS. Isikan
data diri anda; semuanya boleh palsu kecuali nomor handphone. Dalam contoh ini kita
buat userID dengan nama yamakasi. Sebelumnya anda dapat menguji apakah situs ini
memakai SQL. Cara mengujinya dapat pada input box login dengan string yang telah
dibahas di atas.

4. Setelah itu anda 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. Nah, keluar error page-nya, disitu dijelaskan:


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. nah kita tahu bahwa ada table
Yepcell_membersDB dan ada field UserID, ini adalah informasi berharga. untuk itu siapa
tahu ada lagi filed lainnya, jadi kita masukan string ' GROUP BY YepCell_membersDB –

7. Lalu akan 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 nah ada lagi fieldnya yaitu
Password, coba lagi kita inject mungkin ada lagi field lainnya dengan ' GROUP BY
YepCell_membersDB.Password -- ...tapi ternyata error-nya kembali ke awal lagi, berarti
ada dua field dalam satu table YepCell_membersDB

8. Karena sejak awal kita melakukan SQL Injection ini untuk menambah Credits (string
khusus penghitung SMS) di situs ini, maka kita ubah account kita 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. Nah, error... Tapi jangan khawatir tidak semua berjalan mulus tapi kita cek sajalah
account kita.
10. Jreeeng... terlihat Credits kita bertambah menjadi seratus.Artinya kita telah sukses
menginjeksi database situs itu dengan perintah SQL dasar tadi dan bukan dengan cara
carding.

Sekarang anda bisa ber-SMS ria sepuasnya. Namun kadang-kadang SMS gateway situs
ini sering down dan bahkan apabila sang admin menemukan keganjilan di database-nya
bisa saja dia men-disable account kita bahkan men-disable pengiriman SMS ke
Indonesia. Hal ini terjadi pada situs www.phunkyphones.net

Apabila anda adalah web admin, semua ini dapat anda hindari dengan men-disable
special character atau wild character di situs anda, dan membatasi input char. Seperti
halnya dengan mempelajari bahasa assembly untuk meng-crack suatu program,
mempelajari SQL tidaklah sulit dan SQL Injection ini dapat meningkatan minat untuk
mempelajari bahasa pemrograman database ini, agar nantinya dapat menghasilkan
sesuatu.

Penutup
Setting server dengan benar memang akan mengamankan e-commerce web dari serangan
deface, tetapi bukan berarti semuanya sudah aman sekarang. Situs e-commerce yang
menggunakan Microsoft IIS juga menggunakan database access dengan Micosoft SQL
server dan dibandingkan dengan SQL server yang lain, MS SQL server mempunyai
kelemahan yang memungkinkan seseorang tanpa account dapat masuk dan lolos
verifikasi dari MS SQL server.. Dari segi kerugian, hal ini lebih serius, 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.

Gambar 7. Layar login user name dan password serta


perintah-perintah SQL dibaliknya untuk verfikasi
Setelah pemakai memasukkan username dan password, secara umum SQL akan
melakukan verfikasi terpadap SQL query sebagai berikut:
SQLQuery = "SELECT Username FROM Users
WHERE Username = '" & strUsername & "' AND Password = '" & strPassword & "'“
Kelemahan verifikasi MS SQL disini mirip dengan kelemahan unicode bug, yaitu tetap
memproses (dengan bingung) input-input ilegal pada username dan menghasilkan error
page. Pada error page ini akan terbaca struktur database-nya.
Jadi kalau username-nya diisikan karakter-karakter ilegal seperti misalnya:
‘ OR ‘ ‘=
dan untuk password-nya disikan juga ‘ OR ‘ ‘= maka SQL query akan membacanya
sebagai:
SELECT Username FROM Users WHERE Username = ‘ ‘
OR ‘ ‘=‘ ‘ AND Password = ‘ ‘ OR ‘ ‘=‘ ‘
yang artinya SQL query akan memvalidasi username kosong (blank) dan password
kosong sebagai user yang sah. Keberhasilan SQL Injection ditandai dengan adanya
ODBC error, internal server error, masalah dalam memproses request, syntax error, dan
lain sebagainya.
Untuk mengatasi hal ini, atur agar:
• Hanya karakter tertentu yang boleh diinput.
• Jika terdeteksi adanya illegal character, langsung tolak
permintaan.
Referensi:
- Friedl, Steve. SQL Injection Attacks by Example.
Artikel pada http://unixwiz.net
- Spett, Kevin. SQL Injection White Paper. SPI Dynamics, Inc
- Ismayadi, Andi. Database Hacking: SQL Injection. Neotek vol. IV no. 05
- S’to. Kerawanan pada port 80. Neotek vol. IV no. 05

* Logi

Anda mungkin juga menyukai