亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于模糊測試的反射型跨站腳本漏洞檢測

        2021-09-18 06:22:04萍,陳
        計算機(jī)應(yīng)用 2021年9期
        關(guān)鍵詞:漏洞應(yīng)用程序頁面

        倪 萍,陳 偉

        (南京郵電大學(xué)計算機(jī)學(xué)院,南京 210023)

        (*通信作者電子郵箱chenwei@njupt.edu.cn)

        0 引言

        隨著因特網(wǎng)技術(shù)的日益發(fā)展,現(xiàn)代萬維網(wǎng)(World Wide Web,WWW)應(yīng)用程序呈現(xiàn)高度動態(tài)、交互性強(qiáng)的特點(diǎn)。Web 用戶是網(wǎng)站的瀏覽者,同時也是網(wǎng)站的創(chuàng)造者。通常,Web應(yīng)用程序允許捕獲、處理、存儲以及傳輸敏感的客戶數(shù)據(jù)(比如個人詳細(xì)信息、信用卡號等)[1]以供客戶使用。因此,Web 應(yīng)用程序已經(jīng)成為黑客們的特別關(guān)注點(diǎn),進(jìn)而帶來的就是一系列的Web 安全威脅,如結(jié)構(gòu)化查詢語言(Structured Query Language,SQL)注入、跨站腳本(Cross-Site Scripting,XSS)、文件上傳、命令執(zhí)行等[2]。

        根據(jù)White Hat Security 的統(tǒng)計分析,XSS 攻擊約占網(wǎng)絡(luò)攻擊的一半。在2004、2007、2010、2013 以 及2017 年 的OWASP TOP 10[3]中,XSS 分別位居第四、第四、第一、第三、第七名,并且,2019 年的互聯(lián)網(wǎng)安全威脅報告顯示,利用XSS 漏洞引起的釣魚攻擊和表單劫持給企業(yè)帶來了巨大損失。XSS攻擊主要是由于攻擊者向Web 應(yīng)用程序頁面中嵌入惡意的腳本代碼,在用戶瀏覽相關(guān)頁面時,這些惡意腳本會在客戶端瀏覽器中執(zhí)行,從而引發(fā)攻擊,竊取用戶隱私,損害用戶利益[4-5]。因此,積極應(yīng)對并充分保護(hù)網(wǎng)站免受此類攻擊變得越來越重要。

        傳統(tǒng)的XSS檢測方法一般是通過黑名單備份的方式進(jìn)行過濾,當(dāng)網(wǎng)絡(luò)一旦獲取到黑名單中存在的數(shù)據(jù)就進(jìn)行攔截,從而避免了一些惡意請求。盡管該過濾器能對Web 用戶起到一定的保護(hù)作用,但是對于一些經(jīng)過加密的數(shù)據(jù)就無法被準(zhǔn)確地檢測到,檢測質(zhì)量并不高。目前,盡管有許多研究人員通過靜態(tài)或動態(tài)的測試方法來對XSS 漏洞進(jìn)行檢測,但也暴露出了一些問題:靜態(tài)分析是通過對應(yīng)用程序的源代碼進(jìn)行分析來發(fā)現(xiàn)系統(tǒng)中潛在的漏洞[6],但在很多情況下,研究人員無法輕易獲取到程序源碼;動態(tài)分析[7]雖然相較于靜態(tài)分析而言,適用性較強(qiáng),并且無須源碼,但是不全面的攻擊向量可能會造成較高的誤報率,所以需要向漏洞點(diǎn)注入大量的攻擊向量來降低誤報率,可是這樣針對性不強(qiáng),并且會大大增加檢測時間,降低效率。

        針對以上問題,本文所做的主要工作如下:

        1)傳統(tǒng)的網(wǎng)絡(luò)爬蟲技術(shù)是通過對給定的統(tǒng)一資源定位符(Uniform Resource Locator,URL)進(jìn)行迭代爬取,直至達(dá)到爬取深度,從而獲得頁面上的注入點(diǎn)。但是由于當(dāng)前許多Web網(wǎng)頁是通過AJAX 和Javascript 的形式動態(tài)產(chǎn)生內(nèi)容,所以本文通過提取頁面中的JavaScript 腳本以及其中的一些事件屬性,使用JS 引擎進(jìn)行編譯執(zhí)行,從而獲取到更多的潛在注入點(diǎn),為更好地挖掘漏洞奠定基礎(chǔ)。

        2)在對模糊測試技術(shù)的研究和分析之上,開發(fā)和實(shí)現(xiàn)了一種基于設(shè)計規(guī)則和測試用例“變異”的模糊測試算法來生成攻擊語法。由于一般的模糊檢測方案生成攻擊載荷手段單一且容易造成誤報率,所以,本文的創(chuàng)新點(diǎn)在于對攻擊語法中的每個元素使用權(quán)重的方式進(jìn)行標(biāo)記,根據(jù)評估Web 應(yīng)用程序的響應(yīng)來進(jìn)一步調(diào)整攻擊語法中的元素權(quán)重,由此找到最有潛力的攻擊載荷來發(fā)掘應(yīng)用程序中存在的反射型XSS漏洞。

        3)通過與其他兩個流行的XSS 攻擊檢測工具進(jìn)行對比,實(shí)驗(yàn)結(jié)果表明,本文對模糊測試方法的改進(jìn)方式是有效的,該方法在漏洞檢測率和誤報率上呈現(xiàn)一定優(yōu)勢。

        1 相關(guān)工作

        XSS 漏洞作為Web 應(yīng)用程序中最嚴(yán)重的安全威脅之一[8-9],自1996 年被發(fā)現(xiàn)以來便引起了國內(nèi)外學(xué)者的廣泛關(guān)注,很多研究組織或機(jī)構(gòu)人員已經(jīng)對其檢測工作作了大量的研究并提出相關(guān)方法,主要包括三類:靜態(tài)分析方法、動態(tài)分析方法以及動靜結(jié)合的分析方法[10]。

        Zheng 等[11]提出遠(yuǎn)程執(zhí)行代碼漏洞檢測Web 應(yīng)用程序的路徑敏感靜態(tài)分析,這是一種通過路徑和上下文敏感的過程間分析來檢測遠(yuǎn)程控制(Remote Control Equipment,RCE)漏洞的方法。分析的特點(diǎn)是以路徑敏感的方式分析Web 應(yīng)用程序的字符串和非字符串行為。Medeiros 等[12]提出使用靜態(tài)分析和數(shù)據(jù)挖掘檢測來刪除Web應(yīng)用程序漏洞。

        由于靜態(tài)分析方法依賴于應(yīng)用程序的源代碼,而在檢測過程中獲取應(yīng)用程序源碼是一件非常困難的事情,并且靜態(tài)檢測方法也無法驗(yàn)證漏洞的真實(shí)性,所以存在一定的局限性,于是,更多的人傾向于使用動態(tài)或動靜結(jié)合的方法來檢測漏洞。Duchene 等[13]提出了一種用于檢測Web 應(yīng)用程序跨站腳本漏洞的黑盒模糊器。該模糊器通過遺傳算法來產(chǎn)生惡意輸入,使用攻擊語法作為算法參數(shù),攻擊語法可以通過限制交叉和變異操作來減少搜索空間并模擬攻擊行為,又由于原始字符串匹配的方法可能無法精確地推斷出污點(diǎn)位置,因此它使用雙重污點(diǎn)推斷來獲得準(zhǔn)確的結(jié)果。雖然此方法利用控制流依賴和數(shù)據(jù)流依賴來引導(dǎo)模糊測試并解決了大多數(shù)黑盒檢測器無法檢測反射型XSS 的問題,但該方法不支持AJAX 程序,應(yīng)用范圍受限。程誠等[14]提出了一種基于模糊測試和遺傳算法的XSS漏洞檢測方法。該方法主要是通過分析服務(wù)端的過濾機(jī)制來定義攻擊向量的語法補(bǔ)全規(guī)則,再使用遺傳算法不斷分析和優(yōu)化攻擊載荷以生成最優(yōu)向量;可是該方法中使用的攻擊代碼需要手動輸入,人工操作量大,沒有實(shí)現(xiàn)自動化。黃文峰等[15]提出了一種使用擴(kuò)展的巴科斯范式(Extended Backus-Naur Form,EBNF)和二次爬蟲策略相結(jié)合的方式檢測XSS 漏洞,但該方法并未涉及反爬蟲及如何對抗Web 應(yīng)用防火墻(Web Application Firewall,WAF)的措施,而且在實(shí)驗(yàn)階段使用的是自己開發(fā)的應(yīng)用程序,可行性有待考證。

        很多基于傳統(tǒng)的XSS漏洞檢測技術(shù)在挖掘漏洞注入點(diǎn)方面未考慮網(wǎng)站的反爬機(jī)制,亦或者是忽視了那些不支持AJAX的網(wǎng)站,因此導(dǎo)致用戶注入點(diǎn)采集不全面,并且,也因?yàn)閄SS攻擊載荷種類單一或檢測覆蓋面不足等一系列問題,最終導(dǎo)致系統(tǒng)檢測性能低,無法全面有效地發(fā)現(xiàn)漏洞,所以本文提出一種基于模糊測試的反射型XSS漏洞檢測方法。該方法提取了頁面中的JavaScript 腳本,通過JS 引擎進(jìn)行編譯執(zhí)行,挖掘更多潛在的用戶注入點(diǎn),降低了漏報率;同時,還考慮了因攻擊向量選取不足或選取過量而導(dǎo)致的檢測時間長等問題。本文根據(jù)探子向量注入獲取輸出點(diǎn)類型,根據(jù)輸出點(diǎn)類型選擇相應(yīng)攻擊語法模式構(gòu)造攻擊載荷并變異進(jìn)行檢測,當(dāng)然,為了更有針對性地利用對網(wǎng)站響應(yīng)的攻擊載荷進(jìn)行分析并生成更加高效的攻擊載荷從而更快地找到存在的漏洞,本文提出了一種基于模糊測試的反射型XSS 漏洞檢測技術(shù),通過對攻擊語法中的每一個元素進(jìn)行初始化權(quán)重值,再根據(jù)服務(wù)器響應(yīng)情況調(diào)整權(quán)重由此生成更優(yōu)質(zhì)的攻擊載荷,進(jìn)而節(jié)約了檢測時間、提高了檢測效率。

        2 相關(guān)技術(shù)

        2.1 網(wǎng)絡(luò)爬蟲

        2.1.1 定義及其基本原理

        網(wǎng)絡(luò)爬蟲[16]是根據(jù)一定的規(guī)則,自動地爬取互聯(lián)網(wǎng)信息的一個程序或者一段腳本,被廣泛應(yīng)用于各種搜索引擎以及其他相關(guān)網(wǎng)站[17],能夠自動獲取其能訪問到的所有頁面內(nèi)容信息。

        網(wǎng)絡(luò)爬蟲從功能上來說一般分為數(shù)據(jù)采集、處理、存儲三個部分。首先從給定的一個或者若干個網(wǎng)站URL 開始,獲取初始URL,然后對頁面內(nèi)容進(jìn)行分析,尋找頁面中包含的其他鏈接地址存入待爬取隊列中,根據(jù)待爬取隊列中的鏈接依次出隊經(jīng)過解析獲取其中的URL 信息,由此循環(huán),直至滿足某個條件后停止工作。

        2.1.2 抓取策略

        在網(wǎng)絡(luò)爬蟲系統(tǒng)中,待爬取URL 隊列是特別重要的一個部分,在待爬取URL 隊列中URL 以一種什么樣的順序進(jìn)行存儲是一個會直接決定爬取效率的因素,所以,如何選擇影響到這些URL 順序的抓取策略是至關(guān)重要的。以下是幾種常見的網(wǎng)絡(luò)爬蟲爬取策略:

        1)深度優(yōu)先遍歷策略。一般是從起始網(wǎng)頁開始,對該頁面進(jìn)行分析,然后選擇其中的一個URL 再次進(jìn)入解析,如此循環(huán)抓取,直至到達(dá)一個深度閾值,再返回上一層以同樣的方法進(jìn)行爬取。由于一般網(wǎng)站,每深入一層,其網(wǎng)頁價值以及PageRank都會有所降低,因此該策略很少被使用。

        2)最佳優(yōu)先遍歷策略。就是根據(jù)特定的網(wǎng)頁分析算法來預(yù)測待選URL 中與目標(biāo)網(wǎng)頁類似或相近的URL 進(jìn)行爬取。因?yàn)檫@種算法只會涉及到網(wǎng)頁分析算法認(rèn)為“有用”的URL,所以在爬取過程中會忽略掉許多相關(guān)頁面,從而降低了爬取質(zhì)量。

        3)廣度優(yōu)先遍歷策略。是指在采集鏈接的過程中,將當(dāng)前頁面的所有URL 鏈接都爬取下來,然后再對其子鏈接進(jìn)行相同操作的分析獲取。該策略實(shí)現(xiàn)起來相對簡單,并且能夠較為全面地獲取到網(wǎng)頁中的URL 鏈接,提升了頁面爬取質(zhì)量。

        2.2 模糊測試

        2.2.1 概念

        模糊測試(Fuzzing test)[17]是最初由威斯康星大學(xué)的巴頓米勒在1989 年開發(fā)的一種軟件測試技術(shù)。模糊測試技術(shù)通過自動或者半自動地生成無效、意外或隨機(jī)數(shù)據(jù)作為計算機(jī)程序的輸入,然后監(jiān)視程序是否出現(xiàn)異常,例如崩潰、內(nèi)置代碼斷言失敗等情況,以發(fā)現(xiàn)程序中可能存在的錯誤。

        和傳統(tǒng)的漏洞挖掘方法比起來,模糊測試更具優(yōu)勢。由于模糊測試是通過動態(tài)實(shí)際執(zhí)行的,而不是靜態(tài)分析,所以它比基于源代碼的白盒測試的適用范圍更廣、誤報率更低;模糊測試原理簡單,不存在大量的公式計算和理論推導(dǎo);其自動化程度高,不同于逆向工程中需要大量的人工參與。模糊測試技術(shù)的這些優(yōu)點(diǎn)讓其成為一種備受歡迎的漏洞挖掘技術(shù)。

        2.2.2 類型

        模糊測試可以分成基于生成的模糊器和基于變異的模糊器,區(qū)分它們的關(guān)鍵取決于輸入是從頭生成還是通過修改現(xiàn)有的輸入來生成:

        1)基于生成的模糊器是從頭開始生成輸入,它不依賴于種子輸入語料庫的存在或質(zhì)量。

        2)基于變異的模糊器在模糊過程中是根據(jù)現(xiàn)有的種子輸入語料庫進(jìn)行的,它通過修改或者突變提供的種子向量來生成輸入數(shù)據(jù)。

        2.3 Selenium Webdriver

        Selenium[18]是一個由ThoughtWorks 公司開發(fā)的,用來自動化測試Web 應(yīng)用程序的工具。它能夠直接運(yùn)行在瀏覽器上,像真正的用戶一樣操作網(wǎng)頁。

        Webdriver 是一組由W3C 協(xié)會制定的用來描述瀏覽器操作的標(biāo)準(zhǔn)接口。Selenium Webdriver 無法在瀏覽器上直接運(yùn)行,必須先運(yùn)行部署在本地的Webdriver 驅(qū)動程序,接著根據(jù)驅(qū)動程序來啟動瀏覽器,從而控制瀏覽器去執(zhí)行測試腳本。

        3 基于模糊測試的反射型XSS漏洞檢測

        本文設(shè)計的XSS 漏洞檢測系統(tǒng)整體結(jié)構(gòu)分三個部分,分別是網(wǎng)頁爬蟲模塊、模糊測試用例生成模塊以及攻擊與分析調(diào)整模塊。網(wǎng)頁爬蟲模塊又包括爬取子模塊和網(wǎng)頁分析子模塊,爬取子模塊主要負(fù)責(zé)爬取網(wǎng)站中指定深度的所有有效鏈接,然后將其傳送到網(wǎng)頁分析子模塊來對頁面中的用戶輸入點(diǎn)進(jìn)行提取,并保存到數(shù)據(jù)庫中。模糊測試用例生成模塊主要負(fù)責(zé)通過向爬取到的注入點(diǎn)注入探子向量來獲取輸出點(diǎn)類型,并且選擇對應(yīng)的攻擊語法形式并用帶有權(quán)重值的元素進(jìn)行填充,以此構(gòu)造初始有效載荷并進(jìn)行變異模糊化得到變異攻擊載荷進(jìn)行測試。攻擊與分析調(diào)整模塊主要是將生成的有效載荷通過注入點(diǎn)發(fā)送到被測系統(tǒng)(System Under Test,SUT),并且通過觀察服務(wù)器返回的響應(yīng)對元素權(quán)重進(jìn)行調(diào)整,由此形成攻擊成功率更高的攻擊載荷進(jìn)行檢測,從而發(fā)現(xiàn)漏洞。系統(tǒng)總體結(jié)構(gòu)如圖1所示。

        圖1 系統(tǒng)總體結(jié)構(gòu)Fig.1 Overall system structure

        3.1 網(wǎng)頁爬蟲模塊

        該模塊主要負(fù)責(zé)對指定網(wǎng)站中的用戶輸入點(diǎn)進(jìn)行獲取并保存。首先,本文使用基于廣度優(yōu)先遍歷的網(wǎng)絡(luò)爬蟲策略,通過用戶提供的起始URL 作為入口,爬取指定深度的所有有效URL 并將其發(fā)送到網(wǎng)頁分析子模塊,在對URL 頁面內(nèi)容進(jìn)行解析時,采用定位功能來對所需要的元素信息進(jìn)行定位,從而獲取到頁面中存在的用戶輸入點(diǎn),將其提交地址與輸入內(nèi)容保存到數(shù)據(jù)庫中,以便之后的注入測試使用。

        當(dāng)然,現(xiàn)在大部分網(wǎng)站需要通過登錄用戶名和密碼才能訪問,所以該模塊可以提供網(wǎng)站的cookie 信息來獲取頁面的超文本標(biāo)記語言(HyperText Markup Language,HTML)內(nèi)容。在采集頁面中的信息時,由于目前的Web 網(wǎng)頁中很多內(nèi)容都是非靜態(tài)的,需要通過點(diǎn)擊事件或滑動頁面等操作才能顯示出來,針對這些需要動態(tài)加載的數(shù)據(jù),本文提取了頁面中的JavaScript 腳本以及其中的一些事件屬性,通過JS 引擎進(jìn)行編譯執(zhí)行,從而獲取到動態(tài)URL。

        在爬取過程中,獲得的部分URL 可能并不是所需要的,比如一些資源文件鏈接、圖片鏈接、重復(fù)URL 等,所以,對爬取到的鏈接地址進(jìn)行有效地過濾是必不可少的步驟。主要的過濾行為有以下幾種:

        1)對無效URL 進(jìn)行過濾。無效URL 包含非同源URL 和非正常URL 兩種情況。首先,同源是指協(xié)議名、域名以及端口號都相同的網(wǎng)站。由于每個網(wǎng)站都有可能引入一些站外鏈接,但XSS檢測僅僅是針對本站的URL,因此在爬取過程中只會采集同源URL,就是通過與被檢測的起始URL 進(jìn)行協(xié)議、域名、端口號的比較,如果都一致,則判定為站內(nèi)域名;否則丟棄。其次就是對一些不正常的URL 進(jìn)行剔除,比如說一些標(biāo)簽的src屬性的屬性值是空字符串或者偽協(xié)議,這一類的內(nèi)容不應(yīng)該加入到待爬取隊列中。

        2)對重復(fù)URL 進(jìn)行過濾。在采集過程中,每個頁面可能有重復(fù)的URL 會被多次獲取到,進(jìn)而造成重復(fù)解析、浪費(fèi)系統(tǒng)資源的情況,因此本文使用Bloom Filter+Redis 的方法進(jìn)行去重,降低重復(fù)URL的概率。

        3)對相似URL 進(jìn)行過濾。許多URL 可能在協(xié)議、域名、端口號以及參數(shù)上完全相同,但參數(shù)值不同,對于這類URL也沒必要進(jìn)行重復(fù)解析,占用資源。

        4)去除不可訪問URL。通過發(fā)送超文本傳輸協(xié)議(HyperText Transfer Protocol,HTTP)請求獲取響應(yīng)狀態(tài)碼,檢查狀態(tài)碼是否為200,對于那些不可訪問的URL,應(yīng)予以剔除。

        注入點(diǎn)提取模塊的主要流程如下:

        步驟1 對用戶提供的初始URL 和爬取深度H進(jìn)行判斷:若爬取深度是0,則不需要爬取網(wǎng)頁內(nèi)容;否則,就將初始URL加入待爬取隊列。

        步驟2 對待爬取URL 隊列進(jìn)行遍歷,獲取該URL 對應(yīng)的網(wǎng)頁源碼。

        步驟3 定位查找網(wǎng)頁源碼中的全部URL 并分析其中可能的用戶交互點(diǎn),對其進(jìn)行過濾操作后添加到待爬取隊列中。

        步驟4 若當(dāng)前深度的待爬取URL 隊列遍歷結(jié)束,則將當(dāng)前爬取深度加1。

        步驟5 如果待爬取URL 隊列為空或者是檢測深度達(dá)到用戶提供的爬取深度,那么爬蟲結(jié)束;否則返回步驟2。

        具體流程如圖2所示。

        圖2 爬蟲提取模塊流程Fig.2 Flowchart of crawler extraction module

        在對頁面進(jìn)行解析時,一般包含兩種操作行為:提取新的URL 以及獲取當(dāng)前頁面注入點(diǎn)。在HTML5中,URL 通常存在于href、src、action 等可以指定網(wǎng)站鏈接的屬性中。同樣,一般情況下,頁面的注入點(diǎn)則存在于form 表單的input 標(biāo)簽、textarea 標(biāo)簽或者是iframe 包含的表單中。當(dāng)然,對于之前所說的潛在注入點(diǎn),即那些可能導(dǎo)致頁面DOM 結(jié)構(gòu)發(fā)生變化或者說是出現(xiàn)更多注入點(diǎn)的用戶交互點(diǎn)標(biāo)簽,諸如鼠標(biāo)懸浮、點(diǎn)擊事件等,此時,就需要對當(dāng)前頁面重新解析并提取所謂的潛在注入點(diǎn)和URL。本文使用python 的第三方庫BeautifulSoup對頁面HTML 進(jìn)行URL 和注入點(diǎn)搜索,并存于指定隊列中。主要流程如圖3所示。

        圖3 注入點(diǎn)提取模塊流程Fig.3 Flowchart of injection point extraction module

        3.2 模糊測試用例生成模塊

        檢測XSS 漏洞的主要步驟就是對攻擊向量的合理選取,直接關(guān)系到檢測系統(tǒng)的性能問題:若攻擊向量選取不足或者是不適當(dāng),則會導(dǎo)致最終的檢測結(jié)果誤報漏報情況嚴(yán)重;但如果攻擊向量選取過量又會造成檢測效率的下降。所以,為了有效、有質(zhì)地檢測出XSS漏洞,本文開發(fā)了一個通過調(diào)整權(quán)重值方式來構(gòu)造最有潛力攻擊載荷的模糊測試生成器,該生成器通過接收元素作為基礎(chǔ)數(shù)據(jù),元素指的是JavaScript 和HTML的關(guān)鍵字和基本字符,使用配置文件的形式進(jìn)行定義。

        從理論可知,引發(fā)XSS 漏洞產(chǎn)生的根本原因是瀏覽器或者服務(wù)器端沒有對用戶輸入的內(nèi)容進(jìn)行嚴(yán)謹(jǐn)或充分的過濾,所以,在檢測該漏洞時要設(shè)計足夠且豐富的測試向量來繞過過濾器,從而找到網(wǎng)站漏洞。因此,本文的攻擊載荷生成模塊包括初始攻擊載荷生成和變異攻擊載荷生成。初始攻擊載荷生成模塊的設(shè)計主要是為了構(gòu)建種類豐富的初始XSS攻擊載荷庫,由于攻擊載荷的選取會對漏洞的檢出率產(chǎn)生直接影響,所以使用盡量少的攻擊載荷來檢測更多的漏洞是系統(tǒng)的關(guān)鍵,因此在構(gòu)建初始攻擊載荷庫時結(jié)合了目前經(jīng)過檢驗(yàn)后比較有效的攻擊向量,且盡量多地分析輸出點(diǎn)類型,以保證初始XSS 攻擊載荷庫豐富而精確,為漏洞檢測提供基礎(chǔ)數(shù)據(jù);同樣,為了更多地繞過過濾機(jī)制,還對初始攻擊載荷進(jìn)行模糊化,形成變異攻擊載荷,提高載荷精度。主要過程如圖4 所示。

        圖4 攻擊載荷生成模塊過程Fig.4 Process of attack payload generation module

        3.2.1 初始攻擊載荷生成

        OWASP XSS Cheat Sheet[19]是由國外著名的安全工程師Rsnake 提出的一份XSS 攻擊腳本列表,可以用來對Web 應(yīng)用程序中的XSS漏洞進(jìn)行檢測。本文將它當(dāng)作適當(dāng)攻擊模式的參考來源,并且在對一些常見用戶輸出點(diǎn)類型分析之后,定義了自己的攻擊載荷語法形式。當(dāng)然,為了將語法定義轉(zhuǎn)換成實(shí)際的攻擊載荷,有必要對元素進(jìn)行分組歸類,分別將HTML標(biāo)簽和HTML 事件定義符號為“TAG_HTML”和“EVENT”;同時,也確定了能夠被瀏覽器解釋為空白的字符,例如“ ”“ ”等;并且,其他的一些閉合元素也被定義,這些字符或符號都被保存在配置文件中。表1 展示了部分攻擊載荷語法的基本元素符號及其對應(yīng)的元素。

        表1 基本元素符號及其對應(yīng)元素Tab.1 Basic element symbols and their corresponding elements

        由于在測試過程中會對每一個注入點(diǎn)注入大量的生成載荷,從而導(dǎo)致客戶端與服務(wù)器的交互次數(shù)不斷增加,進(jìn)而降低檢測效率,所以,本文在進(jìn)行檢測之前先使用探子請求向量進(jìn)行探測,即在測試之前,構(gòu)造合法向量注入輸入點(diǎn),然后根據(jù)響應(yīng)頁面的輸出點(diǎn)類型對攻擊語法模式進(jìn)行選擇,輸出點(diǎn)類型一般分為如下幾類:

        1)HTML 普通標(biāo)簽之間。HTML 普通標(biāo)簽一般包括div、p、span、li 等,在這類標(biāo)簽之間則會選用諸如以下序列組成的攻擊語法:

        2)在HTML 標(biāo)簽屬性值之內(nèi)。此類輸出點(diǎn)一般存在于如img的src屬性、a標(biāo)簽的href屬性。這種情況通常會先用閉合模塊將前面的屬性閉合,再進(jìn)行正常攻擊。此時可以選擇諸如以下序列生成的攻擊語法模板:

        3)在HTML 特殊標(biāo)簽之間。此類標(biāo)簽一般是指iframe、title、noscript 之類的標(biāo)簽,因?yàn)樵谶@類標(biāo)簽中,js 腳本無法執(zhí)行,所以需要先將此類標(biāo)簽閉合再進(jìn)行攻擊,這里可以選擇和第2)類一樣的攻擊模板,只不過在這樣的攻擊模板中,“OUTBREAK”不能是單純的符號閉合,而是根據(jù)實(shí)際情況產(chǎn)生的標(biāo)簽閉合。

        4)在Javascript 偽協(xié)議中。用戶輸出有時可能會作為js的一部分,此時可以選擇諸如以下序列組成的攻擊語法:

        5)在層疊樣式表(Cascading Style Sheets,CSS)樣式中。CSS作為定義HTML的樣式,主要通過