Pages

Subscribe:

Friday, May 02, 2008

Bagaimana SQL Injections Menembus Server?

Penulis pernah di tanya oleh seorang Admin server sebuah site trading online di Jakarta, dia agak sedikit heran ketika mengetahui servernya jebol padahal dia hanya membuka port 80 dan sudah terpasang IDS (Intrusion Detection System) seperti Snort dan Snare di servernya dan anehnya ini juga tidak terdeteksi sama sekali oleh logger webserver (biasanya webserver memiliki file log untuk setiap link yang di request client). Karena kebetulan penulis sendiri yang menjebol situs tersebut maka penulis sampaikan bahwa sekuriti server tidak hanya berkaitan dengan masalah konfigurasi server, blocking port dan monitoring/detection intruder saja. Ada permasalahan yang lebih berbahaya dari sekedar setingan hardware yaitu masalah software atau aplikasi yang di gunakan baik di server maupun di halaman web. Aplikasi pengaman apapun (termasuk penggunaan enkripsi dan chipper key) tidak menjamin bahwa server itu akan aman. Di sini memang di tuntut pengetahuan dan informasi akan bugs yang berkembang saat itu.

Setiap menit, jam dan hari semakin banyak bermunculan bugs-bugs terbaru dengan model dan tipe yang berbeda-beda. Kadang hal ini tidak di sadari oleh kita bahwa bugs tersebut ternyata juga ada di server yang kita pakai. Kesibukan dan konsentrasi yang terpecah belah kadang memang membuat kita lengah dan tidak menyadari kemungkinan-kemungkinan jebolnya server yang kita setting. Seperti contoh kasus di atas juga merupakan hal yang tidak di ketahui secara sadar oleh si admin sendiri bahwa ternyata seorang hacker dengan hanya memanfaatkan aplikasi web yang di gunakan dalam sebuah website pun mampu menjebol server tersebut dan merebut akses shell command di dalam server target tanpa mengalami kesulitan. Dan kadang dengan kemampuan yang expert di programming seorang hacker pun mampu menjebol firewall yang terpasang di server target, hal ini telah di buktikan sendiri oleh penulis dengan hanya bermodalkan bugs dan script khusus, penulis bisa mendapatkan hosting-hosting berfirewall bagus baik dari operating sistem Linux, BDS (OpenBSD dan FreeBSD), Debian dan sebagainya.

Kembali ke topik di atas, kebetulan untuk server yang penulis jebol adalah jenis NT server yang memanfaatkan connectivity database seperti ODBC dan SQL yang tidak menggunakan input validation script untuk mengontrol command database yang di masukan (di injeksikan) ke dalam server. Berbicara tentang injection tentu pembaca pernah mendengar juga tentang SQL Injections yang berita-nya sangat ramai di bicarakan di milis dan site-site sekuriti. Bukan basa-basi bugs ini hampir mengenai seluruh server-server berbasiskan NT terutama untuk server NT yang memanfaatkan koneksi ke database untuk web page-nya.

Oke untuk mempermudah pemahaman para pembaca, di sini Penulis akan memberikan contoh kasus sederhana. Dulu jaman pertama kalinya bugs VP-ASP (Software Management untuk pembayaran online), Anda mungkin mengetahui tentang penggunaan karakter single quote (‘) dengan penambahan OR (logical operator) dan tanda sama dengan (=) di antara single quote tersebut.

Login: ‘ OR ‘’=’

Password: ‘ OR ‘’=’

Sedikit menganalisa, misal ketika input box untuk login dan password di isi seperti dalam contoh di atas apa yang akan terjadi jika script yang memproses input tersebut seperti di bawah ini.

var sql = "select * from users where username = '" + username + "' and password = '" + password + "'";

Untuk beberapa site yang tidak menerapkan sistem validasi input yang secure akan mengakibatkan seorang user bisa masuk baik sebagai admin atau user biasa tanpa membutuhkan login dan password yang sebenarnya. Mengapa? Karena ketika input itu di proses di sistem yang terjadi operasi tersebut di anggap valid.

var sql = "select * from users where username = '’ OR ‘’=’' and password = '’ OR ‘’=’';

Nah tamatlah sudah riwayatmu kini hehe…hehe..

Oke mungkin contoh di atas masih di anggap sangat sederhana, sekarang kalau misalnya saya melakukan action yang lebih ekstrim dari itu?

Username: '; drop table users--

Password:

Apa yang akan terjadi? Saya yakin Anda juga tahu bahwa command tersebut akan menghapus seluruh data di tabel users, coba kita analisa lagi.

var sql = "select * from users where username = '’; drop table users—

Nah apa yang akan Anda perbuat jika yang terjadi adalah seperti command di atas ini? Di sini karakter titik koma (;) menutup command pertama dan kemudian command drop menjadi command berikutnya yang akan di eksekusi oleh sistem dan selanjutnya karakter double minus (--) menutup command-command berikutnya untuk tidak di eksekusi. Yahh klo sudah begini tamatlah sudah data Anda. Paling banter Anda akan di pecat dari perusahaan dan di maki-maki bos Anda karena tidak becus bekerja.

SQL Injections tidak hanya bereaksi di dalam input box saja, dalam sebuah URL pun bisa di aplikasikan. Ini tergantung kemahiran Anda dalam melihat celah dari ketidak-secure-an site tersebut. Tentu di perlukan juga pengetahuan tentang command SQL dan beberapa eksperimen kecil untuk meriching kode di antara variabel-variabel yang ada di site tersebut.

Jadi di mana letak kesalahannya?

Dalam hal ini Microsoft sangat merespon tragedi SQL Injection, bahkan mereka sudah membuat patch-nya. Tapi sekali lagi ini tidak hanya masalah patching saja tapi juga di tuntut kehati-hatian Anda dalam merancang isi web itu sendiri. Solusinya yaa buatlah beberapa fungsi validasi input yang mampu mematikan command-command abnormal yang bisa mempengaruhi atau membuat server bereaksi.

Hanya seperti itu saja? He..hehe… pertanyaan yang sangat menohok tapi nggak papa lah.

Jika Anda mendapatkan bugs ini pada NT server maka beruntunglah Anda karena akses di luar database pun sanggup di lakukan. Seperti apa? Seperti command shell, registry, dan messaging product. Yaa sedikit tentang pengetahuan tentang sistem menjadi mutlak untuk perlu di ketahui agar Anda bisa mendapatkan akses granted administator tentu dengan dukungan kreatifitas dan mungkin jika perlu dukungan kemampuan programming yang Anda kuasai. Coba lihat beberapa command sistem yang bisa Anda manfaatkan untuk mendapatkan akses lebih banyak di server target (NT).

xp_cmdshell, xp_startmail, xp_sendmail, sp_makewebtask

xp_regaddmultistring, xp_regdeletekey, xp_regdeletevalue, xp_regenumkeys, xp_regenumvalues, xp_regread

xp_regremovemultistring, xp_regwrite

xp_availablemedia, xp_dirtree, xp_enumdsn, xp_loginconfig

xp_makecab, xp_ntsec_enumdomains

xp_terminate_process

Anda tertarik? Jika iya, saya sangat menyarankan Anda untuk mencari bahan-bahannya di internet. Tidak ada guru yang lebih baik selain pengalaman dan pengalaman tanpa usaha juga hal yang tidak mungkin. Okeh, Keep the spirits to be the best of the best and remember which nobody perfect, but you should try to be perfect.

0 comments:

Post a Comment