Tulisan ini merupakan salah satu tulisan yang ada di buku “Siapa
Bilang Nge-Hack Itu Susah” karya penulis sendiri dan diterbitkan
oleh Elex Media Komputindo pada tahun 2008. Dengan pertimbangan
kemanfaatan tulisan tersebut dan dipandang perlu untuk menjelaskan
tentang logika SQL injection, maka penulis menempatkannya di sini.
SQL Injection
Bila seseorang ingin mengakses suatu sistem komputer, biasanya
diperlukan login. Penerapannya pada website ditampilkan dengan dua
kotak isian, yaitu kotak User Name, User Id, atau User
Account dan kotak Password. Login ini berguna untuk
memfilter dan mengetahui identitas seseorang yang ingin mengakses
suatu sistem. Sistem login merupakan suatu cara dalam dunia sekuriti
komputer untuk memfilter orang yang masuk ke sistem sehingga orang –
orang yang tidak terdaftar tidak dapat masuk ke sistem tersebut.
Tetapi teknologi yang ada selalu saja tidak sempurna. Ada banyak cara
untuk menembus filter pada sistem login tersebut. Sehingga seseorang
yang tidak mengetahui password dapat juga ikut menikmati dan masuk ke
sistem tersebut. Salah satunya adalah dengan SQL injection.
Pada tulisan ini saya akan jelaskan tentang cara menembus password
login dengan SQL injection secara teoritis dengan melihat pada sisi
kelemahan query bahasa SQL itu sendiri. SQL injection itu
sendiri adalah suatu cara untuk mengeksploitasi kelemahan bahasa SQL
dengan cara memasukkan (menginjeksikan) beberapa karakter tertentu.
Deretan karakter tersebut biasa dikenal dengan nama injection
string. Ada banyak hal yang dapat dilakukan dengan injection
string. Diantaranya, mem-bypass password, mendapatkan
nama tabel, menyisipkan anggota baru, dll, bahkan sampai menghapus
tabel pada suatu database.
Memahami Cara Kerja SQL
Injection
Semisal ada seorang user yang bernama Joko yang ingin mengakses suatu
sistem yang menggunakan sistem login. Maka Joko akan memasukkan isian
pada kotak User Id dengan ‘Joko’ (tanpa kutip) dan pada
kotak Password dengan ‘rahasia’ (tanpa kutip). Bila
kemudian ditekan tombol OK atau tombol Login – nama
tombolnya bisa berbeda – maka sistem tersebut akan menjalankan
perintah query dalam bahasa SQL seperti berikut ini.
Gambar
Login dengan User Id dan Password
Select
* from TUser where UserId = ‘joko’ AND Password = ’rahasia’
Arti dari perintah tersebut adalah menampilkan data dari seluruh
record (perhatikan tanda * di perintah tersebut) di database
sistem tersebut. Tetapi tidak semua record akan ditampilkan, karena
pada perintah di atas ada filter atau pemilihan, yaitu hanya data
yang record UserId-nya berisi ‘joko’ dan
Password-nya berisi ‘rahasia’. Perhatikan penggalan
perintah setelah klausa where. Dan harus dipahami juga bahwa
isian UserId dan Password yang diinputkan oleh user,
keduanya harus bersesuaian dengan yang tersimpan di database
sistem. Karena digunakan logika AND pada perintah tersebut.
Dengan demikian, bila isian UserId dan Password sesuai
dengan yang tersimpan di database, barulah user tersebut dapat masuk
ke sistem.
Dua Cara Menembus Password
Untuk menembus – atau mem-bypass – password pada sistem
login, bisa ditempuh dengan dua cara. Dari kedua cara tersebut
seseorang bisa masuk ke suatu sistem tanpa perlu mengetahui
password-nya.
Cara pertama adalah dengan menambahkan karakter ‘# setelah
UserId. Sehingga bila Anda menginputkan pada kotak User Id
dengan ‘Joko’#’ (tanpa kutip) dan pada kotak Password
Anda inputkan sembarang karakter, seperti pada gambar ini.
Gambar
Injection string dengan ‘# pada kotak User Id
Maka ketika Anda menekan tombol Login, sistem website tersebut akan
menjalankan perintah query sebagai berikut.
Tanda # merupakan cara untuk membuat komentar (remark) dalam
bahasa SQL. Sebagaimana tanda // dalam bahasa Pascal. Remark
atau komentar akan menyebabkan karakter sesudah tanda komentar akan
diabaikan oleh program dan tidak akan dianggap sebagai kode program.
Yang menariknya disini, dengan injection string ‘# akan
menyebabkan kode program setelah tanda # akan diabaikan. Perhatikan
perintah di atas. Yang imbasnya adalah Anda bisa menginputkan
sembarang karakter pada kotak Password dan Anda tetap bisa
login dengan User Id ‘joko’!!
Cara kedua adalah dengan menambahkan injection string
sembarang’ OR ‘x’=’x
pada kotak Password.
Gambar
Injection string pada kotak Password
Sehingga bila Anda tekan tombol Login, maka sistem website akan
menjalankan perintah sebagai berikut
Akibatnya pada bagian Password akan terisi dengan nilai
‘sembarang’.
Tentu saja inputan tersebut akan bernilai false dan akan
menyebabkan Anda tidak bisa login ke sistem tersebut. Sederhana saja
alasannya, isian password tidak sama dengan yang tersimpan di sistem.
Tetapi ada query lanjutannya, yaitu OR
‘x’=’x . Yang artinya sistem diberikan pilihan. Bila
sebelumnya, inputan password bernilai salah, maka dijalankan pilihan
berikutnya yang sudah pasti benar, karena ‘x’=’x’.
Akibatnya Anda bisa masuk ke dalam sistem tanpa mengetahui password
yang sesungguhnya dengan User Id ‘joko’!!
Bagaimana Penerapannya?
Demikian teori SQL injection untuk menembus password login.
Saya katakan teori karena memang begitulah secara teoritis kelemahan
bahasa SQL. Tentu saja dalam penerapannya pada keadaan sesungguhnya
akan sedikit berbeda. Sehingga bila Anda mencoba bermain – main
dengan kiat ini, Anda tidak bisa begitu saja masuk menembus password
pada login website. Karena para web developer akan mengantisipasi
adanya serangan SQL injection ini. Diantaranya dengan
mendeteksi inputan karakter yang tergolong aneh. Kecuali pada
beberapa website yang mereka belum memperbaiki diri.
Biografi Penulis
Happy Chandraleka. Seorang penulis TI independen.
Menyelesaikan S1 di Teknik Elektro Universitas Diponegoro. Saat ini
mengelola Open Journal System Badan Penelitian dan Pengembangan
Kesehatan, Kementerian Kesehatan Republik Indonesia. Informasi
tentang penulis dapat dilihat di http://thecakrabirawa.wordpress.com
dan dapat dihubungi via email hchandraleka@gmail.com.
(ditulis
di Ruang 7 Depok, 5 November 2013, pukul 12.45 siang)







0 komentar:
Posting Komentar