本申請涉及網絡安全技術領域,尤其涉及一種SQL注入檢測方法及裝置。
背景技術:
SQL(Structured Query Language,結構化查詢語言)注入漏洞是web應用安全中的常見漏洞。實際應用中,SQL注入檢測方法也是SQL注入攻擊方法,即是采用設定的SQL注入攻擊方法對目標服務器進行攻擊,根據目標服務器的反饋判定是否存在SQL注入漏洞。
現有技術中采用多個攜帶有SQL注入命令的HTTP(超文本傳輸協議,Hyper Text Transfer Protocol)請求實現對時間型的SQL注入漏洞的檢測。且,針對檢測漏洞用的HTTP請求,通常從域名(DNS,Domain Name System)解析或開始建立TCP(Transmission Control Protocol,傳輸控制協議)連接開始計時,到接收完所有響應數據結束計時,并將開始計時到結束計時之間的時間段作為延時HTTP請求的響應時間。然后,將該響應時間與預置時間進行對比,來確定是否存在SQL注入漏洞。
發明人在實現本發明的過程中發現,現有技術中的SQL注入檢測的檢測準確性較低,存在漏報及誤報的現象。
技術實現要素:
本申請實施例提供了一種SQL注入檢測方法及裝置,用以解決現有技術中檢測準確性較低,存在漏報及誤報的現象等的問題。
一方面,本申請實施例提供一種SQL注入檢測方法,包括:
在至少一個HTTP請求中注入延時注入命令得到延時HTTP請求后發送給服務端;
針對每個延時HTTP請求,確定針對該延時HTTP請求的指定時長;其中,所述指定時長指從域名解析開始或從建立TCP連接開始到接收完響應數據所使用的時長中的部分時長,且,所述部分時長中包括從成功建立TCP連接開始到開始接收到響應數據所需的時長;
根據各延時HTTP請求的指定時長和預設時長,確定是否存在注入漏洞。
另一方面,本申請實施例提供一種SQL注入檢測裝置,包括:
延時注入命令注入模塊,用于在至少一個HTTP請求中注入延時注入命令得到延時HTTP請求后發送給服務端;
指定時長確定模塊,用于針對每個延時HTTP請求,確定針對該延時HTTP請求的指定時長;其中,所述指定時長指從域名解析開始或從建立TCP連接開始到接收完響應數據所使用的時長中的部分時長,且,所述部分時長中包括從成功建立TCP連接開始到開始接收到響應數據所需的時長;
注入漏洞確定模塊,用于根據各延時HTTP請求的指定時長和預設時長,確定是否存在注入漏洞。
另一方面,本申請實施例提供一種非易失性計算機存儲介質,存儲有計算機可執行指令,所述計算機可執行指令設置為:
在至少一個HTTP請求中注入延時注入命令得到延時HTTP請求后發送給服務端;
針對每個延時HTTP請求,確定針對該延時HTTP請求的指定時長;其中,所述指定時長指從域名解析開始或從建立TCP連接開始到接收完響應數據所使用的時長中的部分時長,且,所述部分時長中包括從成功建立TCP連接開始到開始接收到響應數據所需的時長;
根據各延時HTTP請求的指定時長和預設時長,確定是否存在注入漏洞。
另一方面,本申請實施例還提供了一種電子設備,包括:至少一個處理器;以及存儲器;其中,所述存儲器存儲有可被所述至少一個處理器執行的程序,所述指令被所述至少一個處理器執行,以使所述至少一個處理器能夠:
在至少一個HTTP請求中注入延時注入命令得到延時HTTP請求后通過通信接口發送給服務端;
針對每個延時HTTP請求,確定針對該延時HTTP請求的指定時長;其中,所述指定時長指從域名解析開始或從建立TCP連接開始到接收完響應數據所使用的時長中的部分時長,且,所述部分時長中包括從成功建立TCP連接開始到開始接收到響應數據所需的時長;
根據各延時HTTP請求的指定時長和預設時長,確定是否存在注入漏洞。
另一方面,本申請實施例提供一種計算機程序產品,包括存儲在存儲器上的計算機程序,所述計算機程序包括程序指令,當所述程序指令被計算機執行時,使所述計算機執行:
在至少一個HTTP請求中注入延時注入命令得到延時HTTP請求后發送給服務端;
針對每個延時HTTP請求,確定針對該延時HTTP請求的指定時長;其中,所述指定時長指從域名解析開始或從建立TCP連接開始到接收完響應數據所使用的時長中的部分時長,且,所述部分時長中包括從成功建立TCP連接開始到開始接收到響應數據所需的時長;
根據各延時HTTP請求的指定時長和預設時長,確定是否存在注入漏洞。
本申請有益效果如下:在本申請實施例提供的技術方案中,在至少一個HTTP請求中注入延時注入命令得到延時HTTP請求后發送給服務端;針對每個延時HTTP請求,確定針對該延時HTTP請求的指定時長;其中,所述指定時長指從域名解析開始或從建立TCP連接開始到接收完響應數據所使用的時長中的部分時長,且,所述部分時長中包括從成功建立TCP連接開始到開始接收到響應數據所需的時長;根據各延時HTTP請求的指定時長和預設時長,確定是否存在注入漏洞。其中,由于指定時長指從建立TCP連接開始到接收完響應數據所使用的時長中的部分時長,不是整個延時HTTP請求的響應時間,比現有技術能夠減少HTTP請求處理過程中部分受網絡波動的影響環節(例如域名解析所需的時間、建立TCP連接所需的時間,傳輸請求的數據所需的時間)所占用的時間,使得最終確定的響應時間更加準確,減少了漏報和誤報,提高了SQL注入檢測的準確性。
同時,發明人在實現本發明的過程中發現,在一種應用場景中,例如為了保證整體的掃描性能,掃描器都會設置一個HTTP請求的超時時間,并從一個HTTP請求發出開始計時,如果到設定的超時時間后,還沒有接收完響應數據或者還沒有收到響應,則認為該HTTP請求異常或者以設定時間作為該HTTP請求的響應時間,該響應時間用于進行SQL注入檢測。由于響應數據的數據量大小不一,現有技術中往往會使用很大的超時時間來提高檢測注入漏洞的準確性,導致整個SQL注入檢測的耗時變得很長,尤其是注入漏洞真正存在的時候,整個檢測耗時將變得非常長,導致漏洞檢測效率低。
在本申請實施例中,當指定時長為從成功建立TCP連接開始到開始接收到響應數據所需的時長時,或者為從域名解析開始或從開始建立TCP連接到開始接收到響應數據所用的時長,可以消除響應數據的數據量大小不一對SQL注入檢測的影響,那么在使用超時時間時,就不需要使用很大的超時時間,縮短了整個SQL注入檢測的耗時,提高了檢測效率。此外,由于本申請實施例采用的指定時長能夠剔除HTTP請求處理過程中容易受網絡波動影響的環節所占用的時間,故此本申請實施例能夠減少網絡波動的影響,進一步減少漏報和誤報,提高SQL注入檢測的準確性。
附圖說明
為了更清楚地說明本申請實施例中的技術方案,下面將對實施例描述中所需要使用的附圖作簡要介紹,顯而易見地,下面描述中的附圖僅僅是本申請的一些實施例,對于本領域的普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
圖1所示為本申請實施例一提供的SQL注入檢測方法流程示意圖;
圖2所示為本申請實施例二提供的SQL注入檢測方法流程示意圖;
圖3所示為本申請實施例三提供的SQL注入檢測裝置結構圖;
圖4所示為本申請實施例五中提供的SQL注入檢測方法的電子設備的硬件結構示意圖。
具體實施方式
為了使本申請的目的、技術方案和優點更加清楚,下面將結合附圖對本申請作進一步地詳細描述,顯然,所描述的實施例僅僅是本申請一部分實施例,而不是全部的實施例。基于本申請中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其它實施例,都屬于本申請保護的范圍。
實施例一:
如圖1所述,為本申請實施例提供的方法的流程示意圖,該方法包括以下步驟:
步驟101:在至少一個HTTP請求中注入延時注入命令得到延時HTTP請求后發送給服務端。
其中,延時注入命令中記錄了需要執行的延時時間(即直接記錄了延時時間的取值)或記錄了表示特征表達式重復執行次數的影響因子(即間接指示了延時時間的取值)。
在間接指示延時時間取值的方式下,在至少一個HTTP請求中注入延時注入命令時,只需要設置重復執行次數的影響因子。則,將影響因子乘以設定系數得到重復執行次數,如:2*10000=20000次。執行數據庫查詢語句時,數據庫會將重復執行20000次,從而造成目標服務器返回響應數據時在時間上的相應延遲。
步驟102:針對每個延時HTTP請求,確定針對該延時HTTP請求的指定時長;其中,所述指定時長指從域名解析開始或從建立TCP連接開始到接收完響應數據所使用的時長中的部分時長,且,所述部分時長中包括從成功建立TCP連接開始到開始接收到響應數據所需的時長。
其中,當目的地址為IP(Internet Protocol Address,互聯網協議地址)時,所述指定時長可以指從建立TCP連接開始到接收完響應數據所使用的時長中的部分時長。
當目的地址為域名時,所述指定時長可以是從域名解析開始到接收完響應數據所使用的時長中的部分時長,也可以是從建立TCP連接開始到接收完響應數據所使用的時長中的部分時長。
具體實施時,可以根據實際需要確定本申請實施例對此不做限定。
當然,本申請實例中的“或”,可以是指用戶可以根據實際需求選擇其中的一個方案執行。而并不要求設備執行方案中提供兩個選擇。
步驟103:根據各延時HTTP請求的指定時長和預設時長,確定是否存在注入漏洞。
其中,在一個實施例中,所述指定時長具體包括以下時長中的任一種:
第一時長,為從開始建立TCP連接到開始接收到響應數據所用的時長;可以消除響應數據過大對檢測結果的影響,提高檢測的準確性。
第二時長,為從成功建立TCP連接開始到開始接收到響應數據所用的時長;
第三時長,為從成功建立TCP連接開始到接收完響應數據所用的時長;可以消除建立TCP連接對檢測的影響,提高檢測的準確性;
第四時長,在HTTP請求中的目的地址為域名情況下,從域名解析開始到開始接收到響應數據所用的時長。
具體來說,由于該指定時長比現有技術中的響應時間短,所以在SQL注入檢測過程中受到高并發以及網絡的影響較小,從而能夠減少SQL注入檢測的漏報和誤報,提高SQL注入檢測的準確性。并且,若該指定時長為第二時長,那么SQL注入檢測能夠避免成功建立TCP連接開始前的準備工作,例如域名解析以及TCP連接的耗時,也能夠避免從接收到響應數據到接收完響應數據所用的時長,從而能夠降低漏報和誤報,提高檢測的準確性,提高檢測的效率。并且,當網絡較差或波動較大以及請求的響應數據較大時,能夠大幅度提高SQL注入檢測的檢出率并有效降低誤報率,提高檢測效率。
為便于理解,下面對本申請實施例提供的SQL注入檢測方法作進一步說明,可包括以下內容:
其中,在一個實施例中,任意一個HTTP請求包括注入延時注入命令的延時HTTP請求,以及未攜帶延時注入命令的HTTP請求。在本申請實施例中,所述指定時長是針對任意一個HTTP請求的,并且針對未攜帶延時注入命令的HTTP請求確定的指定時長的開始時間與結束時間,與在針對延時HTTP請求時確定的相同。
其中,在一個實施例中,可以根據初始預設時長來確定預設時長。且該初始預設時長為針對每個未攜帶延時注入命令的HTTP請求的所述指定時長。也即,該初始預設時長指從域名解析開始或從建立TCP連接開始到接收完響應數據所使用的時長中的部分時長,且,所述部分時長中包括從成功建立TCP連接開始到開始接收到響應數據所需的時長,并且該指定時長的開始時間與結束時間,與在針對延時HTTP請求時確定的相同。
具體實施時,預設時長的確定方法可以參照現有技術確定,那么步驟103的判斷方法也可以參照現有技術執行,這里不再贅述。
具體實施時,可以將多個初始預設時長的平均值作為預設時長。也可以從多個初始預設時長中,選擇出現頻率最多的初始預設時長作為預設時長。
此外,發明人研究發現,在理想狀態下,若重復發送同一HTTP請求。則每次發送后的響應時間均是相同的。而實際當中,受各種情況的影響,同一HTTP請求的響應時間會有差別,但是同一HTTP請求的響應時間應該落入一定的時間范圍內。故此,若同一HTTP請求得到多個響應時間,則各響應時間與其出現的頻率應該滿足正態分布。故此,本申請實施例中,為了提高SQL注入檢測的準確性,可以根據以下步驟確定預設時長:
步驟B1:發送至少一個未攜帶延時注入命令的HTTP請求給服務端。
其中,發送給服務端的未攜帶延時注入命令的HTTP請求,可以為一個也可以為多個,若僅僅通過一次未攜帶延時注入命令的HTTP請求得到預設時間受偶然誤差的影響,得到的結果可能不夠準確。所以,當發送多個請求給服務端時,可以得到多個預設時間,進而根據多個預設時間來確定出一個準確的預設時間,能夠提高SQL注入檢測的準確性。
步驟B2:針對每個未攜帶延時注入命令的HTTP請求,確定針對該未攜帶延時注入命令的HTTP請求的與所述指定時長對應的初始預設時長;其中,所述初始預設時長指從建立TCP連接開始到接收完響應數據所使用的時長中的部分時長,且,所述部分時長中包括從成功建立TCP連接開始到開始接收到響應數據所需的時長。
步驟B3:計算初始預設時長的均值和標準差。
例如:初始預設時長有100個,分別有30個0.30s、24個0.3 1s、24個0.29s、2個1.00s、20個0.32s,分布列如下表:
表1
計算均值μ(即期望值)和標準差σ:
μ=0.30*0.30+0.31*0.24+0.29*0.24+1.00*0.02+0.32*0.20=0.318;
σ2=1/n[(x1-μ)2+(x2-μ)2+……+(xn-μ)2]=
1/100[(0.30-0.318)2+(0.31-0.318)2+(0.29-0.318)2+(1.00-0.318)2+(0.32-0.318)2]=0.004663;
σ2開平方后得到σ≈0.068
步驟B4:計算在區間[μ-λσ,μ+λσ]內的初始預設時長的平均值;并將該平均值作為所述預設時長,其中μ表示均值,σ表示標準差,λ表示指定系數。
較佳的,λ=3,所以本實施例中,可以把[μ-3σ,μ+3σ]內的初始預設時長均值當做正常網絡狀態下的初始預設時長。
延用步驟B3中的例子,μ=0.318,σ≈0.068,計算求得[μ-3σ,μ+3σ]為[0.114,0.522],可知在該范圍內的初始預設時長不存在異常的值。
計算在該區間內的初始預設時長平均值,最終求得預設時長為0.304s。
當然,在具體實施時,λ的值可以有多種,例如為0.29、0.31等,具體實施時,可以根據實際需要確定,均在本申請保護范圍內,本實施例對此不做限定。
這樣,根據正態分布來確定預設時長,能夠過濾掉可能因為偶然誤差或網絡波動影響較大的初始預設時長。也就是說,可以通過正態分布來過濾掉誤差較大的初始預設時長,而采用較為準確的初始預設時長來確定預設時長。從而提高確定預設時長的準確性,進而提高檢測的準確性。
其中,在一個實施例中,若存在注入漏洞,那么延時HTTP請求中注入的延時注入命令將被執行,最終導致延時HTTP請求的指定時長大于預設時長。故此,本申請實施例中,為了提高SQL注入檢測的準確性,步驟103可具體執行為以下步驟:
步驟C1:針對每個延時HTTP請求,判斷該延時HTTP請求的指定時長是否大于所述預設時長。
步驟C2:若各延時HTTP請求的指定時長均大于所述預設時長,則確定存在注入漏洞。
步驟C3:若至少一個延時HTTP請求的指定時長小于或等于所述預設時長,則確定不存在注入漏洞。
也就是說,采用大小判斷的方式來檢測是否存在注入漏洞,判斷方式簡單易行,能夠提高檢測效率。
此外,需要說明的是,還可以計算大于預設時長的指定時長的個數與指定時長的總數的比值,若該比值大于指定比值,則確定存在注入漏洞,否則,不存在注入漏洞。也就是說當大于預設時長的指定時長較多時,可以認為存在注入漏洞。例如延時HTTP請求有100個,其中99個延時HTTP請求的指定時長大于預設時長,則比值為0.99,可以認為存在注入漏洞。這樣,可以一定程度上消除偶然誤差的影響。
其中,在一個實施例中,若存在注入漏洞,由于延時注入命令被執行,導致延時HTTP請求的指定時長大于預設時長,且指定時長理應大于或等于該延時HTTP請求中的延時注入命令中的延時時間。故此,步驟103還可具體執行為以下步驟:
步驟D1:針對每個延時HTTP請求,判斷該延時HTTP請求的指定時長是否滿足第一預設條件,所述第一預設條件包括指定時長大于所述預設時長、且大于或等于該延時HTTP請求中的延時注入命令中的延時時間。
步驟D2:若各延時HTTP請求的指定時長均滿足所述第一預設條件,則確定存在注入漏洞。
步驟D3:若至少一個延時HTTP請求的指定時長不滿足所述第一預設條件,則確定不存在注入漏洞。
這樣,也就是說進一步綜合預設時長和延時注入命令中的延時時間兩個條件來檢索是否存在注入漏洞,能夠進一步提高檢測的準確性。
其中,在一個實施例中,為了提高檢測的準確性,用于檢測的延時HTTP請求應該注入攜帶不同延時時間的延時注入命令。這樣,能夠避免由于同一延時注入命令帶來的誤差。當然,具體實施時,不同延時HTTP請求的延時時間可以均不同,也可以部分不同。若將多個HTTP請求的延時時間視為一個延時時間集合,均不同是指該集合中沒有重復的元素,部分不同指該集合中包含不同的元素和相同的元素。
其中,在一個實施例中,延時注入請求可以同時發送也可以逐一發送。逐一發送是,可以按照延時時間依次增大或依次減小的順序發送。當然,也可以隨機發送。本申請對此不作限定。
此外,若注入的延時注入命令的延時時間不同,那么獲得的指定時長應該不同。故此,為了進一步提高SQL注入檢測的準確性,本申請實施例中,若存在至少兩個延時HTTP請求,且存在至少一個延時HTTP請求的延時注入命令中的延時時間與其它延時HTTP請求的延時注入命令中的延時時間不同,確定存在注入漏洞之前,還可以執行以下操作:
確認所述至少兩個延時HTTP請求中的任意兩個延時HTTP請求是否均滿足第二預設條件,所述第二預設條件為兩個延時HTTP請求中延時時間較大的延時HTTP請求的指定時長大于延時時間較小的延時HTTP請求的指定時長;若是則確定存在注入漏洞,否則不存在。
為便于理解,這里對第二預設條件進行解釋。例如:注入的延時時間為Ti,i為正整數。共注入了100次,得到100個延時時間不同的延時HTTP請求,將這100個延時HTTP請求發送給服務端,得到100個不同的指定時長,將指定時長記為ti,i為正整數。
其中若100個T值滿足T1<T2<T3<……T97<T98<T99<T100,且100個指定時長滿足t1<t2<t3<……t97<t98<t99<t100,則確定滿足條件A。
其中,在一個實施例中,若所述指定時長為所述第二時長(即為從成功建立TCP連接開始到開始接收到響應數據所用的時長),可以通過以下三種方法針對每個延時HTTP請求,確定針對該延時HTTP請求的指定時長:
方法一:針對每個延時HTTP請求,從針對該延時HTTP請求的處理記錄中,讀取指定字段的字段值作為該延時HTTP請求的指定時長,所述指定字段用于記錄從成功建立TCP連接開始到開始接收到針對該延時HTTP請求的響應數據所用的時長。
方法二:針對每個延時HTTP請求,從成功建立TCP連接開始開始計時,到接收到針對該延時HTTP請求的響應數據結束計時,并將開始計時到結束計時之間的時間段作為第二時長。
方法三:針對每個延時HTTP請求,從針對該延時HTTP請求的處理記錄中,讀取用于記錄從開始建立TCP連接到接收完響應數據所用的時長的指定字段的字段值(記為字段值1),以及從開始建立TCP連接到成功建立TCP連接開始所用的時長指定字段的字段值(記為字段值2)。將字段值1減去字段值2得到的差值,作為第二時長。
具體實施時,可以根據實際需求采用上述方法確定第二時長。當然,還可以采用其他方法來確定,只要能夠確定第二時長,均適用于本申請實施例。
當然,對于第一時長、第三時長以及第四時長的確定方法可以參見第二時長的確定方法,這里不再贅述。
其中,在一個實施例中,現有技術中一般是延時HTTP請求接收完響應數據時才斷開連接。這樣若延時HTTP請求的響應數據過大,則使SQL注入檢測一直占用連接資源,且耗時非常長。故此,為提高檢測效率,本申請實施例中,若所述指定時長為第一時長、第二時長或第四時長,所述方法還包括:針對每個延時HTTP請求,當開始接收到該延時HTTP請求的響應數據時,斷開針對該延時HTTP請求的連接。這樣,無論延時HTTP請求的響應數據有多大,都不影響SQL注入檢測的耗時,大大提高了檢測效率。且由于開始接收到該延時HTTP請求的響應數據時立即斷開連接,釋放連接資源,能夠緩解超時現象,適應高并發情況下的HTTP請求的處理,并且能夠得到準確的響應時間用于進行攻擊檢測,達到減少漏報和誤報,提高SQL注入檢測的準確性的目的。
綜上所述:本申請實施例中,在至少一個HTTP請求中注入延時注入命令得到延時HTTP請求后發送給服務端;針個延時HTTP請求,確定針對該延時HTTP請求的指定時長;其中,所述指定時長指從域名解析開始或從建立TCP連接開始到接收完響應數據所使用的時長中的部分時長,且,所述部分時長中包括從成功建立TCP連接開始到開始接收到響應數據所需的時長;根據各延時HTTP請求的指定時長和預設時長,確定是否存在注入漏洞。其中,由于指定時長指從建立TCP連接開始到接收完響應數據所使用的時長中的部分時長,不是整個延時HTTP請求的響應時間,比現有技術能夠減少HTTP請求處理過程中部分受網絡波動的影響環節(例如域名解析所需的時間、建立TCP連接所需的時間,傳輸請求的數據所需的時間)所占用的時間,使得最終確定的響應時間更加準確,減少了漏報和誤報,提高了SQL注入檢測的準確性。
同時,發明人在實現本發明的過程中發現,在一種應用場景中,例如為了保證整體的掃描性能,掃描器都會設置一個HTTP請求的超時時間,并從一個HTTP請求發出開始計時,如果到設定的超時時間后,還沒有接收完響應數據或者還沒有收到響應,則認為該HTTP請求異常或者以設定時間作為該HTTP請求的響應時間,該響應時間用于進行SQL注入檢測。由于響應數據的數據量大小不一,現有技術中往往會使用很大的超時時間來提高檢測注入漏洞的準確性,導致整個SQL注入檢測的耗時變得很長,尤其是注入漏洞真正存在的時候,整個檢測耗時將變得非常長,導致漏洞檢測效率低。
在本申請實施例中,當指定時長為從成功建立TCP連接開始到開始接收到響應數據所需的時長時,或者為從域名解析開始或從開始建立TCP連接到開始接收到響應數據所用的時長,可以消除響應數據的數據量大小不一對SQL注入檢測的影響,那么在使用超時時間時,就不需要使用很大的超時時間,縮短了整個SQL注入檢測的耗時,提高了檢測效率。此外,由于本申請實施例采用的指定時長能夠剔除HTTP請求處理過程中容易受網絡波動影響的環節所占用的時間,故此本申請實施例能夠減少網絡波動的影響,進一步減少漏報和誤報,提高SQL注入檢測的準確性。
實施例二
為便于進一步理解本申請提供的SQL注入檢測方法,本申請實施例對該方法做進一步說明。如圖2所示,包括以下步驟:
步驟201:在至少兩個HTTP請求中注入延時注入命令得到延時HTTP請求后發送給服務端;其中至少一個延時HTTP請求的延時注入命令中的延時時間與其它延時HTTP請求的延時注入命令中的延時時間不同。
步驟202:針對每個延時HTTP請求,當開始接收到該延時HTTP請求的響應數據時,斷開針對該延時HTTP請求的連接。
步驟203:針對每個延時HTTP請求,從針對該延時HTTP請求的處理記錄中,讀取指定字段的字段值作為該延時HTTP請求的指定時長,所述指定字段用于記錄從成功建立TCP連接開始到開始接收到針對該延時HTTP請求的響應數據所用的時長。
其中,成功建立TCP連接開始可以的時間點可以是開始發送的時間點,也可以是HTTP請求發送結束時的時間點。
步驟204:獲取多個初始預設時長,初始預設時長為未攜帶延時注入命令的HTTP請求的從成功建立TCP連接開始到開始接收到針對該延時HTTP請求的響應數據所用的時長。
步驟205:計算多個初始預設時長的均值和標準差。
步驟206:計算在區間[μ-3σ,μ+3σ]內的初始預設時長的平均值;并將該平均值作為預設時長,其中μ表示均值,σ表示標準差。
步驟207:針對每個延時HTTP請求,判斷該延時HTTP請求的指定時長是否滿足第一預設條件,所述第一預設條件包括指定時長大于所述預設時長、且大于或等于該延時HTTP請求中的延時注入命令中的延時時間;若是,執行步驟208;若否,執行步驟210。
步驟208:判斷所述至少兩個延時HTTP請求中的任意兩個延時HTTP請求是否均滿足第二預設條件,所述第二預設條件為延時時間較大的延時HTTP請求的指定時長大于延時時間較小的延時HTTP請求的指定時長;若是,執行步驟209;若否,執行步驟210。
具體實施時,步驟207和步驟208的執行順序不受限。
步驟209:確定存在注入漏洞。
步驟210:確定不存在注入漏洞。
其中,步驟201~203,步驟204~206的執行順序不受限,即也可以先執行步驟204~206,再執行步驟201~203。
在本申請實施例提供的技術方案中,由于指定時長為從成功建立TCP連接開始到開始接收到針對該延時HTTP請求的響應數據這段時間,所以避免了因響應數據較大造成的超時現象及響應時間受網絡波動的影響而導致的誤報和漏報,提高了SQL注入檢測的準確性。同時,由于當開始接收到該延時HTTP請求的響應數據時,立即斷開針對該延時HTTP請求的連接,釋放連接資源,能夠緩解超時現象,適應高并發情況下的HTTP請求的處理,并且能夠得到準確的響應時間用于進行攻擊檢測,減少了漏報和誤報,進一步提高了SQL注入檢測的準確性。同時不需要使用很大的超時時間,縮短了整個SQL注入檢測的耗時,提高了檢測效率。
實施例三:
基于相同的發明構思,本申請實施例還提供一種SQL注入檢測裝置,該裝置的SQL注入檢測原理與上述SQL注入檢測方法的SQL注入檢測原理類似。具體的可參見上述方法的內容,這里不做贅述。
如圖3所示,為該裝置的結構示意圖,所述裝置包括:
延時注入命令注入模塊301:用于在至少一個HTTP請求中注入延時注入命令得到延時HTTP請求后發送給服務端。
指定時長確定模塊302:用于針對每個延時HTTP請求,確定針對該延時HTTP請求的指定時長;其中,所述指定時長指從域名解析開始或從建立TCP連接開始到接收完響應數據所使用的時長中的部分時長,且,所述部分時長中包括從成功建立TCP連接開始到開始接收到響應數據所需的時長。
注入漏洞確定模塊303:用于根據各延時HTTP請求的指定時長和預設時長,確定是否存在注入漏洞。
其中,在一個實施例中,所述注入漏洞確定模塊,具體包括:
第一判斷單元,用于針對每個延時HTTP請求,判斷該延時HTTP請求的指定時長是否大于所述預設時長;
第一注入漏洞確定單元,用于若各延時HTTP請求的指定時長均大于所述預設時長,則確定存在注入漏洞;若至少一個延時HTTP請求的指定時長小于或等于所述預設時長,則確定不存在注入漏洞。
其中,在一個實施例中,所述注入漏洞確定模塊,具體包括:
第二判斷單元,用于針對每個延時HTTP請求,判斷該延時HTTP請求的指定時長是否滿足第一預設條件,所述第一預設條件包括指定時長大于所述預設時長、且大于或等于該延時HTTP請求中的延時注入命令中的延時時間;
第二注入漏洞確定單元,用于若各延時HTTP請求的指定時長均滿足所述第一預設條件,則確定存在注入漏洞;若至少一個延時HTTP請求的指定時長不滿足所述第一預設條件,則確定不存在注入漏洞。
其中,在一個實施例中,若存在至少兩個延時HTTP請求,且存在至少一個延時HTTP請求的延時注入命令中的延時時間與其它延時HTTP請求的延時注入命令中的延時時間不同,所述第二注入漏洞確定單元,還用于:
在所述第一注入漏洞確定單元確定存在注入漏洞之前,確認所述至少兩個延時HTTP請求中的任意兩個延時HTTP請求均滿足第二預設條件,所述第二預設條件為兩個延時HTTP請求中延時時間較大的延時HTTP請求的指定時長大于延時時間較小的延時HTTP請求的指定時長。
其中,在一個實施例中,所述指定時長具體包括以下時長中的任一種:
第一時長,為從開始建立TCP連接到開始接收到響應數據所用的時長;
第二時長,為從成功建立TCP連接開始到開始接收到響應數據所用的時長;
第三時長,為從成功建立TCP連接開始到接收完響應數據所用的時長;
第四時長,在HTTP請求中的目的地址為域名情況下,從域名解析開始到開始接收到響應數據所用的時長。
其中,在一個實施例中,所述裝置還包括:
發送模塊,用于發送至少一個未攜帶延時注入命令的HTTP請求給服務端;
初始預設時長確定模塊,用于針對每個未攜帶延時注入命令的HTTP請求,確定針對該未攜帶延時注入命令的HTTP請求的所述指定時長作為初始預設時長;其中,所述初始預設時長指從建立TCP連接開始到接收完響應數據所使用的時長中的部分時長,且,所述部分時長中包括從成功建立TCP連接開始到開始接收到響應數據所需的時長;
計算模塊,用于計算初始預設時長的均值和標準差;
預設時長確定模塊,用于計算在區間[μ-λσ,μ+λσ]內的初始預設時長的平均值;并將該平均值作為所述預設時長,其中μ表示均值,σ表示標準差,λ表示指定系數。
其中,在一個實施例中,若所述指定時長為第一時長、第二時長或第四時長,所述裝置還包括:
連接斷開模塊,用于針對每個延時HTTP請求,當開始接收到該延時HTTP請求的響應數據時,斷開針對該延時HTTP請求的連接。
綜上所述,本申請實施例提供的SQL注入檢測裝置,延時注入命令注入模塊在至少一個HTTP請求中注入延時注入命令得到延時HTTP請求后發送給服務端;指定時長確定模塊針對每個延時HTTP請求,確定針對該延時HTTP請求的指定時長;其中,所述指定時長指從域名解析開始或從建立TCP連接開始到接收完響應數據所使用的時長中的部分時長,且,所述部分時長中包括從成功建立TCP連接開始到開始接收到響應數據所需的時長;注入漏洞確定模塊根據各延時HTTP請求的指定時長和預設時長,確定是否存在注入漏洞。其中,由于指定時長指從建立TCP連接開始到接收完響應數據所使用的時長中的部分時長,不是整個延時HTTP請求的響應時間,比現有技術能夠減少HTTP請求處理過程中部分受網絡波動的影響環節(例如域名解析所需的時間、建立TCP連接所需的時間,傳輸請求的數據所需的時間)所占用的時間,使得最終確定的響應時間更加準確,減少了漏報和誤報,提高了SQL注入檢測的準確性。
同時,發明人在實現本發明的過程中發現,在一種應用場景中,例如為了保證整體的掃描性能,掃描器都會設置一個HTTP請求的超時時間,并從一個HTTP請求發出開始計時,如果到設定的超時時間后,還沒有接收完響應數據或者還沒有收到響應,則認為該HTTP請求異常或者以設定時間作為該HTTP請求的響應時間,該響應時間用于進行SQL注入檢測。由于響應數據的數據量大小不一,現有技術中往往會使用很大的超時時間來提高檢測注入漏洞的準確性,導致整個SQL注入檢測的耗時變得很長,尤其是注入漏洞真正存在的時候,整個檢測耗時將變得非常長,導致漏洞檢測效率低。
在本申請實施例中,當指定時長為從成功建立TCP連接開始到開始接收到響應數據所需的時長時,或者為從域名解析開始或從開始建立TCP連接到開始接收到響應數據所用的時長,可以消除響應數據的數據量大小不一對SQL注入檢測的影響,那么在使用超時時間時,就不需要使用很大的超時時間,縮短了整個SQL注入檢測的耗時,提高了檢測效率。此外,由于本申請實施例采用的指定時長能夠剔除HTTP請求處理過程中容易受網絡波動影響的環節所占用的時間,故此本申請實施例能夠減少網絡波動的影響,進一步減少漏報和誤報,提高SQL注入檢測的準確性。
關于上述實施例中的裝置,其中各個模塊執行操作的具體方式已經在有關該方法的實施例中進行了詳細描述,此處將不做詳細闡述說明。
實施例四
本申請實施例四提供了一種非易失性計算機存儲介質,所述計算機存儲介質存儲有計算機可執行指令,該計算機可執行指令可執行上述任意方法實施例中的SQL注入檢測方法。
實施例五
圖4是本申請實施例五提供的執行SQL注入檢測方法的電子設備的硬件結構示意圖,如圖4所示,該電子設備包括:
一個或多個處理器410以及存儲器420,圖4中以一個處理器410為例。執行SQL注入檢測方法的電子設備還可以包括:輸入裝置430和輸出裝置440。
處理器410、存儲器420、輸入裝置430和輸出裝置440可以通過總線或者其他方式連接,圖4中以通過總線連接為例。
存儲器420作為一種非易失性計算機可讀存儲介質,可用于存儲非易失性軟件程序、非易失性計算機可執行程序以及模塊,如本申請實施例中的SQL注入檢測方法對應的程序指令/模塊(例如,附圖3所示的延時注入命令注入模塊301、指定時長確定模塊302、注入漏洞確定模塊303)。處理器410通過運行存儲在存儲器420中的非易失性軟件程序、指令以及模塊,從而執行服務器的各種功能應用以及數據處理,即實現上述方法實施例SQL注入檢測方法。
存儲器420可以包括存儲程序區和存儲數據區,其中,存儲程序區可存儲操作系統、至少一個功能所需要的應用程序;存儲數據區可存儲根據SQL注入檢測裝置的使用所創建的數據等。此外,存儲器420可以包括高速隨機存取存儲器,還可以包括非易失性存儲器,例如至少一個磁盤存儲器件、閃存器件、或其他非易失性固態存儲器件。在一些實施例中,存儲器420可選包括相對于處理器410遠程設置的存儲器,這些遠程存儲器可以通過網絡連接至SQL注入檢測裝置。上述網絡的實例包括但不限于互聯網、企業內部網、局域網、移動通信網及其組合。
輸入裝置430可接收輸入的數字或字符信息,以及產生與SQL注入檢測裝置的用戶設置以及功能控制有關的鍵信號輸入。輸出裝置440可包括顯示屏等顯示設備。
所述一個或者多個模塊存儲在所述存儲器420中,當被所述一個或者多個處理器410執行時,執行上述任意方法實施例中的SQL注入檢測方法。
上述產品可執行本申請實施例所提供的方法,具備執行方法相應的功能模塊和有益效果。未在本實施例中詳盡描述的技術細節,可參見本申請實施例所提供的方法。
本領域技術人員應明白,本申請的實施例提供為方法、裝置(設備)、或計算機程序產品。因此,本申請可采用完全硬件實施例、完全軟件實施例、或結合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產品的形式。
本申請是參照根據本申請實施例的方法、裝置(設備)和計算機程序產品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合。可提供這些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數據處理設備的處理器以產生一個機器,使得通過計算機或其他可編程數據處理設備的處理器執行的指令產生用于實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導計算機或其他可編程數據處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產生包括指令裝置的制造品,該指令裝置實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數據處理設備上,使得在計算機或其他可編程設備上執行一系列操作步驟以產生計算機實現的處理,從而在計算機或其他可編程設備上執行的指令提供用于實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
盡管已描述了本申請的優選實施例,但本領域內的技術人員一旦得知了基本創造性概念,則可對這些實施例作出另外的變更和修改。所以,所附權利要求意欲解釋為包括優選實施例以及落入本申請范圍的所有變更和修改。
顯然,本領域的技術人員可以對本申請進行各種改動和變型而不脫離本申請的精神和范圍。這樣,倘若本申請的這些修改和變型屬于本申請權利要求及其等同技術的范圍之內,則本申請也意圖包含這些改動和變型在內。