Selasa, 26 Januari 2010

Blind SQL injection

Blind SQL Injection adalah salah satu tehnik exploitasi database yang berbeda dengan sql injection biasa dimana pada sql injection biasa akan mengeluarkan sebuah value akan tetapi pada tehnik blind sql injection tidak akan mengeluarkan value apapun akan tetapi kita akan mengetahui value tersebut dengan trial and error akan value tersebut atau menguji true atau falsenya value tersebut...
Disini saya menggunakan command :

mid()= hampir sama fungsinya dengan substring() dan char() adalah peubah dari karakter.

Ingat, sebelum mencoba, kita cek version sql nya...Klo version 4 kita memakai blind, karena version 4 tidak support query information_schema tp klo version 5,boleh pake ini, boleh pake sql inject yg biasa...

Misal: www.target.com

1. Test Bug
Cari halaman yg dinamis, sisipkan and 1=0 dan and 1=1

www.target.com/berita.php?id=5 and 1=0 <<2. Test Versi
Disini kita menggunakan Query :

1.and substring(@@version,1,1)=4 >>> versi 4
2.and substring(@@version,1,1)=5 >>> versi 5

Dengan kedua Query diatas kita mencoba mencari versiNy,dimanakah ditemukan nilai true?!

Contoh :

www.target.com/berita.php?id=5 and substring(@@version,1,1)=4

Jika value adalah true maka web tadi versi 4 tapi jika false/error mak kita test yang kedua seperti dibawah ini.

www.target.com/berita.php?id=5 and substring(@@version,1,1)=5

Setelah ketemu baru kita bisa memutuskan. Apakah menggunakan Blind SQLi atau cukup dengan SQLi,tapi karena disini yang kita bahas adalah Blind SQLi jadi kita selesaikan dulu yang ini... :D

3. Blind Inject
Disini Query yg dipakai adalah: and mid(user(),1,1)=CHAR(65)

Saya jelaskan sedikit deh...
mid(user()1,1)= dalam kasus ini kita tidak tahu value dari user itu apa maka dalam "()" kita kosongkan dan angka 1,1 dibelakang () adalah urutan dari value tersebut sedangkan CHAR adalah peubah dalam decimal dan (65) adalah value decimal tersebut...
Kenapa kita mulai dengan 65 ? Karena "65" adalah "A" dalam ascii...
Kita masukin value valueNnya seperti dibawah ini:

www.target.com/berita.php?id=5 and mid(user(),1,1)=CHAR(65)

Sampai pada keadaan true,seperti jika kita memasukkan query and 1=1 diatas n harus sabar... :D
Kemudian langkah selanjutnya kita tes value kedua seperti dibawah ini:

www.target.com/berita.php?id=5 and mid(user(),1,2)=CHAR(83,65)

Adakah perbedaannya? Yup, angka pada user kita naikkan menjadi 2 dan kita menambahkan value char kembali,dari 65....Gini nih...
1,1 = value pertama user
1,2 = value kedua user
1,3 = value ketiga user
dst...
O ya,sebelum melangkah ke yang berikutnya...ada baiknya kita mengetahui terlebih dahulu jumlah karakter dari user dengan merubah nilai CHAR menjadi NULL "CHAR(0)" dan tanda "=" (sama dengan) menjadi tanda ">" (lebih dari) dan mendeteksi urutan value "1,1" ke "2,1" dst,sampai batas terahir false.
Misal :

www.target.com/berita.php?id=5 and mid(user(),1,1)>CHAR(0) <<< true www.target.com/berita.php?id=5 and mid(user(),2,1)>CHAR(0) <<< true Sampai pada batas akhir true,dan jika misalnya pada urutan value ke "5,1" menunjukkan true dan pada value ke "6,1" adalah false,maka dapat disimpulkan bahwa jumlah karakter user adalah 5 karakter.

Setelah kita temukan semua value karakter user sekarang waktunya mencari database dari web.
Dengan cara menggati user() menjadi database() seperti dibawah ini.

www.target.com/berita.php?id=5 and mid(database(),1,1)=CHAR(65)

Begitu pula untuk mencari jumlah karakternya,kita pakai cara seperti diatas.

O ya,ada yang lupa... :D untuk mengkonfersi CHAR nya kamu bisa masuk disini :

1.Pencocokan dari Wikipedia. Atau,
2.Konversi. Atau juga bisa memakai,
3.Text to Hex.

Ini hanya pembelajaran,dan pengalaman adalah segalanya.
Harap dimaklumi jika ada salah kata atau tulisan. Dan koreksi dari teman2 sangat saya harapkan demi kemajuan bersama.

Thanks to : Metal_Snuff,Plonk5638.

Tidak ada komentar: