02 SQL Injection
02 SQL Injection
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
<?php
$result = $mysqli->query("SELECT kecamatan FROM info_provinsi where id_provinsi='".$_GET['prov']."'");
while ($row = $result->fetch_assoc()) {
echo $row['kecamatan'] . "<br>";
}
?>
Contoh:
https://korban.my.id/sql/query.php
Yohanes Nugroho - 2024 - https://creativecommons.org/licenses/by-sa/4.0/ 6
Tidak semua SQL injection menghasilkan error
Kadang menghasilkan output yang tidak wajar, misalnya:
halaman kosong
output tidak sesuai (misalnya field nama berisi tanggal lahir)
layout tidak benar (karena ada data yang hilang)
' or 1=1 --
Menjadi:
Contoh:
https://korban.my.id/sql/actor-badfilter.php?id=1
https://korban.my.id/sql/actor-badfilter.php?id=1+or+first_name%3D0x6564
Sebagai catatan: kadang filtering petik saja cukup, tapi hanya di kasus tertentu
Kenapa tidak ada output? kadang output hanya masuk ke log internal atau sekedar
masuk variabel yang tidak ditampilkan ke user.
Jika huruf pertama password adalah 'a', maka statement ini jadi true, jika bukan 'a'
maka jadi false
Ini lebih mudah diotomasi dengan program (baik buatan sendiri atau sqlmap).
Menggunakan AND, dan menggunakan SLEEP, atau query lain yang butuh waktu
lama.
Ini bisa digunakan juga pada sql injection yang sifatnya insert .
insert into users(username, passwd, is_admin) values ('yohanes', 'mypass', 1); -- , 'abc123', 0);
Open source, isa diextend dengan plugin jika butuh pemrosesan khusus.
Atau kalau sudah tahu parameter apa yang perlu dicek, sertakan dengan -p
Dalam contoh ini --random-agent supaya user agent-nya bukan sqlmap (akan
langsung diblokir Cloudflare)
Menggunakan file request akan lebih praktis: segala macam cookie dan authentication
bisa disertakan di dalam filenya
sqlmap.py -r file.txt
Contoh:
--tamper=apostrophemask,apostrophenullencode,base64encode
Kita bisa melihat apa saja request yang dikirimkan oleh sqlmap
Kunjungi URL yang akan mengextend session, dan berikan ke --safe-url (atau --
safe-post )
Tentukan berapa sering URLnya perlu dikunjungi dengan --safe-freq dan gunakan
isi file dari --save-req
Nomor paspor ini dipakai di query lain select * from approved_id where
id=$paspor .
Jadi meskipun pada halaman ini tidak ada input user, tapi masih bisa ada SQL injection
Sederhananya: