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