Thursday, March 22, 2012

Cross-Site Scripting (XSS) Methode

Cross-Site Scripting atau yang lebih dikenal dengan sebutan XSS merupakan salah satu metode yang di gunakan para attacker untuk menyuntikan kode HTM atau Javascript kedalam sebuah halaman web yang vulnirable terhadap XSS. XSS di bagi menjadi dua, Non Persistent dan Persistent. Xss Non Persistent merupakan tipe XSS yang paling umum dan yang paling mudah dilakukan. Attacker menggunakan social engineering agar tautan dengan kode berbahaya ini diklik oleh pengguna. sedangkan XSS Persistent ini merupakan tipe XSS yang lebih berbahaya, yang dapat berakibat pada seluruh pengguna. XSS ini terjadi saat pengguna diizinkan untuk memasukkan data yang akan ditampilkan kembali. Contohnya adalah pada komentar, buku tamu, dll. Attacker memasukkan kode HTML atau Javascript atau code lainnya pada posting mereka. Dengan cara ini attacker bisa mendapatkan cookie pengguna yang bisa digunakan selanjutnya untuk membajak session pengguna. Lalu bagaimana ini bisa terjadi? dan bagaimana para attacker bisa merubah tampilan utama sebuah website dengan XSS? mari kita bahas bersama-sama..hehe!
Cari target yang Vuln terhadap XSS,
Dork: "inurl:search.php?q=" atau bisa cari sendiri, kalau dork ini untuk mencari XSS vuln melalui search Form.

Kita coba dengan sebuah kolom komentar.
Pertama, coba isikan sesuatu secara normal (misalnya nama = blog thinker, komentar = Asslamualaikum). Apa yang terjadi? Tentu saja tidak ada masalah. Nama dan komentar akan muncul sesuai dengan apa yang diinputkan.

Sekarang, coba isikan komentar yang ‘sedikit aneh’. Masukkan komentar yang berisi tag HTML, misalnya sebagai berikut:

Asslamualaikum... ini contoh teks <b>tebal</b> dan <i>miring</i>...

Apa yang terjadi? Komentar Sobat muncul seperti ini:

Asslamualaikum… ini contoh teks tebal dan miring...

Nah, kode HTML yang kita sisipkan diproses oleh browser. Coba buka halaman tersebut dari komputer lain. Maka Sobat akan memperoleh hasil yang sama. Ini berarti kita berhasil meng-inject-kan kode kita. Hal seperti ini yang disebut celah keamanan Cross-Site Scripting. Ini harusnya tidak boleh terjadi. Bayangkan jika si attacker menyisipkan kode berikut:

Asslamualaikum...
<script type="text/javascript">
window.onload = function() {
document.getElementsByTagName("body")[0].innerHTML = '<h1>This web is hacked!</h1>';
}
</script>

Atau komentar berikut yang sangat mengganggu pengguna lain (pengguna lain akan mendapatkan alert/popup yang tidak pernah berakhir):

<script type="text/javascript">
while (true) {
alert('Sekarang jam ' + (new Date()).toUTCString());
}
</script>

Atau alert seperti ini:

Web ini bagus.
<script type="text/javascript">
if (confirm('Tapi sayang ada celah keamanannya! Klik OK untuk mempelajari celah keamanan tsb!')) {
document.location.href = 'http://blog-thinker.blogspot.com/2012/03/cross-site-scripting-xss-methode.html';
}
</script>

Yang mengarahkan pengguna ke halaman lain.

Cara mengatasinya cukup sederhana. Jika menggunakan PHP, tambahkan htmlentities() sebelum menampilkan hasil inputan dari pengguna. Misalnya kode berikut:

echo 'Nama : ' . $nama;

Diubah menjadi:

echo 'Nama : ' . htmlentities($nama);

Pastikan Sobat menggunakan fungsi tersebut di setiap bagian yang bertugas menampilkan hasil inputan dari pengguna.

Buat yang ingin tahu secara detail tentang XSS, simak pembahasan berikut.

Andaikan Anda membuat halaman HTML (index.html) berikut:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Demo Cross-Site Scripting</title>
</head>
<body>
<form action="hasil.php" method="post">
<p><label for="nama">Nama:</label><br />
<input type="text" name="nama" id="nama" /></p>
<p><label for="komentar">Komentar:</label><br />
<textarea name="komentar" id="komentar" cols="40" rows="5"></textarea></p>
<p><input type="submit" value="Kirim" /></p>
</form>
</body>
</html>

Kemudian halaman PHP berikut (hasil.php) yang bertugas memproses hasil input dari halaman index.html:

<?php
$nama = (isset($_POST['nama']) ? $_POST['nama'] : '');
$komentar = (isset($_POST['komentar']) ? $_POST['komentar'] : '');

echo '<p>Nama:<br />' . $nama . '</p>';
echo '<p>Komentar:<br />' . $komentar . '</p>';

Saat Anda menjalankan index.html, akan muncul sebuah form dengan dua field. Jika Anda mengisi nama dengan test dan komentar dengan Asslamualaikum, maka ketika di-submit (dengan menekan tombol Kirim), hasil.php akan memprosesnya sebagai berikut:

$nama = (isset($_POST['nama']) ? $_POST['nama'] : '');
// maka $nama berisi: test

$komentar = (isset($_POST['komentar']) ? $_POST['komentar'] : '');
// dan $komentar berisi: Asslamualaikum

echo '<p>Nama:<br />' . $nama . '</p>';
// sesuai dengan nilai di variabel $nama di atas,
// maka akan di-echo: <p>Nama:<br />test</p>

echo '<p>Komentar:<br />' . $komentar . '</p>';
// sesuai dengan nilai di variabel $komentar di atas,
// maka akan di-echo: <p>Komentar:<br />Asslamualaikum</p>

Di sini tidak ada masalah. Jika di jalankan, maka hasil sesuai dengan yang diharapkan.

Masalah muncul ketika misalnya komentar yang dimasukkan adalah ini adalah contoh teks tebal. Halaman hasil.php akan memprosesnya sebagai berikut:

$komentar = (isset($_POST['komentar']) ? $_POST['komentar'] : '');
// $komentar berisi: ini adalah contoh teks <b>tebal</b>

echo '<p>Komentar:<br />' . $komentar . '</p>';
// sesuai dengan nilai di variabel $komentar di atas,
// maka akan di-echo: <p>Komentar:<br />ini adalah contoh teks <b>tebal</b></p>

Browser tidak pernah tau bahwa ini adalah contoh teks <b>tebal</b> datangnya dari web developer yang membuat halaman atau dari isian pengguna yang iseng. Hasilnya, browser akan memproses kode HTML yang ada di dalamnya, sehingga akan menampilkan tulisan “tebal” dalam keadaan bercetak tebal, hasil dari tag HTML <b> dan </b> tersebut.

Hal yang sama terjadi untuk JavaScript. Pengguna yang iseng bisa menyisipkan kode JavaScript yang diapit oleh tag HTML <script type=”text/javascript”> dan </script>. Hasilnya tentu saja kode JavaScript tersebut akan dijalankan oleh browser.

Nah, XSS ini terjadi saat menampilkan sesuatu ke web browser. Celah keamanan sebaliknya, terjadi saat menyimpan sesuatu dari web browser (hasil input pengguna) ke database biasa dikenal dengan SQL injection. Selain kedua jenis tersebut, masih ada lagi celah keamanan yang lain, misalnya Cross-site Request Forgery (CSRF).

Code Converter :


1 comments:

Unknown said...

TErus BAng KLo Mau DApatin User Sama Pass Nya GMn TUh :D

Kgk NGErti KLO XSS

Ditunggu Kunjungan Balik :D

sangat-cupu.blogspot.com :D

Post a Comment

:) :(;):D;;-):-/:x:P:-*=((:-OX(:7B-):-S#:-S7:):((:)):|/:)=))O:-):-B=;I-)8-|L-):-a:-$[-(:O)8-}2:-P(:|=P~:-?#-o=D7:-SS@-):^o:-w7:P2):):-c:)]~X(:-h:-t8-7X_X:!!m/:-q:-bd^#(^Blog Thinker