本發(fā)明涉及Web應(yīng)用測(cè)試技術(shù)領(lǐng)域,尤其涉及一種基于虛擬解析的漏洞檢測(cè)方法及其裝置。
背景技術(shù):
近年來,隨著Web應(yīng)用的廣泛使用,Web安全問題也日益突出。其中,XSS(Cross-site scripting,跨站腳本攻擊)漏洞已成為Web應(yīng)用程序中最常見的漏洞之一,因此,對(duì)XSS漏洞的自動(dòng)化檢測(cè)也成為了一項(xiàng)重要的技術(shù)。
目前,一般采用XSS檢測(cè)工具來檢測(cè)XSS漏洞,其具體過程如下:(1)XSS檢測(cè)工具捕獲客戶端(瀏覽器)所發(fā)送的http請(qǐng)求;(2)XSS檢測(cè)工具構(gòu)造帶有特征值的請(qǐng)求;(3)XSS檢測(cè)工具將帶有特征值的請(qǐng)求發(fā)送至Web服務(wù)器,Web服務(wù)器響應(yīng)該請(qǐng)求;(4)XSS檢測(cè)工具在該請(qǐng)求響應(yīng)的頁面源代碼中檢測(cè)特征值,若在某處檢測(cè)到特征值,則認(rèn)為此處為一個(gè)XSS漏洞。
但是,上述漏洞檢測(cè)方法中未對(duì)可能的XSS輸出點(diǎn)進(jìn)行定位,從而檢測(cè)的準(zhǔn)確性較低。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例所要解決的技術(shù)問題是:提供一種基于虛擬解析的漏洞檢測(cè)方法,以提高檢測(cè)的準(zhǔn)確性。
為解決上述技術(shù)問題,本發(fā)明實(shí)施例采用的技術(shù)方案如下:
提供一種基于虛擬解析的漏洞檢測(cè)方法,包括:
接收客戶端所發(fā)送的用戶請(qǐng)求;
對(duì)所述用戶請(qǐng)求插入探針以獲取目標(biāo)注入?yún)?shù)、目標(biāo)輸出點(diǎn)、所述目標(biāo)輸出點(diǎn)的上下文信息及所述目標(biāo)輸出點(diǎn)的XPath;
根據(jù)所述目標(biāo)輸出點(diǎn)的上下文信息構(gòu)造目標(biāo)特征值;
針對(duì)所述目標(biāo)注入?yún)?shù),向Web服務(wù)器發(fā)送帶有所述目標(biāo)特征值的檢測(cè)請(qǐng)求;
接收所述Web服務(wù)器對(duì)所述檢測(cè)請(qǐng)求的第一響應(yīng)結(jié)果,所述第一響應(yīng)結(jié)果包括頁面源代碼;
根據(jù)虛擬解析器對(duì)所述頁面源代碼進(jìn)行解析以得到第一解析頁面;
根據(jù)所述目標(biāo)輸出點(diǎn)的XPath對(duì)所述第一解析頁面進(jìn)行特征值檢測(cè)以得到XSS漏洞。
具體地,所述用戶請(qǐng)求中包括至少一個(gè)參數(shù),對(duì)所述用戶請(qǐng)求插入探針以獲取目標(biāo)注入?yún)?shù)、目標(biāo)輸出點(diǎn)、所述目標(biāo)輸出點(diǎn)的上下文信息及所述目標(biāo)輸出點(diǎn)的XPath具體包括:
對(duì)每一個(gè)所述參數(shù)構(gòu)造所述探針并發(fā)送帶有所述探針的第一請(qǐng)求至Web服務(wù)器,且所述探針具有唯一性;
接收所述Web服務(wù)器針對(duì)所述第一請(qǐng)求的第二響應(yīng)結(jié)果,并根據(jù)所述第二響應(yīng)結(jié)果獲取所述目標(biāo)注入?yún)?shù)、目標(biāo)輸出點(diǎn)、所述目標(biāo)輸出點(diǎn)的上下文信息及所述目標(biāo)輸出點(diǎn)的XPath。
可選地,所述第二響應(yīng)結(jié)果包括頁面源代碼,根據(jù)所述第二響應(yīng)結(jié)果獲取所述目標(biāo)注入?yún)?shù)、目標(biāo)輸出點(diǎn)、所述目標(biāo)輸出點(diǎn)的上下文信息及所述目標(biāo)輸出點(diǎn)的XPath具體包括:
檢測(cè)所述頁面源代碼中是否存在所述探針;
若存在,則確定所述探針?biāo)诘奈恢脼樗瞿繕?biāo)輸出點(diǎn),同時(shí)確定所述探針?biāo)鶎?duì)應(yīng)的參數(shù)為所述目標(biāo)注入?yún)?shù),同時(shí)確定所述探針?biāo)鶎?duì)應(yīng)的參數(shù)為所述目標(biāo)注入?yún)?shù),并獲取所述目標(biāo)輸出點(diǎn)的上下文信息及所述目標(biāo)輸出點(diǎn)的XPath。
可選地,所述第二響應(yīng)結(jié)果包括頁面源代碼,根據(jù)所述第二響應(yīng)結(jié)果獲取所述目標(biāo)注入?yún)?shù)、目標(biāo)輸出點(diǎn)、所述目標(biāo)輸出點(diǎn)的上下文信息及所述目標(biāo)輸出點(diǎn)的XPath具體包括:
根據(jù)所述虛擬解析器對(duì)所述頁面源代碼進(jìn)行解析以得到第二解析界面;
檢測(cè)所述第二解析界面中是否存在所述探針;
若存在,則確定所述探針?biāo)诘奈恢脼樗瞿繕?biāo)輸出點(diǎn),同時(shí)確定所述探針?biāo)鶎?duì)應(yīng)的參數(shù)為所述目標(biāo)注入?yún)?shù),同時(shí)確定所述探針?biāo)鶎?duì)應(yīng)的參數(shù)為所述目標(biāo)注入?yún)?shù),并獲取所述目標(biāo)輸出點(diǎn)的上下文信息及所述目標(biāo)輸出點(diǎn)的XPath。
具體地,該用戶請(qǐng)求為http請(qǐng)求。
相應(yīng)地,本發(fā)明實(shí)施例還提供了一種基于虛擬解析的漏洞檢測(cè)裝置,包括:
接收模塊,用于接收客戶端所發(fā)送的用戶請(qǐng)求;
獲取模塊,用于對(duì)所述用戶請(qǐng)求插入探針以獲取目標(biāo)注入?yún)?shù)、目標(biāo)輸出點(diǎn)、所述目標(biāo)輸出點(diǎn)的上下文信息及所述目標(biāo)輸出點(diǎn)的XPath;
構(gòu)造模塊,用于根據(jù)所述目標(biāo)輸出點(diǎn)的上下文信息構(gòu)造目標(biāo)特征值;
發(fā)送模塊,用于針對(duì)所述目標(biāo)注入?yún)?shù),向Web服務(wù)器發(fā)送帶有所述目標(biāo)特征值的檢測(cè)請(qǐng)求;
所述接收模塊還用于接收所述Web服務(wù)器對(duì)所述檢測(cè)請(qǐng)求的第一響應(yīng)結(jié)果,所述第一響應(yīng)結(jié)果包括頁面源代碼;
解析模塊,用于根據(jù)虛擬解析器對(duì)所述頁面源代碼進(jìn)行解析以得到第一解析頁面;
檢測(cè)模塊,用于根據(jù)所述目標(biāo)輸出點(diǎn)的XPath對(duì)所述第一解析頁面進(jìn)行特征值檢測(cè)以得到XSS漏洞。
具體地,所述用戶請(qǐng)求中包括至少一個(gè)參數(shù),所述獲取模塊具體用于:
對(duì)每一個(gè)所述參數(shù)構(gòu)造所述探針并發(fā)送帶有所述探針的第一請(qǐng)求至Web服務(wù)器,且所述探針具有唯一性;
接收所述Web服務(wù)器針對(duì)所述第一請(qǐng)求的第二響應(yīng)結(jié)果,并根據(jù)所述第二響應(yīng)結(jié)果獲取所述目標(biāo)注入?yún)?shù)、目標(biāo)輸出點(diǎn)、所述目標(biāo)輸出點(diǎn)的上下文信息及所述目標(biāo)輸出點(diǎn)的XPath。
可選地,所述第二響應(yīng)結(jié)果包括頁面源代碼,所述獲取模塊具體用于:
檢測(cè)所述頁面源代碼中是否存在所述探針;
若存在,則確定所述探針?biāo)诘奈恢脼樗瞿繕?biāo)輸出點(diǎn),同時(shí)確定所述探針?biāo)鶎?duì)應(yīng)的參數(shù)為所述目標(biāo)注入?yún)?shù),同時(shí)確定所述探針?biāo)鶎?duì)應(yīng)的參數(shù)為所述目標(biāo)注入?yún)?shù),并獲取所述目標(biāo)輸出點(diǎn)的上下文信息及所述目標(biāo)輸出點(diǎn)的XPath。
可選地,所述第二響應(yīng)結(jié)果包括頁面源代碼,所述獲取模塊具體用于:
根據(jù)所述虛擬解析器對(duì)所述頁面源代碼進(jìn)行解析以得到第二解析界面;
檢測(cè)所述第二解析界面中是否存在所述探針;
若存在,則確定所述探針?biāo)诘奈恢脼樗瞿繕?biāo)輸出點(diǎn),同時(shí)確定所述探針?biāo)鶎?duì)應(yīng)的參數(shù)為所述目標(biāo)注入?yún)?shù),同時(shí)確定所述探針?biāo)鶎?duì)應(yīng)的參數(shù)為所述目標(biāo)注入?yún)?shù),并獲取所述目標(biāo)輸出點(diǎn)的上下文信息及所述目標(biāo)輸出點(diǎn)的XPath。
具體地,該用戶請(qǐng)求為http請(qǐng)求。
與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例中基于虛擬解析的漏洞檢測(cè)方法及其裝置,先對(duì)客戶端所發(fā)送的用戶請(qǐng)求插入探針,以獲取目標(biāo)注入?yún)?shù)、目標(biāo)輸出點(diǎn)、目標(biāo)輸出點(diǎn)的上下文信息及目標(biāo)輸出點(diǎn)的XPath,再根據(jù)目標(biāo)輸出點(diǎn)的上下文信息構(gòu)造目標(biāo)特征值,之后,針對(duì)目標(biāo)注入?yún)?shù),向Web服務(wù)器發(fā)送帶有所述目標(biāo)特征值的處理請(qǐng)求,接收Web服務(wù)器對(duì)處理請(qǐng)求的第一響應(yīng)結(jié)果,并根據(jù)虛擬解析器對(duì)頁面源代碼進(jìn)行解析以得到第一解析頁面,最后根據(jù)目標(biāo)輸出點(diǎn)的XPath對(duì)第一解析頁面進(jìn)行特征值檢測(cè)以得到XSS漏洞。即,本發(fā)明實(shí)施例提出了一種結(jié)合探針預(yù)檢測(cè)技術(shù)定位輸出點(diǎn)XPath,并在響應(yīng)檢測(cè)階段通過XPath精確確認(rèn)XSS漏洞的機(jī)制,從而提高了漏洞檢測(cè)的準(zhǔn)確性。
通過以下的描述并結(jié)合附圖,本發(fā)明將變得更加清晰,這些附圖用于解釋本發(fā)明的實(shí)施例。
附圖說明
圖1為本發(fā)明基于虛擬解析的漏洞檢測(cè)方法第一實(shí)施例的流程圖。
圖2為本發(fā)明基于虛擬解析的漏洞檢測(cè)方法第二實(shí)施例的流程圖。
圖3為jsp示例代碼界面圖。
圖4為經(jīng)虛擬解析的一示例界面圖。
圖5為經(jīng)虛擬解析的另一示例界面圖。
圖6為經(jīng)虛擬解析的再一示例界面圖。
圖7為發(fā)明基于虛擬解析的漏洞檢測(cè)裝置第一實(shí)施例的結(jié)構(gòu)圖。
具體實(shí)施方式
現(xiàn)在參考附圖描述本發(fā)明的實(shí)施例,附圖中類似的元件標(biāo)號(hào)代表類似的元件。
為了更好地理解本發(fā)明,先對(duì)本發(fā)明的原理做如下說明:本發(fā)明是一種基于虛擬解析的XSS檢測(cè)技術(shù),提出一種結(jié)合探針預(yù)檢測(cè)技術(shù)定位輸出點(diǎn)XPath,并在響應(yīng)檢測(cè)階段通過XPath精確確認(rèn)XSS漏洞的機(jī)制。具體包括:(1)探針預(yù)檢測(cè)階段;(2)精確構(gòu)造特征值并發(fā)送檢測(cè)請(qǐng)求階段;(3)響應(yīng)檢測(cè)階段。
請(qǐng)參考圖1,是本發(fā)明第一實(shí)施例的基于虛擬解析漏洞檢測(cè)方法流程圖。如圖所示,該方法可以包括如下步驟:
S101,接收客戶端所發(fā)送的用戶請(qǐng)求,該用戶請(qǐng)求中包括至少一個(gè)參數(shù)。
具體地,客戶端(瀏覽器)先將XSS檢測(cè)工具(即下文中所描述的漏洞檢測(cè)裝置)設(shè)置為代理,以用于后續(xù)代理客戶端向Web服務(wù)器發(fā)送請(qǐng)求。之后,客戶端向XSS檢測(cè)工具發(fā)送用戶請(qǐng)求(http請(qǐng)求),XSS檢測(cè)工具接收該http請(qǐng)求、保存該請(qǐng)求的信息。進(jìn)一步地,XSS檢測(cè)工具將http請(qǐng)求發(fā)送至Web服務(wù)器。
S102,對(duì)用戶請(qǐng)求插入探針以獲取目標(biāo)注入?yún)?shù)、目標(biāo)輸出點(diǎn)、所述目標(biāo)輸出點(diǎn)的上下文信息及所述目標(biāo)輸出點(diǎn)的XPath。
具體地,用戶請(qǐng)求中包括至少一個(gè)參數(shù),XSS檢測(cè)工具對(duì)每一個(gè)參數(shù)插入一探針,并結(jié)合探測(cè)技術(shù)獲取目標(biāo)注入?yún)?shù)、目標(biāo)輸出點(diǎn)、目標(biāo)輸出點(diǎn)的上下文信息及目標(biāo)輸出點(diǎn)的XPath。例如,目標(biāo)輸出點(diǎn)的XPath為html/body/div[@id=’containerDiv’]/a。進(jìn)一步地,該部分的具體實(shí)施過程將在下一實(shí)施例中進(jìn)行詳述,故在此不再贅述。
S103,根據(jù)目標(biāo)輸出點(diǎn)的上下文信息構(gòu)造目標(biāo)特征值。
具體地,XSS檢測(cè)工具根據(jù)目標(biāo)輸出點(diǎn)的上下文信息構(gòu)造目標(biāo)特征值,如。“''><div id='999982118890' name='xssTester1001001'>XSSTester</div><a>”
S104,針對(duì)目標(biāo)注入?yún)?shù),向Web服務(wù)器發(fā)送帶有目標(biāo)特征值的檢測(cè)請(qǐng)求。
具體地,針對(duì)步驟S102中所得到的目標(biāo)注入?yún)?shù),XSS檢測(cè)工具向Web服務(wù)器發(fā)送帶有目標(biāo)特征值的檢測(cè)請(qǐng)求。
S105,接收Web服務(wù)器對(duì)檢測(cè)請(qǐng)求的第一響應(yīng)結(jié)果,該第一響應(yīng)結(jié)果包括頁面源代碼。
具體地,Web服務(wù)器接收檢測(cè)請(qǐng)求,并對(duì)其進(jìn)行響應(yīng),進(jìn)一步地,將響應(yīng)結(jié)果返回至XSS檢測(cè)工具。
S106,根據(jù)虛擬解析器對(duì)頁面源代碼進(jìn)行解析以得到第一解析頁面。
具體地,XSS檢測(cè)工具采用虛擬解析器(即類瀏覽器的解析技術(shù))對(duì)Web服務(wù)器所返回的響應(yīng)結(jié)果進(jìn)行虛擬解析,從而可以得到第一解析界面。其中,第一解析界面可參考圖2。
S107,根據(jù)目標(biāo)輸出點(diǎn)的XPath對(duì)第一解析頁面進(jìn)行特征值檢測(cè)以得到XSS漏洞。
具體地,XSS檢測(cè)工具根據(jù)目標(biāo)輸出點(diǎn)的XPath對(duì)第一解析頁面進(jìn)行特征值檢測(cè)以得到XSS漏洞。
本發(fā)明實(shí)施例中基于虛擬解析的漏洞檢測(cè)方法,先對(duì)客戶端所發(fā)送的用戶請(qǐng)求插入探針,以獲取目標(biāo)注入?yún)?shù)、目標(biāo)輸出點(diǎn)、目標(biāo)輸出點(diǎn)的上下文信息及目標(biāo)輸出點(diǎn)的XPath,再根據(jù)目標(biāo)輸出點(diǎn)的上下文信息構(gòu)造目標(biāo)特征值,之后,針對(duì)目標(biāo)注入?yún)?shù),向Web服務(wù)器發(fā)送帶有所述目標(biāo)特征值的處理請(qǐng)求,接收Web服務(wù)器對(duì)處理請(qǐng)求的第一響應(yīng)結(jié)果,并根據(jù)虛擬解析器對(duì)頁面源代碼進(jìn)行解析以得到第一解析頁面,最后根據(jù)目標(biāo)輸出點(diǎn)的XPath對(duì)第一解析頁面進(jìn)行特征值檢測(cè)以得到XSS漏洞。即,本發(fā)明實(shí)施例提出了一種結(jié)合探針預(yù)檢測(cè)技術(shù)定位輸出點(diǎn)XPath,并在響應(yīng)檢測(cè)階段通過XPath精確確認(rèn)XSS漏洞的機(jī)制,從而提高了漏洞檢測(cè)的準(zhǔn)確性。
請(qǐng)參考圖2,是本發(fā)明第二實(shí)施例的基于虛擬解析漏洞檢測(cè)方法流程圖。如圖所示,該方法可以包括如下步驟:
S201,接收客戶端所發(fā)送的用戶請(qǐng)求,該用戶請(qǐng)求中包括至少一個(gè)參數(shù)。
具體地,客戶端(瀏覽器)先將XSS檢測(cè)工具設(shè)置為代理,以用于后續(xù)代理客戶端向Web服務(wù)器發(fā)送請(qǐng)求。之后,客戶端向XSS檢測(cè)工具發(fā)送用戶請(qǐng)求(http請(qǐng)求),XSS檢測(cè)工具接收該http請(qǐng)求、保存該請(qǐng)求的信息。進(jìn)一步地,XSS檢測(cè)工具將http請(qǐng)求發(fā)送至Web服務(wù)器。
S202,對(duì)每一個(gè)參數(shù)構(gòu)造檢測(cè)探針并發(fā)送帶有檢測(cè)探針的第一請(qǐng)求至Web服務(wù)器,且檢測(cè)探針具有唯一性。
需要說明的是,檢測(cè)探針的本質(zhì)也是一種檢測(cè)特征值,它的構(gòu)造符合以下幾條規(guī)則:(1)全局唯一性;(2)具有一定規(guī)則,以便于發(fā)現(xiàn)存儲(chǔ)型的XSS問題;(3)盡量避免web應(yīng)用的參數(shù)輸入校驗(yàn),減少與檢測(cè)的失敗率。例如,可以采用數(shù)字字符作為探針,如“99993679123”,其中“9999”是探針前綴,表示這是個(gè)探針,“3679123”是隨機(jī)數(shù),避免探針值之間產(chǎn)生沖突。
具體地,XSS檢測(cè)工具對(duì)用戶請(qǐng)求中的每一個(gè)參數(shù)都構(gòu)造一個(gè)唯一的探針,并發(fā)送帶有探針的第一請(qǐng)求至Web服務(wù)器。例如,用戶請(qǐng)求中有5個(gè)參數(shù),則分別為其構(gòu)造的檢測(cè)探針可表示為:探針1、探針2、探針3、探針4及探針5,且探針的表現(xiàn)形式如前所述。
S203,接收Web服務(wù)器針對(duì)第一請(qǐng)求的第二響應(yīng)結(jié)果,并根據(jù)第二響應(yīng)結(jié)果獲取目標(biāo)注入?yún)?shù)、目標(biāo)輸出點(diǎn)、目標(biāo)輸出點(diǎn)的上下文信息及目標(biāo)輸出點(diǎn)的XPath。
具體地,在本實(shí)施例中,響應(yīng)結(jié)果包括頁面源代碼。Web服務(wù)器接收到帶有探針的第一請(qǐng)求之后,將會(huì)對(duì)其做出響應(yīng),并將響應(yīng)結(jié)果返回至XSS檢測(cè)工具。進(jìn)一步地,XSS檢測(cè)工具會(huì)先根據(jù)虛擬解析器對(duì)頁面源代碼進(jìn)行解析以得到解析界面,再對(duì)解析界面進(jìn)行分析。如果在頁面源代碼中檢測(cè)到探針,則標(biāo)記此處為可能的XSS輸出點(diǎn)(即確定探針?biāo)诘奈恢脼槟繕?biāo)輸出點(diǎn)),同時(shí)標(biāo)記該注入的參數(shù)為可能注入的參數(shù)(即確定探針?biāo)鶎?duì)應(yīng)的參數(shù)為目標(biāo)注入?yún)?shù)),并獲取目標(biāo)輸出點(diǎn)的上下文信息及目標(biāo)輸出點(diǎn)的XPath。
其中,XPath即為XML路徑語言,它是一種用來確定XML(標(biāo)準(zhǔn)通用標(biāo)記語言的子集)文檔中某部分位置的語言。XPath基于XML的樹狀結(jié)構(gòu),提供在數(shù)據(jù)結(jié)構(gòu)樹中找尋節(jié)點(diǎn)的能力。XPath雖然是被設(shè)計(jì)用來搜尋XML文檔的,不過它也能很好的在HTML文檔中工作,并且大部分瀏覽器也支持通過XPath來查詢節(jié)點(diǎn)。
需要說明的是,現(xiàn)有的XSS漏洞檢測(cè)方法是對(duì)頁面源代碼進(jìn)行特征值檢測(cè),其不能檢測(cè)到web頁面中嵌入的JavaScript、CSS動(dòng)態(tài)生成的元素的XSS漏洞。而基于類瀏覽器虛擬解析技術(shù)的XSS漏洞檢測(cè)方法解決了這一問題。但是,基于類瀏覽器虛擬解析技術(shù)的XSS漏洞檢測(cè)方法僅僅通過對(duì)虛擬解析后的響應(yīng)結(jié)果進(jìn)行文本搜索的方式來查找和確認(rèn)XSS漏洞。如果輸出點(diǎn)做了XSS輸出編碼保護(hù),經(jīng)過類瀏覽器虛擬解析后,得到的將是未做編碼前的原文,此時(shí)通過對(duì)響應(yīng)結(jié)果進(jìn)行文本搜索的方式來進(jìn)行特征檢測(cè),將會(huì)產(chǎn)生大量的XSS誤報(bào)。因此,本實(shí)施例中先結(jié)合探針預(yù)檢測(cè)技術(shù)定位出輸出點(diǎn)的XPath,為后續(xù)響應(yīng)檢測(cè)階段通過XPath精確確認(rèn)XSS漏洞提供基礎(chǔ)。
還需要說明的是,虛擬解析技術(shù)可以模擬瀏覽器運(yùn)行,相當(dāng)于無界面的瀏覽器,可以對(duì)http請(qǐng)求響應(yīng)的源代碼做JavaScript、html和css的解析。由于其運(yùn)行不需要界面,運(yùn)行速度非常迅速。目前業(yè)界已經(jīng)有較為成熟的開源軟件庫,大多運(yùn)用在Web應(yīng)用的自動(dòng)化測(cè)試領(lǐng)域。
進(jìn)一步地,以下以一個(gè)簡(jiǎn)單的示例說明虛擬解析技術(shù)的作用。請(qǐng)參考圖3,其是一段簡(jiǎn)單的jsp示例代碼。假設(shè)參數(shù)傳入url的探針值為’www.demo.com’,經(jīng)過第一步的探針預(yù)檢測(cè)過程,頁面響應(yīng)經(jīng)過虛擬解析后,可以得到如圖4所示下的html頁面。從該圖中可以得到目標(biāo)輸出點(diǎn)的XPath為html/body/div[@id=’containerDiv’]/a。此外,經(jīng)過探針預(yù)檢測(cè)后還可以得到輸出點(diǎn)的上下文信息。
可選地,在發(fā)明實(shí)施例的其它可選方式中,步驟S203具體包括對(duì)頁面源代碼進(jìn)行分析。如果在頁面源代碼中檢測(cè)到檢測(cè)探針,則標(biāo)記此處為可能的XSS輸出點(diǎn)(即確定檢測(cè)探針?biāo)诘奈恢脼槟繕?biāo)輸出點(diǎn)),同時(shí)標(biāo)記該注入的參數(shù)為可能注入的參數(shù)(即確定檢測(cè)探針?biāo)鶎?duì)應(yīng)的參數(shù)為目標(biāo)注入?yún)?shù)),并獲取目標(biāo)輸出點(diǎn)的上下文信息及目標(biāo)輸出點(diǎn)的XPath。
S204,根據(jù)目標(biāo)輸出點(diǎn)的上下文信息構(gòu)造目標(biāo)特征值。
具體地,XSS檢測(cè)工具根據(jù)目標(biāo)輸出點(diǎn)的上下文信息構(gòu)造目標(biāo)特征值,如“''><div id='999982118890' name='xssTester1001001'>XSSTester</div><a>”
S205,針對(duì)目標(biāo)注入?yún)?shù),向Web服務(wù)器發(fā)送帶有目標(biāo)特征值的檢測(cè)請(qǐng)求。
具體地,針對(duì)步驟S102中所得到的目標(biāo)注入?yún)?shù),XSS檢測(cè)工具向Web服務(wù)器發(fā)送帶有目標(biāo)特征值的檢測(cè)請(qǐng)求。
S206,接收Web服務(wù)器對(duì)檢測(cè)請(qǐng)求的第一響應(yīng)結(jié)果,該第一響應(yīng)結(jié)果包括頁面源代碼。
具體地,Web服務(wù)器接收檢測(cè)請(qǐng)求,并對(duì)其進(jìn)行響應(yīng),進(jìn)一步地,將響應(yīng)結(jié)果返回至XSS檢測(cè)工具。
S207,根據(jù)虛擬解析器對(duì)頁面源代碼進(jìn)行解析以得到第一解析頁面。
具體地,XSS檢測(cè)工具采用類瀏覽器的解析技術(shù)對(duì)Web服務(wù)器所返回的響應(yīng)結(jié)果進(jìn)行虛擬解析,從而可以得到第一解析界面。其中,第一解析界面可參考圖4。
S208,根據(jù)目標(biāo)輸出點(diǎn)的XPath對(duì)第一解析頁面進(jìn)行特征值檢測(cè)以得到XSS漏洞。
具體地,XSS檢測(cè)工具根據(jù)目標(biāo)輸出點(diǎn)的XPath對(duì)第一解析頁面進(jìn)行特征值檢測(cè)以得到XSS漏洞。本步驟即發(fā)明原理部分所提及的響應(yīng)檢測(cè)階段。
請(qǐng)參考圖5及圖6,分別為未做XSS編碼保護(hù)的、經(jīng)虛擬解析的界面以及已做XSS編碼保護(hù)的、經(jīng)虛擬解析的界面。如果輸出點(diǎn)沒有做XSS輸出編碼保護(hù),則特征值將成功注入,如圖5所示。如果輸出點(diǎn)做了輸出編碼保護(hù),則響應(yīng)經(jīng)過虛擬解析后得到頁面的如圖6所示,其中第9行中被標(biāo)注的部分為一個(gè)完整的字符串。通過比較圖5和圖6可以發(fā)現(xiàn),如果僅僅對(duì)虛擬解析后的響應(yīng)做特征值的文本搜索,將不能區(qū)分該輸出點(diǎn)是否有做XSS輸出編碼。
雖然在虛擬解析后的頁面通過文本搜索特征值的方式不能確認(rèn)輸出點(diǎn)是否做了輸出編碼,但html結(jié)構(gòu)中注入的特征值在做了輸出編碼和未做輸出編碼的情況下將是不同的節(jié)點(diǎn)。如果輸出點(diǎn)做了輸出編碼,特征值將出現(xiàn)在文本節(jié)點(diǎn);如果輸出點(diǎn)未做輸出編碼,特征值將出現(xiàn)在標(biāo)簽節(jié)點(diǎn)。
本發(fā)明實(shí)施例將利用這一特性,在響應(yīng)檢測(cè)階段,使用先前探針定位到的XPath,即html/body/div[@id=’containerDiv’]/a,分別得到<a>標(biāo)簽的outerHTML和outerText。如果在outerHTML中檢測(cè)到了注入的div標(biāo)簽,則說明注入的特征值已經(jīng)成功注入并生成了div標(biāo)簽。如果在outerHTML中沒檢測(cè)到注入的div標(biāo)簽,而在outerText中檢測(cè)到了該段特征文本,則說明特征值沒有注入成功,即沒有發(fā)現(xiàn)XSS漏洞。
本發(fā)明實(shí)施例中基于虛擬解析的漏洞檢測(cè)方法,先對(duì)客戶端所發(fā)送的用戶請(qǐng)求插入探針,以獲取目標(biāo)注入?yún)?shù)、目標(biāo)輸出點(diǎn)、目標(biāo)輸出點(diǎn)的上下文信息及目標(biāo)輸出點(diǎn)的XPath,再根據(jù)目標(biāo)輸出點(diǎn)的上下文信息構(gòu)造目標(biāo)特征值,之后,針對(duì)目標(biāo)注入?yún)?shù),向Web服務(wù)器發(fā)送帶有所述目標(biāo)特征值的處理請(qǐng)求,接收Web服務(wù)器對(duì)處理請(qǐng)求的第一響應(yīng)結(jié)果,并根據(jù)虛擬解析器對(duì)頁面源代碼進(jìn)行解析以得到第一解析頁面,最后根據(jù)目標(biāo)輸出點(diǎn)的XPath對(duì)第一解析頁面進(jìn)行特征值檢測(cè)以得到XSS漏洞。即,本發(fā)明實(shí)施例提出了一種結(jié)合探針預(yù)檢測(cè)技術(shù)定位輸出點(diǎn)XPath,并在響應(yīng)檢測(cè)階段通過XPath精確確認(rèn)XSS漏洞的機(jī)制,從而提高了漏洞檢測(cè)的準(zhǔn)確性。
請(qǐng)參考圖7,是本發(fā)明第一實(shí)施例的基于虛擬解析漏洞檢測(cè)裝置的結(jié)構(gòu)圖。如圖所示,該漏洞檢測(cè)裝置可以包括:
接收模塊10,用于接收客戶端所發(fā)送的用戶請(qǐng)求;
獲取模塊11,用于對(duì)用戶請(qǐng)求插入探針以獲取目標(biāo)注入?yún)?shù)、目標(biāo)輸出點(diǎn)、目標(biāo)輸出點(diǎn)的上下文信息及目標(biāo)輸出點(diǎn)的XPath;
構(gòu)造模塊12,用于根據(jù)目標(biāo)輸出點(diǎn)的上下文信息構(gòu)造目標(biāo)特征值;
發(fā)送模塊13,用于針對(duì)目標(biāo)注入?yún)?shù),向Web服務(wù)器發(fā)送帶有目標(biāo)特征值的檢測(cè)請(qǐng)求;
接收模塊10還用于接收Web服務(wù)器對(duì)檢測(cè)請(qǐng)求的第一響應(yīng)結(jié)果,第一響應(yīng)結(jié)果包括頁面源代碼;
解析模塊14,用于根據(jù)虛擬解析器對(duì)頁面源代碼進(jìn)行解析以得到第一解析頁面;
檢測(cè)模塊15,用于根據(jù)目標(biāo)輸出點(diǎn)的XPath對(duì)第一解析頁面進(jìn)行特征值檢測(cè)以得到XSS漏洞。
具體地,用戶請(qǐng)求中包括至少一個(gè)參數(shù),獲取模塊11具體用于:
對(duì)每一個(gè)參數(shù)構(gòu)造所述探針并發(fā)送帶有探針的第一請(qǐng)求至Web服務(wù)器,且探針具有唯一性;
接收Web服務(wù)器針對(duì)所述第一請(qǐng)求的第二響應(yīng)結(jié)果,并根據(jù)第二響應(yīng)結(jié)果獲取目標(biāo)注入?yún)?shù)、目標(biāo)輸出點(diǎn)、目標(biāo)輸出點(diǎn)的上下文信息及目標(biāo)輸出點(diǎn)的XPath。
可選地,第二響應(yīng)結(jié)果包括頁面源代碼,獲取模塊11具體用于:
檢測(cè)頁面源代碼中是否存在探針;
若存在,則確定探針?biāo)诘奈恢脼槟繕?biāo)輸出點(diǎn),同時(shí)確定探針?biāo)鶎?duì)應(yīng)的參數(shù)為目標(biāo)注入?yún)?shù),同時(shí)確定探針?biāo)鶎?duì)應(yīng)的參數(shù)為目標(biāo)注入?yún)?shù),并獲取目標(biāo)輸出點(diǎn)的上下文信息及目標(biāo)輸出點(diǎn)的XPath。
可選地,第二響應(yīng)結(jié)果包括頁面源代碼,獲取模塊11具體用于:
根據(jù)虛擬解析器對(duì)頁面源代碼進(jìn)行解析以得到第二解析界面;
檢測(cè)第二解析界面中是否存在探針;
若存在,則確定探針?biāo)诘奈恢脼槟繕?biāo)輸出點(diǎn),同時(shí)確定探針?biāo)鶎?duì)應(yīng)的參數(shù)為目標(biāo)注入?yún)?shù),同時(shí)確定探針?biāo)鶎?duì)應(yīng)的參數(shù)為目標(biāo)注入?yún)?shù),并獲取目標(biāo)輸出點(diǎn)的上下文信息及目標(biāo)輸出點(diǎn)的XPath。
本發(fā)明實(shí)施例中基于虛擬解析的漏洞檢測(cè)裝置,先通過接收模塊10接收客戶端所發(fā)送的用戶請(qǐng)求,通過獲取模塊11插入探針以獲取目標(biāo)注入?yún)?shù)、目標(biāo)輸出點(diǎn)、目標(biāo)輸出點(diǎn)的上下文信息及目標(biāo)輸出點(diǎn)的XPath,再通過構(gòu)造模塊12根據(jù)目標(biāo)輸出點(diǎn)的上下文信息構(gòu)造目標(biāo)特征值,之后,針對(duì)目標(biāo)注入?yún)?shù),通過發(fā)送模塊13向Web服務(wù)器發(fā)送帶有目標(biāo)特征值的處理請(qǐng)求,接著,通過接收模塊10接收Web服務(wù)器對(duì)處理請(qǐng)求的第一響應(yīng)結(jié)果,并通過解析模塊14根據(jù)虛擬解析器對(duì)頁面源代碼進(jìn)行解析以得到第一解析頁面,最后通過檢測(cè)模塊15根據(jù)目標(biāo)輸出點(diǎn)的XPath對(duì)第一解析頁面進(jìn)行特征值檢測(cè)以得到XSS漏洞。即,本發(fā)明實(shí)施例提出了一種結(jié)合探針預(yù)檢測(cè)技術(shù)定位輸出點(diǎn)XPath,并在響應(yīng)檢測(cè)階段通過XPath精確確認(rèn)XSS漏洞的機(jī)制,從而提高了漏洞檢測(cè)的準(zhǔn)確性。
需要說明的是,本發(fā)明實(shí)施例裝置的具體工作流程已在前述方法流程部分做了像是,故在此不再贅述。
以上結(jié)合最佳實(shí)施例對(duì)本發(fā)明進(jìn)行了描述,但本發(fā)明并不局限于以上揭示的實(shí)施例,而應(yīng)當(dāng)涵蓋各種根據(jù)本發(fā)明的本質(zhì)進(jìn)行的修改、等效組合。