無名小站的 XSS 安全漏洞
布丁大長輩 在 Year.new(2006) 這篇幹剿無名小站的 XSS 安全漏洞,沒有講的很明白,加上我這陣子沒在實驗室遇到 wkwu (是的,我跟他是同一個指導教授),所以一直沒有跟他說這個在國外已經「開發」好一陣子的安全漏洞。
Javascript 是在使用者端 (Browser) 跑的程式,理論上來說,讓使用者輸入自己的 Javascript 並不會有什麼問題,但實際上自從 XMLHttpRequest()
被大量應用後 (一開始發展 AJAX 所使用的核心技術之一),有些人就發現 XMLHttpRequest()
是可以拿來當作攻擊的工具。
舉個例子說明,無名小站的「修改個人資料」頁面是在 http://www.wretch.cc/user/modify.php?admin_user=1
這個位置,會以 POST 的方式送給 http://upload.wretch.cc/user/do_modify.php
,那麼我就可以在文章裡面嵌入一段 Javascript:(修改自 Use the XMLHttpRequest Object to Post Data)
var objHTTP, strResult; objHTTP objHTTP.Open('POST', "http://upload.wretch.cc/user/do_modify.php",false); objHTTP.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); objHTTP.send("依照 form 的內容填入一些東西"); strResult=objHTTP.responseText;
上面的程式碼是 IE Only 的程式碼,但是要弄 IE & Firefox 並存的程式碼其實只是加個 if
判斷句後改用 new XMLHttpRequest
而已…
問題來了:為什麼這樣做有效?那我隨便用 WWW::Mechanize 丟個東西進去 server 不就炸了?
答案是:使用 XMLHttpRequest()
連線時,會送出使用者的 Cookie,於是 server 端會以這個 Cookie 的擁有人去做 Javascript 要做的事情!接下來就 !@#$%^…
你會說我只是隨便講講?其實這件事情在 MySpace.com 已經發生過了,而且還寫成 worm 自動感染 XD 新聞在這:Cross-Site Scripting Worm Floods MySpace (Slashdot)。
回過頭來提 Google 對 XSS 的應對 這篇,假設有人 (舉個例,www.example.com) 在網站上放個 Javascript,用 XMLHttpRequest()
硬連 mail.google.com (Gmail) 的某些 function。在平常的時候,會因為 example.com !
你可以測試 http://www.google.com/search?q�che:http://www.google.com/ 這個頁面,會發現 Google 會故意換到 IP address。
Google 的另外一個服務是 Blogger。你會發現 Blogger 可以讓你隨便修改 Template 填入各種 code,於是你就可以對 *.blogspot.com 下面的 site 進行 XSS 攻擊:但實際上 Blogger 的 Control panel 放在 blogger.com,於是根本不怕你利用 Template 惡搞。
最後,Javascript 是邪惡的,平常逛網站請不要打開 Javascript:請安裝 NoScript 以避免被 ox 掉 :p