跨站腳本攻擊(XXS攻擊)
背景知識
什么是XSS攻擊
XSS攻擊:跨站腳本攻擊(Cross Site Scripting),為不和層疊樣式表(Cascading Style. Sheets, CSS)的縮寫混淆,
Web攻擊匯總及攻擊方式整理(1)跨站腳本攻擊(XXS攻擊)
。故將跨站腳本攻擊縮寫為XSS。XSS是一種經(jīng)常出現(xiàn)在web應用中的計算機安全漏洞,它允許惡意web用戶將代碼植入到提供給其它 用戶使用的頁面中。比如這些代碼包括HTML代碼和客戶端腳本。攻擊者利用XSS漏洞旁路掉訪問控制——例如同源策略(same origin policy)。這種類型的漏洞由于被駭客用來編寫危害性更大的phishing攻擊而變得廣為人知。對于跨站腳本攻擊, 界共識是:跨站腳本攻擊是新 型的“緩沖區(qū)溢出攻擊“,而JavaScript是新型的“ShellCode”。在2007年OWASP所統(tǒng)計的所有安全威脅中,跨站腳本攻擊占到了22%,高居所有Web威脅之首。
注:OWASP是世界上最知名的Web安全與數(shù)據(jù)庫安全研究組織
XSS攻擊的危害包括
1、盜取各類用戶帳號,如機器登錄帳號、用戶網(wǎng)銀帳號、各類管理員帳號
2、控制企業(yè)數(shù)據(jù),包括讀取、篡改、添加、刪除企業(yè)敏感數(shù)據(jù)的能力
3、盜竊企業(yè)重要的具有商業(yè)價值的資料
4、非法轉(zhuǎn)賬
5、強制發(fā)送電子郵件
6、網(wǎng)站掛馬
7、控制受害者機器向其它網(wǎng)站發(fā)起攻擊
XSS漏洞的分類
XSS漏洞按照攻擊利用手法的不同,有以下三種類型:
類型A,本地利用漏洞,這種漏洞存在于頁面中客戶端腳本自身。
其攻擊過程如下所示:
Alice給Bob發(fā)送一個惡意構(gòu)造了Web的URL。
Bob點擊并查看了這個URL。
惡意頁面中的JavaScript打開一個具有漏洞的HTML頁面并將其安裝在Bob電腦上。
具有漏洞的HTML頁面包含了在Bob電腦本地域執(zhí)行的JavaScript。
Alice的惡意腳本可以在Bob的電腦上執(zhí)行Bob所持有的權(quán)限下的命令。
類型B,反射式漏洞,這種漏洞和類型A有些類似,不同的是Web客戶端使用Server端腳本生成頁面為用戶提供數(shù)據(jù)時,如果未經(jīng)驗證的用戶數(shù)據(jù)被包含在頁面中而未經(jīng)HTML實體編碼,客戶端代碼便能夠注入到動態(tài)頁面中。
其攻擊過程如下:
Alice經(jīng)常瀏覽某個網(wǎng)站,此網(wǎng)站為Bob所擁有。Bob的站點運行Alice使用用戶名/密碼進行登錄,并存儲敏感信息(比如銀行帳戶信息)。
Charly發(fā)現(xiàn)Bob的站點包含反射性的XSS漏洞。
Charly編寫一個利用漏洞的URL,并將其冒充為來自Bob的郵件發(fā)送給Alice。
Alice在登錄到Bob的站點后,瀏覽Charly提供的URL。
嵌入到URL中的惡意腳本在Alice的瀏覽器中執(zhí)行,就像它直接來自Bob的服務器一樣。此腳本盜竊敏感信息(授權(quán)、信用卡、帳號信息等)然后在Alice完全不知情的情況下將這些信息發(fā)送到Charly的Web站點。
類型C,存儲式漏洞,該類型是應用最為廣泛而且有可能影響到Web服務器自身安全的漏洞,駭客將攻擊腳本上傳到Web服務器上,使得所有訪問該頁面的用戶都面臨信息泄漏的可能,其中也包括了Web服務器的管理員。
其攻擊過程如下:
Bob擁有一個Web站點,該站點允許用戶發(fā)布信息/瀏覽已發(fā)布的信息。
Charly注意到Bob的站點具有類型C的XXS漏洞。
Charly發(fā)布一個熱點信息,吸引其它用戶紛紛閱讀。
Bob或者是任何的其他人如Alice瀏覽該信息,其會話cookies或者其它信息將被Charly盜走。
類型A直接威脅用戶個體,而類型B和類型C所威脅的對象都是企業(yè)級Web應用。
XSS攻擊原理及攻擊方式
XSS又叫CSS (Cross Site Script) ,跨站腳本攻擊。它指的是惡意攻擊者往Web頁面里插入惡意html代碼,當用戶瀏覽該頁之時,嵌入其中Web里面的html代碼會被執(zhí)行,從而達到惡意用戶的特殊目的。
使用過ASP的同學一定見過這樣的代碼:
Hello,
<%
Response.Write(Request.Querystring("name"))
%>
假如我傳入的name的值為:
這樣就可以直接盜取用戶的cookie。所以我就可以發(fā)送一條鏈接地址讓別人去點:
http:// /reg.asp?name=
當然這樣做沒有一點隱蔽性,雖然前面的xxx.com瞞過了少數(shù)人,但大多數(shù)人可以辨認出后面的javascript代碼,所以,我只需要將后面的javascript代碼轉(zhuǎn)換成URL的16進制,如:
http:// /reg.asp?name=%3C%73%63%72%69%70%74%3E%78%3D%64%6F%63%75%6D%65%6E%74%2E%63%6F%6F%6B%69%65%3B%61%6C%65%72%74%28%78%29%3B%3C%2F%73%63%72%69%70%74%3E
上面的URL你還認得嗎?除非你把它轉(zhuǎn)換出來。(進制轉(zhuǎn)換可以使用Napkin工具,哎,太壞了。。有人問Napkin的下載地址,貼在這里好 了:http://www.0x90.org/releases/napkin/Napkin-1.0-Windows.zip)
根本原因
1. 沒有對輸入進行約束,沒有對輸出進行編碼
2. 沒有嚴格區(qū)分“數(shù)據(jù)”和“代碼”
示例
發(fā)現(xiàn)大名鼎鼎的淘寶網(wǎng)也存在這樣的漏洞,我們在搜索框中輸入:
"/> 這樣,我們已經(jīng)修改了淘寶原有的頁面,在下面嵌入了百度的首頁。效果如圖: 使用時機 我嘗試在各種不同網(wǎng)站尋找XSS漏洞,baidu, amazon.cn, youku.com, dangdang.com等等。結(jié)果,我發(fā)現(xiàn)XSS漏洞非常普遍!其實XSS利用的是網(wǎng)頁的回顯,即,接收用戶的輸入,然后再在頁面顯示用戶的輸入。總結(jié) 一下幾個可能會出現(xiàn)漏洞的地方: 搜索引擎 留言板 錯誤頁面 通過在上面那些類型的頁面輸入一些特殊的字符(包括< > / "),如:?jjkk>,然后在結(jié)果頁中的源碼處搜索是否存在原樣的:?jjkk>,如果存在,恭喜你,發(fā)現(xiàn)了一個XSS漏洞。 分類 1. DOM-based cross-site scripting 頁面本身包含一些DOM對象的操作,如果未對輸入的參數(shù)進行處理,可能會導致執(zhí)行惡意腳本。如下面一些DOM操作: document.URL document.URLUnencoded document.location (and many of its properties) document.referrer window.location (and many of its properties) 舉個例子,假如某個脆弱的頁面的代碼如下:
Hi
Welcome to our system
…
攻擊者使用如下的URL訪問時,則非常危險:
http://www.vulnerable.site/welcome.html?name=
試了一下,貌似IE、FireFox等瀏覽器默認 對進行了編碼,阻止了腳本的執(zhí)行,
電腦資料
《Web攻擊匯總及攻擊方式整理(1)跨站腳本攻擊(XXS攻擊)》(http://m.lotusphilosophies.com)。但是對于DOM操作還是要更加謹慎啊,比如把上面的頁面修改一下,安全性就增強了不少:
2. Reflected cross-site scripting
也被稱為None-Persistent cross-site scripting,即,非持久化的XSS攻擊,是我們通常所說的,也是最常用,使用最廣的一種方式。它通過給別人發(fā)送帶有惡意腳本代碼參數(shù)的URL,當URL地址被打開時,特有的惡意代碼參數(shù)被HTML解析、執(zhí)行。它的特點是非持久化,必須用戶點擊帶有特定參數(shù)的鏈接菜能引起。
3. Persistent cross-site scripting
持久化XSS攻擊,指的是惡意腳本代碼被存儲進被攻擊的數(shù)據(jù)庫,當其他用戶正常瀏覽網(wǎng)頁時,站點從數(shù)據(jù)庫中讀取了非法用戶存入非法數(shù)據(jù),惡意腳本代碼被執(zhí)行。這種攻擊類型通常在留言板等地方出現(xiàn)。
實施方式
我們來試一把Reflected cross-site scripting。當我們在某網(wǎng)站輸入?yún)?shù)XXX,發(fā)現(xiàn)參數(shù)XXX原樣的出現(xiàn)在了頁面源碼中:
OK,可以開始做文章了,我們將XXX替換為:abc"/>
實戰(zhàn)c++中的string系列string的