摘 要:利用腳本漏洞測(cè)試系統(tǒng)搭建了SQL注入漏洞實(shí)驗(yàn)平臺(tái),在平臺(tái)上對(duì)SQL注入進(jìn)行了分析和防范,結(jié)合Cookies注入突破了系統(tǒng)防護(hù)程序的保護(hù),最后給出了Cookies注入的防護(hù)措施。
關(guān)鍵詞:漏洞測(cè)試;SQL注入;Cookies注入;防護(hù)措施
1 引言
隨著網(wǎng)絡(luò)安全技術(shù)的不斷發(fā)展,SQL注入攻擊作為最常見(jiàn)的攻擊方式被越來(lái)越多的人所知曉。Web安全與數(shù)據(jù)庫(kù)安全研究組織(OWASP:Open Web Application Security Project)提供的OWASP_TOP10_WEB[1]安全報(bào)告中指出,Web應(yīng)用程序中最常見(jiàn)、最危險(xiǎn)的安全威脅就是SQL注入漏洞。
2 SQL注入分析與防范
利用網(wǎng)絡(luò)上免費(fèi)的腳本漏洞測(cè)試系統(tǒng)搭建SQL注入漏洞實(shí)驗(yàn)平臺(tái)(Asp+Access),經(jīng)過(guò)典型的SQL注入測(cè)試發(fā)現(xiàn)在該系統(tǒng)的/news.asp?id=1地方存在注入漏洞,代碼如下:
從代碼中可以看到news.asp文件中通過(guò)request(\"id\")方式獲取客戶端提交的數(shù)據(jù),并且對(duì)于客戶端傳遞過(guò)去的參數(shù)id系統(tǒng)沒(méi)有做任何處理就直接傳遞給了sql語(yǔ)句,形成了典型的SQL注入漏洞??蛻舳丝梢允止せ蚪柚ぞ咄瓿上到y(tǒng)的SQL注入測(cè)試。
但腳本漏洞測(cè)試系統(tǒng)的include 文件夾中存在safe.asp文件,該程序是為了對(duì)客戶端提交的數(shù)據(jù)進(jìn)行驗(yàn)證和過(guò)濾,判斷是否存在非法字符,可以在news.asp中包含此文件以防止系統(tǒng)被直接SQL注入,代碼如下:
分析代碼可以看到,程序?qū)νㄟ^(guò)GET、POST方式提交的數(shù)據(jù)利用“黑名單”進(jìn)行了過(guò)濾,根據(jù)特征字符串去過(guò)濾掉一些危險(xiǎn)的字符,常規(guī)檢測(cè)SQL注入漏洞的手段很難繞過(guò)防注入程序。
3 Cookie注入形成與攻擊
ASP腳本中的request對(duì)象被用來(lái)獲取客戶端提交的數(shù)據(jù),ASP開(kāi)發(fā)文檔中對(duì)Request對(duì)象描述,當(dāng)瀏覽器向服務(wù)器請(qǐng)求頁(yè)面時(shí),這個(gè)行為就被稱為一個(gè)Request(請(qǐng)求)[2]。Request對(duì)象的使用方法為:Request.[集合名稱](參數(shù)名稱),但ASP中規(guī)定可以省略集合名稱。當(dāng)使用Request(\"參數(shù)名稱\")方式獲取數(shù)據(jù)時(shí),ASP規(guī)定按照QueryString、Form、Cookies、ServerVariables集合的順序來(lái)搜索存取,通過(guò)提交cookie的方式來(lái)提交變量的值,從而發(fā)起注入攻擊,這種攻擊方式被稱之為 Cookie注入[3]。
從腳本漏洞測(cè)試系統(tǒng)的safe.asp文件中可以看到,程序?qū)ET、POST方式提交的數(shù)據(jù)進(jìn)行過(guò)濾,但是沒(méi)有對(duì)使用request.cookies(\"參數(shù)名稱\")方式提交的數(shù)據(jù)進(jìn)行過(guò)濾,因此程序在該處形成了Cookie注入攻擊,利用下面的Cookie注入過(guò)程進(jìn)行測(cè)試攻擊[4]。
⑴尋找類似“/news.asp?id=1”的帶參數(shù)的URL地址,去掉“id=1”查看頁(yè)面顯示是否正常,如果出現(xiàn)異常,說(shuō)明參數(shù)id=1在數(shù)據(jù)傳遞中是起到直接作用。
⑵清空瀏覽器地址欄,輸入“javascript:alert(document.cookie=\"id=\"+escape(\"1\"));”,回車確認(rèn),在彈出的對(duì)話框中顯示id=1。
⑶重復(fù)上述步驟,將經(jīng)典SQL注入判斷語(yǔ)句\"and 1=1\"和\"and1=2\"寫入提交的字符串中, “javascript:alert(document.cookie=\"id=\"+escape(\"1 and 1=1\"));”
和“javascript:alert(document.cookie=\"id=\"+escape(\"1 and 1=2\"));”。如果分別返回正常和不正常頁(yè)面,則說(shuō)明該處可能存在注入漏洞,可以進(jìn)行cookies注入。
(4)在Cookies注入的基礎(chǔ)上手工或借助工具來(lái)完成系統(tǒng)的注入攻擊。
4 防范與總結(jié)
通過(guò)分析漏洞測(cè)試系統(tǒng)中的代碼,確定SQL注入漏洞產(chǎn)生的原因在于:程序是通過(guò)request(\"id\")方式獲取客戶端提交的數(shù)據(jù),并且在防注入程序safe.asp中沒(méi)有對(duì)通過(guò)request.cookies方式提交的數(shù)據(jù)進(jìn)行過(guò)濾[4]。
因此,在開(kāi)發(fā)和設(shè)計(jì)Web應(yīng)用程序過(guò)程中對(duì)于客戶端的輸入必須進(jìn)行校驗(yàn)[5],在獲取客戶端提交的數(shù)據(jù)時(shí)指明數(shù)據(jù)提交方式,可以采用Request.QueryString(\"id\")方式來(lái)獲取通過(guò)GET方式提交的數(shù)據(jù),防止通過(guò)Request.Cookies(\"id\")數(shù)據(jù)提交方式注入。
對(duì)客戶端HTML提交的輸入信息進(jìn)行URL解碼,防止通過(guò)URL編碼的方式構(gòu)造SQL命令用來(lái)欺騙SQL防注入檢測(cè)模塊;使用正則表達(dá)式來(lái)驗(yàn)證輸入信息中是否包含特殊字符并檢測(cè)輸入?yún)?shù)信息的長(zhǎng)度是否超過(guò)預(yù)設(shè)的閾值。
[參考文獻(xiàn)]
[1]OWASP.The Ten Most Critical Web ApplicationSecurityRisks[R],http://www.owasp.org/images/0/0f/OWASP_T10_-_2010_rc1.pdf.2012-10.
[2]W3school.ASP Request 對(duì)象[EB/OL].http://www.w3school.com.cn/asp/asp_ref_request.Asp.2013-10-1.
[3]朱遠(yuǎn)文,張煜,常暢,等.基于Cookie的安全防護(hù)技術(shù)研究[J].信息網(wǎng)絡(luò)安全.2012,9:46-49.
[4]瑞星網(wǎng).Web攻防系列教程之Cookie注入攻防實(shí)戰(zhàn).[EB/OL].http://www.rising.com.cn/news letter/news/2012-08-23/12195.html.2013-10-1.
[5]褚誠(chéng)云.跨站腳本XSS安全漏洞[J].程序員.2008,11:97-99.