Followers

Friday 15 March 2013

Cara Hack Menggunakan SQL Injection

Cara Hack Menggunakan SQL Injection

Maros-Salah Satu Teman saya (SANCA) pernah menjelaskan teknik para hacker menyerang web dengan cara SQLi Tekhnik yang digunakan seorang Hacker dalam melakukan SQL Injection ini salah satunya adalah:

1. mencari target

Kita bisa menggunakan dork pada search engine, kali ini penulis mencoba menggunakan http://google.com sebagai search enginenya.



Ketik : inurl:news.php?id= <<<<<<<< salah satu contoh dork. Misal kita mendapatkan salah satu website yang beralamat http://sitecontoh.com/news.php?id=19 2. Mencoba melakukan testing Di website http://sitecontoh.com/news.php?id=19 kita coba menambahkan karakter “ ‘ “ (tanda kutip) dibelakang angka “19” tersebut menjadi: http://sitecontoh.com/news.php?id=19’ . Dikarenakan ada keluar error yang biasanya seperti ini : “ Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in ……..”
kita bisa asumsikan kalau website tersebut vulnerable.

Dikarenakan saya akan lebih focus bagaimana mencegah SQL Injection, mungkin untuk penjelasan lebih lanjut tentang Tekhnik SQL Injection bisa dicari di google yang sudah banyak website yang menjelaskan tentang tekhnik ini lebih gamblang dan mungkin lebih lengkap dan jelas.


Ok, sebenarnya tekhnik diatas hanya salah satu dari berbagai tekhnik yang digunakan seorang hacker untuk mencoba “membobol” website. Tekhnik SQL Injection ini bisa dilakukan pada alamat website (URL) ataupun juga bisa dilakukan pada form-form login. Dengan memasukan query-query sql injection di dalamnya. Query tersebut banyak jenisnya, contoh:

' or 1=1 or ''='

' or 1=1--

' or 1=1#

' or 1=1/*

') or '1'='1--

') or ('1'='1--

" or 1=1--

or 1=1--


Dan masih banyak lagi yang lainnya yang bisa anda cari di google.

Nah setelah kita mengetahui tekhnik-tekhnik yang digunakan seorang hacker dalam melakukan SQL Injection (walaupun singkat), minimal kita bisa sedikit ada gambaran kenapa hal itu bisa terjadi. Mungkin menurut pemahaman saya yang Newbie ini, saya bisa mengambil kesimpulan kalau hal itu terjadi dikarenakan Peng-codean atau bisa dikatakan ada kesalahan dalam penulisan pemrograman. Lalu yang akan menjadi pertanyaan, salah dimananya ya?

Baik sekarang kita bahas, karena diatas ada pertanyaan dimana letak kesalahan tersebut..?? kita perhatikan pengkodean dibawah 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 '#


atau seperti ini:

(tekhnik serangan multiple SQL Injection)


// $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 (gunakan karakter yang tidak merugikan kantong anda… hehehe');


oia, ketika form login juga biasa masih banyak loh yang bisa di exploitasi. Seperti yang kita ketahui dan mungkin suatu hal yang jadi standarisasi bahwasanya username dan password harus berupa angka dan huruf. Kenapa..?? Karena karakter khusus. SQL Injection biasanya memberikan variasi tanda mulai dari “=” (Sama dengan), “%” (Persen), “;” (Titik Koma), “\’” (Petik satu), “”" (Petik Dua) dan lain sebagainya. Berarti perlu adanya validasi anti karakter khusus. Salah satunya dengan melakukan pengkodean seprti dibawah ini :

//Mengambil nilai - nilai dari form
$username = trim($_POST[”username”]);
$password = trim($_POST[”password”]);

//apakah bernilai huruf dan angka.
if (!ctype_alnum($username) OR !ctype_alnum($password))
{
echo “Jagalah Hati,,,,,”;
}
else
{
echo “Alhamdulillah”;

berikut dibawah ini beberapa contoh fungsi yang bisa mencegah SQL Injection:

1.mysql_escape_string

Contoh :



Fungsi mysql_escape_string merubah "The Injec'tion" menjadi "The Injec\'tion"



2. mysql_real_escape_string

Contoh :



Fungsi mysql_real_escape_string merubah "The Injec'tion's" menjadi "The Injec\'tion\'s"



Mungkin cukup sekian dulu tutorial sederhana dari saya.
Mohon maaf apabila terdapat kekeliruan di dalamnya, dan kurang sistematis nya tulisan saya diatas.
Saya cuma pengen mencoba untuk share tulisan aja.

Kritik dan saran sangat penulis harapkan. Terimakasih.....

kalo ada pertanyaan, tanyain aja ma yang pinter disini. hehehe bcanda dink.... kalo da yang ditanyain silahkan posting aja..kali aja da yang jawab. -0-

TRANSLATE