劉偉明+曾澤宇+劉帥+張瑞霞
摘要:該系統(tǒng)設(shè)計實現(xiàn)了一個XSS測試用例模型,通過網(wǎng)絡(luò)爬蟲對網(wǎng)站進行鏈接爬取,并根據(jù)設(shè)計的測試用例模型生成測試用例集合,將測試用例集合提交至網(wǎng)站,監(jiān)測網(wǎng)站是否具有XSS漏洞。系統(tǒng)的爬蟲模塊采用基于廣度優(yōu)先搜索策略的多線程技術(shù),爬蟲配置功能能夠使用戶自定義多個配置爬蟲的參數(shù)。經(jīng)過測試用例檢測后,系統(tǒng)能高效準確地發(fā)現(xiàn)XSS漏洞。
關(guān)鍵詞:Web;XSS檢測;用例模型;Python
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2018)04-0014-02
1 背景
在互聯(lián)網(wǎng)技術(shù)飛速發(fā)展的今天,人們已經(jīng)越來越多的依賴互聯(lián)網(wǎng)?;ヂ?lián)網(wǎng)固然豐富了人們的生活,但是其存在的安全問題也給人們帶來了很多危害。在眾多的網(wǎng)絡(luò)安全問題中,針對Web應(yīng)用程序的攻擊已經(jīng)成為網(wǎng)絡(luò)攻防的熱點,而在Web攻擊中,XSS攻擊是其中一中十分流行和影響嚴重的攻擊。利用XSS攻擊,攻擊者可以獲取用戶隱私,盜取用戶身份Cookie,劫持用戶的瀏覽器等,危害十分嚴重,給用戶帶來了嚴重的生活困擾,給企業(yè)帶來了巨大的經(jīng)濟損失。因此,如何檢測XSS漏洞,保障Web應(yīng)用程序免受XSS攻擊已經(jīng)成為一個十分有必要的研究課題。本系統(tǒng)以此為目標,針對XSS漏洞檢測,對其測試用例進行了深入的研究,設(shè)計了一個以攻擊位置的不同來進行分類的測試用例模型。
2 系統(tǒng)的設(shè)計
系統(tǒng)主要分為兩大模塊:網(wǎng)絡(luò)爬蟲模塊和XSS檢測模塊。如圖1所示。 網(wǎng)絡(luò)爬蟲模塊主要功能是對Web頁面源代碼的爬取,完成網(wǎng)頁源代碼的下載并提取其中的URL鏈接和解析出表單,為XSS檢測模塊提供需要測試的URL鏈接和表單。XSS檢測模塊的主要功能是從網(wǎng)絡(luò)爬蟲模塊中獲取元組forms中的表單,提取出表單中URL的各參數(shù),將XSS測試用例插入到URL的參數(shù)中,組成一個新的待測試的URL,并訪問此URL。檢測返回的頁面源代碼中是否存在提交的XSS測試用例,如果存在則表示該URL存在XSS漏洞,否則不存在XSS漏洞。
1) 網(wǎng)絡(luò)爬蟲模塊
網(wǎng)絡(luò)爬蟲模塊主要是由三個子模塊組成,分別是配置模塊、下載模塊和解析模塊。初始狀態(tài)下,配置模塊根據(jù)用戶提供的參數(shù)對爬蟲進行配置,并且此時帶爬取的URL列表中只有一個入口URL,此時通過調(diào)用下載模塊來下載網(wǎng)頁源代碼,接著調(diào)用解析模塊對下載的網(wǎng)頁源代碼進行解析,解析出URL鏈接和表單,并將解析出的URL鏈接加入到待爬取的列表中。
如圖2所示。
2) XSS檢測模塊
XSS檢測模塊主要是由兩個子模塊組成,分別是測試用例生成模塊和檢測模塊。初始狀態(tài)下,檢測模塊提取全局元組中的表單,根據(jù)表單中的提交方式去調(diào)用不同的檢測模塊(檢測模塊有兩個:GET檢測模塊和POST檢測模塊)。檢測子模塊獲取表單,提取出表單中的提交URL地址并傳遞給測試用例生成模塊,此時測試用例生成模塊根據(jù)表單中的提交URL地址去生成攻擊測試用例,并將生成的攻擊測試用例傳遞給檢測模塊,檢測模塊此時開始利用攻擊測試用例檢測URL鏈接所在的網(wǎng)頁頁面是否存在XSS漏洞,若發(fā)現(xiàn)XSS漏洞,則提醒用戶并輸出相關(guān)XSS漏洞信息。如圖所示。
(1) 測試用例生成模塊:測試用例生成模塊為用戶提供了兩種選擇,一種是用戶自定義提交的攻擊測試用例,另一種是使用模塊中自帶的默認的攻擊測試用例。首先啟動配置子模塊,用戶在自定義測試用例的窗口導(dǎo)入自定義的測試用例或選擇使用默認配置,導(dǎo)入的內(nèi)容將會替換模塊中默認的測試用例,形成新的測試用例。默認的測試用例主要由六類,分別是屬性類、標簽類、標簽分割類、XSF類、CSS類和mXSS類,這六類是根據(jù)攻擊位置的不同來劃分的,在本文的第三部分已經(jīng)有介紹。默認情況下,每一類測試用例集合中都有十個攻擊測試用例,所以所有測試用例加起來一共有六十個,當(dāng)然,這只是眾多XSS攻擊測試用例中的冰山一角。由用戶自定義測試用例或使用默認測試用例之后,將會啟動生成子模塊,該模塊根據(jù)URL網(wǎng)址的不同類別,選擇相應(yīng)類別的攻擊測試用例,添加到最終的測試用例集合中。
(2) XSS檢測模塊:XSS檢測模塊從headers生成模塊獲取headers信息,從URL生成模塊獲取URL鏈接,根據(jù)表單的提交方式的不同從而生成新的網(wǎng)絡(luò)請求包,緊接著啟動下載模塊,利用download()函數(shù)下載當(dāng)前待測試的URL鏈接的網(wǎng)頁頁面。檢測模塊由四個子模塊組成,分別是headers生成模塊、URL生成模塊、XSS檢測模塊和輸出模塊。
headers生成模塊:headers生成模塊為用戶提供了兩種選擇,用戶可以自定義headers的內(nèi)容,也可以使用模塊中默認的headers,headers是一個元組,headers的代碼格式為{name: value},但是在用戶輸入的窗口界面,用戶只需要輸入name和value即可。生成的headers信息將會傳遞到XSS檢測模塊中。
URL生成模塊:URL生成模塊是檢測模塊中的一個重要模塊,該模塊需要將攻擊測試用例插入到URL的各個參數(shù)中,形成新的待測試的URL鏈接。
XSS檢測模塊:XSS檢測模塊從headers生成模塊獲取headers信息,從URL生成模塊獲取URL鏈接,根據(jù)表單的提交方式的不同從而生成新的網(wǎng)絡(luò)請求包,緊接著啟動下載模塊,利用download()函數(shù)下載當(dāng)前待測試的URL鏈接的網(wǎng)頁頁面。
輸出模塊:輸出模塊主要負責(zé)輸出XSS漏洞信息。該模塊接收來自XSS檢測模塊的XSS漏洞信息,一旦接收到XSS漏洞信息,直接發(fā)出提示音,提醒用戶發(fā)現(xiàn)XSS漏洞,并且在程序界面窗口打印出相關(guān)XSS漏洞信息。
3 測試
在測試過程中,系統(tǒng)右下角的攻擊用例模型會實時高亮當(dāng)前提交的測試用例所屬類型,如圖4所示,當(dāng)前提交的測試用例所屬類型是屬性截斷,在界面上顯示是屬性截斷的按鈕字體變紅且凹陷下去,在下方用藍色字體顯示出當(dāng)前提交的具體測試用例。系統(tǒng)包含了attr測試、tag測試、tag-split測試、css測試、xsf測試和mxss測試。
4 總結(jié)
本系統(tǒng)首先建立XSS攻擊用例模型,設(shè)計實現(xiàn)了一個高效的多線程網(wǎng)絡(luò)爬蟲和XSS檢測模塊,利用網(wǎng)絡(luò)爬蟲爬取網(wǎng)站的URL鏈接和表單,并根據(jù)XSS攻擊用例模型生成測試用例,利用XSS檢測模塊向網(wǎng)站提交測試用例,以檢測網(wǎng)站是否存在XSS漏洞。
本系統(tǒng)的網(wǎng)絡(luò)爬蟲模塊和XSS檢測模塊中均使用了多線程技術(shù),大大提高了檢測效率。網(wǎng)絡(luò)爬蟲模塊將解析到的網(wǎng)站鏈接以樹狀圖的形式在程序界面顯示出來,用戶可以直觀的查看該網(wǎng)站的整體結(jié)構(gòu)。系統(tǒng)實現(xiàn)了數(shù)據(jù)的實時顯示功能,可以讓用戶能及時的了解到系統(tǒng)運行的狀況和網(wǎng)站的檢測狀況,提高了系統(tǒng)與用戶的交互性。
參考文獻:
[1] 張劍鐘. 基于跨站腳本的攻擊與防范研究[D]. 山東理工大學(xué), 2010.
[2] 邵鵬. 基于滲透測試的跨站腳本漏洞檢測研究[D].2013.
[3] 鮑澤民. 跨站腳本攻擊客戶端防御技術(shù)研究[D].北京交通大學(xué).2014.
[4] 張躍華, 王長春. 淺析跨站腳本的攻擊與防御[J]. 現(xiàn)代計算機:專業(yè)版, 2009(2):109-110.
[5] 史冬蕾. 基于PHP的網(wǎng)站信息安全研究[D]. 西安工業(yè)大學(xué), 2016.