ARTIKEL YANG LAIN :



Kamis, 29 Desember 2011

SQL injection


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


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.

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.

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.