◆吳力挽 蘇曼玲 楊 翀
(廣州醫科大學衛生職業技術學院 廣東 510450)
SQL注入攻擊研究
◆吳力挽 蘇曼玲 楊 翀
(廣州醫科大學衛生職業技術學院 廣東 510450)
針對web網站遠程滲透問題,本文簡要介紹了SQL注入形成原因、攻擊原理和攻擊過程,重點闡述了SQL注入在開發階段、測試階段、產品化階段的防御措施,將這些措施應用于網站開發中,增強了網站防御效果,提高了網站安全性。
SQL注入; 遠程滲透; 旁注; WebShell權限
SQL注入攻擊是現在web網站遠程滲透最為有效的攻擊方式,其注入技術的門檻低、攻擊隱蔽、危害性大、殺毒軟件無法查殺,一旦形成注入漏洞,網站WebShell權限被攻擊者獲取,攻擊者上傳網頁木馬,從而控制整站,達到攻擊目的。針對SQ L注入攻擊的特點和危害,本文簡要介紹SQL注入攻擊形成的原因、攻擊原理、攻擊流程,提出了一些SQL注入攻擊防范措施。通過在網站上應用這些措施,增強了網站系統立體防御效果,提高了網站安全性。
SQL注入攻擊是由于程序員在編寫代碼過程中,對SQL語句書寫不規范,對一些特殊字符沒有過濾,導致在客戶端能通過全局變量POST和GET提交一些SQL語句,遠程獲取服務器敏感信息,包括用戶名、密碼、姓名、電話、家庭住址等。
很多應用程序都利用數據庫來存儲信息。SQL命令是前端w eb和后端數據庫之間的接口,很多站點都利用SQL語句查詢數據庫,從而返回用戶需要的信息。由于開發程序員編程水平參差不齊,在編程時沒有對一些客戶端編寫的字符進行合法性檢查過濾,導致攻擊者在URL連接、表單域輸入自已編寫的SQL命令,查詢出數據庫的敏感信息,形成SQL注入攻擊。
SQL注入攻擊手段和方法多種多樣,但總的說來,一般分為判斷能否注入、尋找注入點、猜解用戶名和密碼、上傳網頁木馬、入侵和破壞五個階段。
(1)判斷web網站能否注入。如果網站全部做成靜態化,訪問網頁時連接變成為http://www.***.com/index.html,這種普通網頁訪問,由于沒有數據庫訪問入口,所以是不存在注入漏洞的。當訪問網頁變成http://www.***.com/do?id=1,其中?id=1表示數據查詢變量,這種語句需要在數據庫端執行,因此通過單引號法判斷程序是否存在注入漏洞。
(2)尋找web網站注入點。完成上一步的檢測后,就要尋找可利用的注入漏洞,通過輸入一些特殊語句,根據瀏覽器返回的信息,判斷是否存在注入點和數據庫類型等有用信息。在http://xxx.xxx.xxx/abcd.asp?p=XX 后面追加“and 1=1”,并訪問該網址即http://xxx.xxx.xxx/abcd.asp?p=XX and 1=1 應該與訪問原地址得到的結果相同。在http://xxx.xxx.xxx/abcd.asp?p=XX 后面追加“a nd 1=2”,并訪問該網址即http://xxx.xxx.xxx/abcd.asp?p=XX and 1 =2應該與訪問原地址得到的結果不同,并提示數據庫錯誤。這就說明該入口存在注入漏洞。
(3)猜解用戶名和密碼。數據庫中現有的表名都是有規律的。攻擊者可以通過構建特殊SQL語句在數據庫中依次查找表名、字段名、用戶名和密碼長度以及內容。這個猜測過程可以通過網上現有SQL注入工具快速實現,如:阿D注入、NBSI、WEB旁注綜合檢測、SQLMAP,這些工具可以快速破解網站用戶密碼。
(4)上傳網頁木馬。在猜解到用戶名和密碼后,利用第三方掃描工具快速掃面網站,利用社會工程學反復嘗試,從而獲得網站管理員后臺登錄界面。登錄到網站后臺,利用上傳功能上傳網頁木馬。
(5)入侵和破壞。在成功上傳了網頁木馬后,接下來就可以進行任意的破壞行為,包括刪除網站程序文件、篡改網頁、添加非法用戶、修改泄漏用戶信息,進一步入侵數據庫從而獲取到數據庫的控制權限。
首先,在開發階段樹立防SQL注入安全意識,編寫程序時,一定要加強對危險字符的嚴格過濾。最常用做法是單獨編寫一個防SQL注入的通用程序,通過Include方式放到數據庫連接文件中,這樣可以在每個頁面進行加載。該程序是利用正則表達式匹配策略,逐一檢測判斷用戶輸入字符的合法性,其正則判斷規則'|(and|or).+?(〉|〈|=|in|like)|/*.+?*/|〈s*script|EXEC|U NION.+?SELECT|UPDATE.+?SET|INSERTs+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNC ATE)s+(TABLE|DATABASE)。調用正則函數編寫如下:

其次,在測試階段采用兩種方式對web安全加強檢測,一是采用源代碼相互審查方式,從編程者角度審視代碼是否存在漏洞;二是采用第三方專業的工具進行漏洞檢測,如:sqlmap工具,這樣可以不斷提高代碼質量,杜絕各種漏洞。
再次,在產品化階段通過部署第三方硬件設備加強過濾。本文采用藍盾web應用防火墻,通過串接式部署在服務器DMZ區,在web防火墻管理系統界面輸入過濾端口,這樣所有流經服務器流量均要經過web防火墻深度入侵檢測,判斷是否為SQL注入惡意流量,一旦確認就進行阻斷并記錄到攻擊日志。同時不定期升級web防火墻的安全規則,不斷增強其防御效果。
最后,在前端對網站所有頁面做靜態化處理,通過模板生成靜態頁的方式,將網頁內容存儲到服務器本地硬盤,用戶訪問網站時瀏覽的是服務器硬盤數據,沒有訪問數據庫,從而杜絕SQ L注入攻擊。在后端,所有的數據表操作都采用參數化查詢方式,利用存儲過程進行參數化傳遞,既能加快編譯速度,又能防范惡意SQL注入。
本文從SQL注入形成原因、攻擊原理、攻擊過程入手,詳細闡述了在開發階段、測試階段和產品化階段SQL注入防御措施。在后續的工作中,還可以在IIS中設置為不返回服務器出錯信息,對IIS中一些上傳目錄將其執行權限設置為最低。另外,對數據庫中敏感字符進行復雜MD5加密處理,對密碼不定期更換,通過以上措施,SQL注入才能防患于未然。
[1]樂德廣,李鑫,龔聲蓉,鄭力新.新型二階SQL注入技術研究[J].通信學報,2015.
[2]田偉,許靜,楊巨峰等.模型驅動的Web應用SQL注入滲透測試[J].高技術通訊,2012.
[3]田玉杰,趙澤茂,張海川等.二階SQL注入攻擊防御模型[J].信息網絡安全,2014.
[4]王文明,李海煒.SQL服務器注入攻擊的主動防御技術研究[J].計算機科學,2012.
[5]王溢,李舟軍,郭濤等.防御代碼注入式攻擊的字面值污染方法[J].計算機研究與發展,2012.