劉偉明+曾澤宇+劉帥+張瑞霞


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