Main My profile Registration Log out Login
Friday
17.5.2024
2:59:22 PM
Welcome Guest | RSS LoginRegistrationMain
Site menu
Our poll
Rate my site
Total of answers: 5
Statistics

Total online: 1
Guests: 1
Users: 0
About You
IP
Counter
Free Hit Counter
Main » 2009 » November » 27 » Teknik Patch Simple Common Web Attack
Teknik Patch Simple Common Web Attack
12:39:26 PM
Teknik-teknik serangan yang akan kita bahas cara menangkalnya adalah :

1. XSS

2. SQLInjection

3. LFI / RFI

4. Bypass Login

5. Filter Upload file

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& ... at%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
Result Description Entity Name Entity 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 :

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

    echo $judul;

    ?>


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


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 :

Code: 

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, 0x3a, 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=ht ... jahat.txt?? <-- RFI

http://www.target.com/index.php?page=.. ... /passwd%00 <-- LFI

PENANGKAL

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

Code: 

$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

Code: 

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

Code: 

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

Code: 

$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 "";
}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-serangan itu.

Selanjutnya melakukan penambalan pada script2 yang salah dengan cara yang saya sarankan atau dengan cara lain sesuai kreatifitas masing2.

Untuk penjelasan tentang bagaimana cara attacker dapat dilihat disini
Views: 710 | Added by: 000jericho | Rating: 0.0/0 |
Total comments: 0
Name *:
Email *:
Code *:
Login form
Search
Calendar
«  November 2009  »
SuMoTuWeThFrSa
1234567
891011121314
15161718192021
22232425262728
2930
Entries archive
Links
Forum  ========================== ..::Forum::..  ==========================
Firends
Friends  ========================== ..::Friends::..  ==========================

Copyright Jericho © 2024
Powered by uCoz