Mari kita mulai analisa kita dengan
mengambil sample satu URL jebakan, yaitu tinyurl.com/sampahh. Ini adalah
url versi pendek yang bila diklik akan melakukan redirect ke url
aslinya, yaitu:
http://m.facebook.com/connect/prompt_feed.php?display=wap&user_message_prompt='<script>window.onload=function(){document.forms[0].message.value='jangan salahin w kalo lo bakal ngakak ngeliat ni orang :D http://tinyurl.com/sampahh';document.forms[0].submit();}</script>
URL tersebut akan saya pecah menjadi 3 bagian:
-
http://m.facebook.com/connect/prompt_feed.php
-
?display=wap&user_message_prompt=
-
'<script>window.onload=function(){document.forms[0].message.value='jangan salahin w kalo lo bakal ngakak ngeliat ni orang :D http://tinyurl.com/sampahh';document.forms[0].submit();}</script>
Bagian pertama adalah URL untuk update
status. Bagian kedua adalah query string parameter yang terdiri dari dua
parameter, yaitu display dan user_message_prompt. Bagian ketiga adalah
isi dari parameter user_message_prompt yang merupakan payload javascript
untuk mengubah status secara otomatis.
The Prompt
Sebelum masuk lebih jauh membahas
payloadnya, mari kita lihat dulu bentuk tampilan dari URL untuk mengubah
status ini. Gambar ini adalah screenshot ketika browser membuka URL:
http://m.facebook.com/connect/prompt_feed.php?display=wap&user_message_prompt=Masukkan Status
Dari gambar di atas kini kita memahami fungsi dari parameter
user_message_prompt, yaitu sebagai judul pertanyaan/prompt. Agar user
mengerti apa yang harus diinputkan, dalam setiap prompt harus diberi
judul yang jelas, contohnya: “Input your PIN”, “Enter your Name”,
“Password:” dan sebagainya. Silakan anda mencoba bermain-main dengan
mengubah-ubah nilai user_message_prompt sesuka anda di address bar dan
perhatikan apa yang terjadi.
Reflected Cross Site Scripting
Normalnya user_message_prompt diisi dengan murni teks saja berupa
instruksi/petunjuk apa yang harus diinputkan user. Bila parameter
user_message_prompt berisi teks murni saja, maka tidak ada yang perlu
dikhawatirkan, namun bagaimana bila parameter tersebut diisi dengan kode
HTML atau javascript?