一種針對cookie方式的sql注入漏洞檢測方法
【專利摘要】本發(fā)明提供一種針對COOKIE方式的SQL注入漏洞檢測方法,包括以下步驟:形成用戶COOKIE值的初始SQL注入判斷語句;截取并修改用戶提交的COOKIE值;通過修改用戶COOKIE值生成最終SQL注入判斷語句;頁面獲取最終SQL注入判斷語句;返回執(zhí)行SQL注入判斷語句頁面。本發(fā)明主要用于解決防SQL注入,對SQL注入防護(hù)不徹底的問題。通過提交COOKIE值形成的SQL注入判斷語句,查看程序?qū)OOKIE值的接受情況,通過頁面返回?cái)?shù)據(jù)對比,最終檢測出程序COOKIE值的SQL注入問題。
【專利說明】—種針對COOKIE方式的SQL注入漏洞檢測方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于網(wǎng)絡(luò)安全檢測【技術(shù)領(lǐng)域】,具體涉及一種針對COOKIE方式的SQL注入漏洞檢測方法。
【背景技術(shù)】
[0002]近年來,SQL注入式攻擊一直如幽靈般困擾著眾多企業(yè),成為令企業(yè)毛骨悚然的夢魘。每年都有大規(guī)模SQL注入式攻擊襲掠大量的網(wǎng)站,連蘋果公司的網(wǎng)站也未能幸免。這種猖獗的攻擊向業(yè)界招示其日漸流行的趨勢,黑客們也越來越喜歡這種可以滲透進(jìn)入企業(yè)的基礎(chǔ)架構(gòu)和數(shù)據(jù)庫資源的攻擊方式。
[0003]隨著B/S模式應(yīng)用開發(fā)的發(fā)展,使用這種模式編寫程序的程序員越來越來越多,但是由于程序員的水平參差不齊相當(dāng)大一部分應(yīng)用程序存在安全隱患。用戶可以提交一段數(shù)據(jù)庫查詢代碼,根據(jù)程序返回的結(jié)果,獲得某些他想要知的數(shù)據(jù),這個(gè)就是所謂的SQLinjection0
[0004]COOKIE方式下的SQL注入與傳統(tǒng)SQL注入相比,更難以被發(fā)現(xiàn),普通簡單的檢測手段無法查出C00KIE方式下的SQL注入漏洞,很多管理員為了簡單快速防止SQL注入,都會(huì)使用通用防SQL注入程序,由于很多通用防SQL注入程序?qū)τ脩籼峤坏腜OST和GET方式數(shù)據(jù)進(jìn)行過濾,但缺少C00KIE數(shù)據(jù)層的防護(hù),程序員在編寫代碼時(shí),變量定義不嚴(yán)格,導(dǎo)致程序會(huì)接受C00KIE值,C00KIE值可以在本機(jī)進(jìn)行修改,黑客通過在本機(jī)構(gòu)造C00KIE值進(jìn)行SQL注入。為此,本專利提出一種針對C00KIE方式的SQL注入漏洞檢測技術(shù),通過截獲C00KIE值,通過程序?qū)撁鏀?shù)據(jù)的差異,來判斷SQL注入是否存在,防SQL注入程序是否徹底防止SQL注入,解決了 C00KIE方式下的SQL注入問題。
[0005]在WEB應(yīng)用常見的腳本語言中,如ASP.NET,PHP或JSP中,一個(gè)典型的顯示新聞頁面的SQL語句可以寫成:
[0006]id=request("id")
[0007]strSQL="select*from news where ID="&id
[0008]通常我們通過獲取用戶提交的變量$id,將其提交給數(shù)據(jù)庫并查看返回的strSQL值,從而顯示出正確的新聞。這條查詢SQL語句在正常情況下可以顯示新聞內(nèi)容,但當(dāng)攻擊者輸入一些精心構(gòu)造的語句時(shí),我們提交給數(shù)據(jù)庫的SQL語句執(zhí)行結(jié)果就會(huì)發(fā)現(xiàn)改變。如攻擊者輸入
[0009]$id為:“l(fā)andl=l”和“l(fā)andl=2”。此時(shí)整條查詢語句變成了:
[0010]strSQLl = “select*from news where ID=Iandl=I
[0011]strSQL2 = “select*from news where ID=landl=2”
[0012]這兩條SQL語句由于條件的不同,頁面返回的內(nèi)容也不同。如果攻擊者繼續(xù)構(gòu)造其它SQL語句,可查詢出數(shù)據(jù)庫管理員表信息,SQL注入漏洞的最大危害,攻擊者可以任意構(gòu)造SQL語句查詢數(shù)據(jù)庫內(nèi)容,可對數(shù)據(jù)庫進(jìn)行查詢,增加,修改,刪除等操作。然而SQL注入漏洞在理論上存在于所有應(yīng)用程序與數(shù)據(jù)庫交互之處,一個(gè)中等規(guī)模的應(yīng)用系統(tǒng)可能有上百處交互,由于SQL語句是由用戶輸入與程序提供的原始語句拼合而成,對于用戶的輸入,分析防范非常困難。
[0013]目前,對SQL注入攻擊的防御方式主要有以下幾種:
[0014]1.手工添加參數(shù)過濾語句,對用戶輸入進(jìn)行嚴(yán)格過濾。
[0015]2.制定一個(gè)關(guān)鍵詞集合,對于所有的用戶輸入均與該集合中的每一個(gè)關(guān)鍵詞匹配,如果用戶的輸入中存在關(guān)鍵字,則判定為非法輸入。
[0016]3.使用通用防SQL注入程序,針對ASP、PHP、JSP等不同腳本都有相應(yīng)的防SQL注入程序。但部分通用防SQL注入程序不能完全防止SQL注入漏洞。
【發(fā)明內(nèi)容】
[0017]為了克服上述現(xiàn)有技術(shù)的不足,本發(fā)明提供一種針對COOKIE方式的SQL注入漏洞檢測方法,主要用于解決防SQL注入,對SQL注入防護(hù)不徹底的問題。通過提交COOKIE值形成的SQL注入判斷語句,查看程序?qū)OOKIE值的接受情況,通過頁面返回?cái)?shù)據(jù)對比,最終檢測出程序C00KIE值的SQL注入問題。
[0018]為了實(shí)現(xiàn)上述發(fā)明目的,本發(fā)明采取如下技術(shù)方案:
[0019]提供一種針對C00KIE方式的SQL注入漏洞檢測方法,所述方法包括以下步驟:
[0020]步驟1:形成用戶C00KIE值的初始SQL注入判斷語句;
[0021]步驟2:截取并修改用戶提交的C00KIE值;
[0022]步驟3:通過修改用戶C00KIE值生成最終SQL注入判斷語句;
[0023]步驟4:頁面獲取最終SQL注入判斷語句;
[0024]步驟5:返回執(zhí)行SQL注入判斷語句頁面。
[0025]所述步驟I中,使用javascript:alert方式提交對某變量的判斷值,形成初始SQL注入判斷語句,通過C00KIE編碼對語句進(jìn)行修改,最終以javascript:alert方式配合C00KIE編碼下的escape函數(shù)提交C00KIE值。
[0026]所述步驟2包括以下步驟:
[0027]步驟2-1:對用戶提交的C00KIE值進(jìn)行查看并修改,使C00KIE值的格式和語法正確,最終在C00KIE值中形成驗(yàn)證某變量的初始SQL注入判斷語句;
[0028]步驟2-2:通過 javascript:alert O 函數(shù)提交 C00KIE 值,使用 document, cookie方法,配合escape函數(shù)對C00KIE值據(jù)進(jìn)行編碼處理;并對javascript:alert O函數(shù)document, cookie方法提交的數(shù)據(jù)進(jìn)行截取,對截取的數(shù)據(jù)進(jìn)行驗(yàn)證,如果數(shù)據(jù)正確,再進(jìn)行提交處理。
[0029]所述步驟3中,截取新聞頁面的訪問數(shù)據(jù),查看生成的最終SQL注入判斷語句,查看變量是否接受了用戶的C00KIE值;通過訪問未帶參數(shù)的新聞頁面,查看新聞頁面數(shù)據(jù)值,判斷新聞頁面是否接受了提交的C00KIE值。
[0030]所述步驟4中,新聞頁面變量通過C00KIE值獲取最終SQL注入判斷語句,通過對未帶參數(shù)的新聞頁面進(jìn)行訪問,通過訪問結(jié)果查看C00KIE值中的SQL注入判斷語句是否進(jìn)入了新聞頁面。
[0031]所述步驟5中,訪問過濾掉參數(shù)的新聞頁面,提交SQLl和SQL2后,訪問無參數(shù)的新聞頁面,兩個(gè)新聞頁面返回的數(shù)據(jù)進(jìn)行對比,若兩個(gè)新聞頁面數(shù)據(jù)有差異,則表明存在COOKIE方式的SQLL注入漏洞,若兩個(gè)新聞頁面數(shù)據(jù)相同,則表明不存在COOKIE方式的SQL注入漏洞。
[0032]與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果在于:本發(fā)明提供的針對COOKIE方式的SQL注入漏洞檢測方法,主要用于解決防SQL注入,對SQL注入防護(hù)不徹底的問題。通過提交COOKIE值形成的SQL注入判斷語句,查看程序?qū)OOKIE值的接受情況,通過頁面返回?cái)?shù)據(jù)對比,最終檢測出程序COOKIE值的SQL注入問題。
【專利附圖】
【附圖說明】
[0033]圖1是針對COOKIE方式的SQL注入漏洞檢測方法流程圖;
[0034]圖2是用戶提交C00KIE值截取到的SQL注入判斷語句流程圖。
【具體實(shí)施方式】
[0035]下面結(jié)合附圖對本發(fā)明作進(jìn)一步詳細(xì)說明。
[0036]如圖1和圖2,提供一種針對C00KIE方式的SQL注入漏洞檢測方法,所述方法包括以下步驟:
[0037]步驟1:形成用戶C00KIE值的初始SQL注入判斷語句;
[0038]步驟2:截取并修改用戶提交的C00KIE值;
[0039]步驟3:通過修改用戶C00KIE值生成最終SQL注入判斷語句;
[0040]步驟4:頁面獲取最終SQL注入判斷語句;
[0041]步驟5:返回執(zhí)行SQL注入判斷語句頁面。
[0042]步驟I包括以下步驟:
[0043](I)、使用C00KIE方式編碼生成SQL注入判斷語句
[0044](2)、使用變量替換SQL語句
[0045]Ql=javascript: alert、Q2=document.cookie、Q3= “ ID=,,;
[0046]Q4= “escape”、Q5="landl=l"、Q6="landl=2";
[0047]SQL1=Q1+Q2+Q4+Q5、SQL2=Q1+Q2+Q4+Q6
[0048]步驟2包括以下步驟:
[0049]步驟2-1:對用戶提交的C00KIE值進(jìn)行查看并修改,使C00KIE值的格式和語法正確,最終在C00KIE值中形成驗(yàn)證某變量的初始SQL注入判斷語句;
[0050]步驟2-2:通過 javascript:alert O 函數(shù)提交 C00KIE 值,使用 document, cookie方法,配合escape函數(shù)對C00KIE值據(jù)進(jìn)行編碼處理;并對javascript:alert O函數(shù)document, cookie方法提交的數(shù)據(jù)進(jìn)行截取,對截取的數(shù)據(jù)進(jìn)行驗(yàn)證,如果數(shù)據(jù)正確,再進(jìn)行提交處理。
[0051]對用戶提交的C00KIE進(jìn)行查看,格式和語法要正確,最終在數(shù)據(jù)中形成驗(yàn)證某變量的SQL注入判斷語句。
[0052](I)SQLl=javascript:alert(document.cookie="ID="+escape("Iandl=I"))
[0053](2)SQL2=javascript:alert(document.cookie="ID="+escape("landl=2"))
[0054]步驟3中,截取新聞頁面的訪問數(shù)據(jù),查看生成的最終SQL注入判斷語句,查看變量是否接受了用戶的C00KIE值;通過訪問未帶參數(shù)的新聞頁面,查看新聞頁面數(shù)據(jù)值,判斷新聞頁面是否接受了提交的COOKIE值。
[0055](I) strSQLl = “SQL”+SQLl
[0056](2) strSQL2 = “SQL” +SQL2
[0057]所述步驟4中,新聞頁面變量通過COOKIE值獲取最終SQL注入判斷語句,通過對未帶參數(shù)的新聞頁面進(jìn)行訪問,通過訪問結(jié)果查看COOKIE值中的SQL注入判斷語句是否進(jìn)入了新聞頁面。
[0058](I)strSQLl = “select*from news where ID=Iandl=I”
[0059](2)strSQL2 = “select*from news where ID=landl=2”
[0060]所述步驟5中,訪問過濾掉參數(shù)的新聞頁面,提交SQLl和SQL2后,訪問無參數(shù)的新聞頁面,兩個(gè)新聞頁面返回的數(shù)據(jù)進(jìn)行對比,若兩個(gè)新聞頁面數(shù)據(jù)有差異,則表明存在C00KIE方式的SQLL注入漏洞,若兩個(gè)新聞頁面數(shù)據(jù)相同,則表明不存在C00KIE方式的SQL注入漏洞。
[0061]最后應(yīng)當(dāng)說明的是:以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案而非對其限制,盡管參照上述實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)的說明,所屬領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:依然可以對本發(fā)明的【具體實(shí)施方式】進(jìn)行修改或者等同替換,而未脫離本發(fā)明精神和范圍的任何修改或者等同替換,其均應(yīng)涵蓋在本發(fā)明的權(quán)利要求范圍當(dāng)中。
【權(quán)利要求】
1.一種針對COOKIE方式的SQL注入漏洞檢測方法,其特征在于:所述方法包括以下步驟: 步驟1:形成用戶COOKIE值的初始SQL注入判斷語句; 步驟2:截取并修改用戶提交的COOKIE值; 步驟3:通過修改用戶COOKIE值生成最終SQL注入判斷語句; 步驟4:頁面獲取最終SQL注入判斷語句; 步驟5:返回執(zhí)行SQL注入判斷語句頁面。
2.根據(jù)權(quán)利要求1所述的針對COOKIE方式的SQL注入漏洞檢測方法,其特征在于:所述步驟I中,使用javascript:alert方式提交對某變量的判斷值,形成初始SQL注入判斷語句,通過COOKIE編碼對語句進(jìn)行修改,最終以javascript:alert方式配合COOKIE編碼下的escape函數(shù)提交COOKIE值。
3.根據(jù)權(quán)利要求1所述的針對COOKIE方式的SQL注入漏洞檢測方法,其特征在于:所述步驟2包括以下步驟: 步驟2-1:對用戶提交的COOKIE值進(jìn)行查看并修改,使COOKIE值的格式和語法正確,最終在COOKIE值中形成驗(yàn)證某變量的初始SQL注入判斷語句; 步驟 2-2:通過 javascript:alert O 函數(shù)提交 COOKIE 值,使用 document, cookie 方法,配合escape函數(shù)對COOKIE值據(jù)進(jìn)行編碼處理;并對javascript: alert ()函數(shù)document,cookie方法提交的數(shù)據(jù)進(jìn)行截取,對截取的數(shù)據(jù)進(jìn)行驗(yàn)證,如果數(shù)據(jù)正確,再進(jìn)行提交處理。
4.根據(jù)權(quán)利要求1所述的針對COOKIE方式的SQL注入漏洞檢測方法,其特征在于:所述步驟3中,截取新聞頁面的訪問數(shù)據(jù),查看生成的最終SQL注入判斷語句,查看變量是否接受了用戶的COOKIE值;通過訪問未帶參數(shù)的新聞頁面,查看新聞頁面數(shù)據(jù)值,判斷新聞頁面是否接受了提交的COOKIE值。
5.根據(jù)權(quán)利要求1所述的針對COOKIE方式的SQL注入漏洞檢測方法,其特征在于:所述步驟4中,新聞頁面變量通過COOKIE值獲取最終SQL注入判斷語句,通過對未帶參數(shù)的新聞頁面進(jìn)行訪問,通過訪問結(jié)果查看COOKIE值中的SQL注入判斷語句是否進(jìn)入了新聞頁面。
6.根據(jù)權(quán)利要求1所述的針對COOKIE方式的SQL注入漏洞檢測方法,其特征在于:所述步驟5中,訪問過濾掉參數(shù)的新聞頁面,提交SQLl和SQL2后,訪問無參數(shù)的新聞頁面,兩個(gè)新聞頁面返回的數(shù)據(jù)進(jìn)行對比,若兩個(gè)新聞頁面數(shù)據(jù)有差異,則表明存在COOKIE方式的SQLL注入漏洞,若兩個(gè)新聞頁面數(shù)據(jù)相同,則表明不存在COOKIE方式的SQL注入漏洞。
【文檔編號】H04L29/06GK103441985SQ201310317265
【公開日】2013年12月11日 申請日期:2013年7月25日 優(yōu)先權(quán)日:2013年7月25日
【發(fā)明者】馮谷, 余勇, 張小鍵, 郭騫, 石聰聰, 鮑興川, 高鵬, 蔣誠智, 俞庚申, 范杰, 曹宛恬, 李尼格 申請人:國家電網(wǎng)公司, 中國電力科學(xué)研究院