本發(fā)明涉及一種填充式遠(yuǎn)程漏洞PoC編寫方法及漏洞檢測(cè)方法,屬于網(wǎng)絡(luò)技術(shù)領(lǐng)域。
背景技術(shù):
PoC:Proof of Concept,概念驗(yàn)證,指漏洞的驗(yàn)證程序。
Payload:有效荷載,指的是漏洞檢測(cè)代碼實(shí)現(xiàn)檢測(cè)功能的部分的代碼,PoC也是Payload的一種。
Fuzzing:模糊測(cè)試,一種基于缺陷注入的自動(dòng)軟件測(cè)試技術(shù)。
通用漏洞:指的是產(chǎn)生于某種通用組件(如Wordpress、Nginx等)的漏洞,這種漏洞的出現(xiàn)可能會(huì)影響使用該組件的眾多網(wǎng)站、應(yīng)用。
本發(fā)明涉及到了通用漏洞PoC的編寫技術(shù)。在漏洞日益豐富并且種類多樣的今天,通用的漏洞檢測(cè)方式已經(jīng)無(wú)法滿足對(duì)新爆發(fā)漏洞的檢測(cè),于是需要對(duì)這些復(fù)雜的漏洞針對(duì)性的編寫PoC,以進(jìn)行針對(duì)性的檢測(cè)。PoC的編寫要求編寫者掌握一定的安全能力,能進(jìn)行漏洞的分析和復(fù)現(xiàn),同時(shí)要求編寫者掌握一定的編程能力,能將人工手動(dòng)測(cè)試、復(fù)現(xiàn)漏洞的過(guò)程通過(guò)編程實(shí)現(xiàn)漏洞PoC,從而將漏洞檢測(cè)過(guò)程自動(dòng)化,以達(dá)到機(jī)器代替人工,應(yīng)對(duì)批量化檢測(cè)的需求場(chǎng)景。
在傳統(tǒng)的PoC編寫方法中,一個(gè)PoC的編寫需要先進(jìn)行漏洞的分析,復(fù)現(xiàn),然后再通過(guò)編程實(shí)現(xiàn)這個(gè)檢測(cè)過(guò)程的自動(dòng)化,這對(duì)編寫者的要求頗高,既要要求編寫者掌握漏洞分析能力,需要分析漏洞的成因,從而實(shí)現(xiàn)構(gòu)造漏洞Payload進(jìn)行手工測(cè)試,然后同時(shí)要求掌握編程能力,通過(guò)編寫腳本實(shí)現(xiàn)手工測(cè)試過(guò)程的自動(dòng)化,同時(shí)增加測(cè)試的可變化,包含可靈活設(shè)置測(cè)試目標(biāo)。
在傳統(tǒng)的PoC編寫過(guò)程中,由于PoC的性質(zhì)決定,要求編寫者掌握安全能力的同時(shí)需要掌握編程能力,這樣才有能力完成一個(gè)PoC的編寫流程,先通過(guò)自己的安全能力實(shí)現(xiàn)對(duì)漏洞的分析和復(fù)現(xiàn),以及手工測(cè)試漏洞,然后通過(guò)自己的編程能力編寫腳本,將這個(gè)手動(dòng)測(cè)試的過(guò)程自動(dòng)化。
而對(duì)于很多安全人員來(lái)說(shuō),由于漏洞的研究需要,能夠掌握網(wǎng)絡(luò)請(qǐng)求技術(shù),明白網(wǎng)絡(luò)請(qǐng)求的原理,也懂得漏洞的分析和手工測(cè)試,但是因?yàn)榫幊棠芰?duì)于發(fā)現(xiàn)漏洞、分析漏洞這個(gè)過(guò)程不是一個(gè)必要能力,所以不一定掌握編程能力,如果在發(fā)現(xiàn)漏洞之后,想實(shí)現(xiàn)PoC,實(shí)現(xiàn)批量化的漏洞測(cè)試,就不得不求助于其他人,而自己沒(méi)有能力進(jìn)行實(shí)現(xiàn)。
所以在傳統(tǒng)的PoC編寫方法里,只有掌握安全能力和編程能力的安全人員才能進(jìn)行PoC的編寫。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)中存在的技術(shù)問(wèn)題,本發(fā)明的目的在于提供一種填充式遠(yuǎn)程漏洞PoC編寫方法及漏洞檢測(cè)方法。
本發(fā)明的技術(shù)方案為:
一種填充式遠(yuǎn)程漏洞PoC編寫方法,其步驟為:
1)創(chuàng)建若干PoC編寫模板;
2)用戶通過(guò)所述PoC編寫模板輸入目標(biāo)遠(yuǎn)程漏洞的測(cè)試信息生成該遠(yuǎn)程漏洞PoC;其中,所述測(cè)試信息包括漏洞測(cè)試HTTP請(qǐng)求的參數(shù)、請(qǐng)求地址、請(qǐng)求方法以及結(jié)果判斷條件。
一種基于填充式遠(yuǎn)程漏洞PoC的漏洞檢測(cè)方法,其步驟為:
3)創(chuàng)建若干PoC編寫模板和一模板解析處理框架;
4)用戶通過(guò)所述PoC編寫模板輸入目標(biāo)遠(yuǎn)程漏洞的測(cè)試信息;所述測(cè)試信息包括漏洞測(cè)試HTTP請(qǐng)求的參數(shù)、請(qǐng)求地址、請(qǐng)求方法以及結(jié)果判斷條件;
5)所述模板解析處理框架對(duì)用戶填充后的所述PoC編寫模板進(jìn)行解析,獲取發(fā)起HTTP請(qǐng)求所需要的信息;然后生成HTTP請(qǐng)求并執(zhí)行;
6)所述模板解析處理框架根據(jù)結(jié)果判斷條件,判斷執(zhí)行該HTTP請(qǐng)求返回的內(nèi)容是否存在該目標(biāo)遠(yuǎn)程漏洞。
進(jìn)一步的,所述結(jié)果判斷條件為一個(gè)字符串,所述模板解析處理框架判斷返回的內(nèi)容是否存在該字符串,如果存在則判定存在該目標(biāo)遠(yuǎn)程漏洞。
進(jìn)一步的,所述結(jié)果判斷條件為一個(gè)正則表達(dá)式,所述模板解析處理框架返回的內(nèi)容進(jìn)行正則匹配,如果匹配成功則判定存在該目標(biāo)遠(yuǎn)程漏洞。
進(jìn)一步的,發(fā)起HTTP請(qǐng)求所需要的信息包括請(qǐng)求參數(shù)、參數(shù)內(nèi)容、請(qǐng)求頭部。
進(jìn)一步的,所述PoC編寫模板為JSON格式或者XML格式。
進(jìn)一步的,通過(guò)構(gòu)建Web頁(yè)面接收用戶輸入的所述測(cè)試信息,然后將接收的所述測(cè)試信息生成JSON格式或者XML格式的文件。
通過(guò)長(zhǎng)期的漏洞PoC編寫經(jīng)驗(yàn)和總結(jié),本發(fā)明發(fā)現(xiàn)在漏洞中有一種類型的漏洞都是通過(guò)遠(yuǎn)程的網(wǎng)絡(luò)請(qǐng)求進(jìn)行測(cè)試,并且主要為HTTP請(qǐng)求;該種漏洞類型的測(cè)試通常使用POST或者GET方法進(jìn)行參數(shù)傳遞,然后判斷返回的內(nèi)容進(jìn)行漏洞存在與否的判斷,于是通過(guò)一種固定的PoC編寫模板和模板解析處理框架,漏洞編寫者不需要懂得編程,只需要將漏洞測(cè)試過(guò)程中需要進(jìn)行HTTP請(qǐng)求的參數(shù)項(xiàng)和值在模板里進(jìn)行填充(模板為JSON格式或者XML格式),然后填充返回的內(nèi)容的判斷條件,包含返回內(nèi)容是否包含某個(gè)字符串,是否滿足某個(gè)正則,模板解析模塊包含有通用的處理方法,包含發(fā)送網(wǎng)絡(luò)請(qǐng)求等,可以自動(dòng)化的解析編寫者填充完的模板文件,然后獲取填寫的內(nèi)容發(fā)送網(wǎng)絡(luò)請(qǐng)求,進(jìn)行條件判斷,從而實(shí)現(xiàn)漏洞檢測(cè),而漏洞編寫者則只需要進(jìn)行填充內(nèi)容就可以實(shí)現(xiàn)一個(gè)PoC的編寫。
這其中模板解析處理框架由Python或者其他語(yǔ)言進(jìn)行開(kāi)發(fā)實(shí)現(xiàn),包含有模板解析模塊,對(duì)JSON或者XML文件進(jìn)行解析,從XML或者JSON文件中用戶填寫的字段獲取值來(lái)取得發(fā)起HTTP請(qǐng)求所需要的請(qǐng)求參數(shù)、參數(shù)內(nèi)容、請(qǐng)求頭部等內(nèi)容;PoC執(zhí)行模塊通過(guò)解析模塊獲取到的HTTP請(qǐng)求所需要的參數(shù),構(gòu)造HTTP并發(fā)起HTTP請(qǐng)求,然后完成一次漏洞的測(cè)試,HTTP請(qǐng)求可以通過(guò)Python模塊requests實(shí)現(xiàn),如下:
import requesst
req=requests.get(url,headers=headers)
return_content=req.text
以上示例代碼中,url、headers均為模板解析模塊對(duì)用戶填充的模板解析后獲取得到的內(nèi)容。
在對(duì)漏洞結(jié)果進(jìn)行驗(yàn)證的過(guò)程中,根據(jù)模板解析模塊獲取得到用戶填充的返回內(nèi)容判斷條件,判斷條件可以是一個(gè)字符串,也可以是正則表達(dá)式,如以下是正則表達(dá)式的實(shí)現(xiàn)方式:
在以上示例代碼中,regx的內(nèi)容是通過(guò)模板解析模塊解析用戶填充后模板從判斷條件字段獲取到的值,而return_content為框架發(fā)起HTTP請(qǐng)求后返回的內(nèi)容,如果是關(guān)鍵字符串的判斷方式,則直接采用以下方式:
與現(xiàn)有技術(shù)相比,本發(fā)明的積極效果為:
1.本發(fā)明總結(jié)了遠(yuǎn)程漏洞的PoC的檢測(cè)方式,將大部分的遠(yuǎn)程漏洞的檢測(cè)方式總結(jié)為標(biāo)準(zhǔn)的HTTP請(qǐng)求,簡(jiǎn)化了PoC的編寫流程。
2.本發(fā)明通過(guò)一種新的方式替代了傳統(tǒng)的代碼編寫的PoC編寫方式,讓安全人員在無(wú)需掌握編程能力的情況下,也可以通過(guò)類似編輯文本的方式填空漏洞檢測(cè)中的請(qǐng)求內(nèi)容和判斷條件,就可以實(shí)現(xiàn)一個(gè)PoC的編寫,降低了PoC編寫的門檻和要求。
3.統(tǒng)一的PoC模板,也可以方便的進(jìn)行批量的調(diào)用,方便進(jìn)行批量化的漏洞檢測(cè)。
附圖說(shuō)明
圖1為本發(fā)明方法的流程圖。
具體實(shí)施方式
下面結(jié)合附圖,對(duì)優(yōu)選實(shí)施例作詳細(xì)說(shuō)明。應(yīng)該強(qiáng)調(diào)的是下述說(shuō)明僅僅是示例性的,而不是為了限制本發(fā)明的范圍及其應(yīng)用。
本發(fā)明的流程為:
1)由框架提供標(biāo)準(zhǔn)的遠(yuǎn)程PoC編寫模板
2)PoC編寫者在已完成漏洞分析和測(cè)試的前提下,然后按照模板的填充項(xiàng)從漏洞分析結(jié)果中提取模板中所需要填充的項(xiàng)對(duì)應(yīng)的內(nèi)容進(jìn)行填充,填充入請(qǐng)求的參數(shù)、地址、方法以及結(jié)果判斷條件(該步驟右邊模板是已經(jīng)標(biāo)準(zhǔn)并且固定的,可以通過(guò)在線頁(yè)面的方式進(jìn)行填寫,而無(wú)需拘泥于JSON或者XML格式)。
3)將填充完的PoC編寫模板輸出給由PoC解析處理框架。
4)PoC解析處理框架解析PoC模板,獲取編寫者填充的內(nèi)容。
5)通過(guò)PoC執(zhí)行模塊處理編寫者填充的內(nèi)容然后進(jìn)行PoC的執(zhí)行。
6)最終輸出執(zhí)行結(jié)果。
a)如何實(shí)現(xiàn)對(duì)填充后PoC編寫模板的解析和內(nèi)容獲???
由框架提供的PoC編寫模板是一個(gè)固定的文件格式,不管是JSON或者XML格式,文件內(nèi)容中的字段項(xiàng)(具體字段見(jiàn)下方的示例模板)都是固定的,包含method為HTTP請(qǐng)求方式,任何一份完整的PoC編寫模板要求必須包含這些基本字段,框架在對(duì)PoC編寫模板進(jìn)行解析的時(shí)候只要讀取已知對(duì)應(yīng)字段的值即可,比如讀取headers字段的內(nèi)容既可以獲得發(fā)起HTTP請(qǐng)求時(shí)所需要的HTTP請(qǐng)求頭。
b)如何實(shí)現(xiàn)PoC執(zhí)行?
框架在對(duì)填充后的PoC編寫模板進(jìn)行解析和獲取編寫者填寫的內(nèi)容后,會(huì)根據(jù)填寫的內(nèi)容,發(fā)起標(biāo)準(zhǔn)的HTTP請(qǐng)求,請(qǐng)求中涉及到的請(qǐng)求地址、請(qǐng)求方法、參數(shù)都在PoC編寫模板里可以讀取到,然后進(jìn)行請(qǐng)求返回內(nèi)容的判斷即可完成一次PoC的執(zhí)行。
c)填充式的PoC如何判斷目標(biāo)是否存在漏洞?
在每個(gè)填充式PoC中都存在一個(gè)名為match的字段,該字段的值代表是否PoC執(zhí)行成功,在每個(gè)填充式PoC中包括目標(biāo)存在漏洞需要滿足的判斷條件,該判斷條件可以是一個(gè)字符串,HTTP請(qǐng)求結(jié)果中存在該字符串,則代表目標(biāo)存在漏洞;也可以是一個(gè)正則表達(dá)式,對(duì)HTTP請(qǐng)求結(jié)果進(jìn)行正則匹配,匹配成功則代表PoC執(zhí)行成功,并且檢測(cè)目標(biāo)存在漏洞。
d)如何進(jìn)行PoC編寫模板的填充?
PoC編寫模板原始文件格式為XML或者JSON,其中需要編寫者填充的節(jié)點(diǎn)或者字段的值為空,需要編寫者根據(jù)具體漏洞的具體測(cè)試方法填寫對(duì)應(yīng)的內(nèi)容,可以通過(guò)直接編輯XML或者JSON文件的方式進(jìn)行填寫;為了良好的用戶體驗(yàn),也可以通過(guò)構(gòu)建Web頁(yè)面,通過(guò)填寫表單的方式進(jìn)行填寫,然后再生成符合要求的XML或者JSON文件。
PoC規(guī)范示例:
以上所述,僅為本發(fā)明較佳的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。