国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

SQL注入繞過技術與防御機制研究

2015-12-25 01:39:16宋超臣黃俊強吳瓊郭軼
信息安全與通信保密 2015年2期
關鍵詞:關鍵字漏洞語句

宋超臣, 黃俊強, 吳瓊, 郭軼

(黑龍江省電子信息產(chǎn)品監(jiān)督檢驗院,黑龍江哈爾濱150090)

0 引言

隨著WEB應用技術的迅猛發(fā)展以及數(shù)據(jù)庫在Web中的廣泛應用,SQL注入已經(jīng)成為WEB應用的主要攻擊手段。根據(jù)OWASP TOP 10統(tǒng)計,注入攻擊一直位于WEB威脅的榜首位置,而SQL注入攻擊是注入攻擊的主要方式。SQL是訪問數(shù)據(jù)庫所必須采用的標準語言,大多數(shù)Web應用都需要與數(shù)據(jù)庫進行交互,以便生成用戶需要的數(shù)據(jù)。SQL注入攻擊主要是由于編程人員在開發(fā)應用程序的時候,沒有對用戶輸入進行合法性驗證或者驗證規(guī)則存在漏洞,致使惡意攻擊者可以使用非法輸入竊取系統(tǒng)的敏感資料[1]。在此基礎上,惡意攻擊者可以通過構造特殊SQL語句執(zhí)行數(shù)據(jù)庫控制臺命令,如果數(shù)據(jù)庫安全配置不嚴格的話,甚至可以直接執(zhí)行操作系統(tǒng)命令。

本文針對上述問題,根據(jù)SQL語句的執(zhí)行特點,給出了三種SQL注入分類,然后討論了通用的數(shù)據(jù)庫SQL注入繞過技術和針對不同數(shù)據(jù)庫的特定SQL注入繞過技術。最后,本文從源代碼開發(fā)到網(wǎng)絡架構設計等不同層面給出了SQL注入的防御技術。

本文第一節(jié)給出了SQL注入的分類?第二節(jié)給出了SQL注入的繞過技術?第三節(jié)給出了SQL注入的防御機制?第四節(jié)總結本文并指出下一步的工作。

1 SQL注入分類

當用戶輸入的SQL查詢語句的內(nèi)容或字符串轉義字符沒有正確地經(jīng)過應用程序過濾時,就可能存在SQL注入漏洞,它將導致數(shù)據(jù)庫執(zhí)行非法的SQL語句,SQL注入漏洞通常在應用程序的査詢接口設計不適當時發(fā)生[2]。通常Web程序中拼接完成的SQL語句如下:

通常情況下,該語句通過用戶輸入的author值查詢作者的各種書籍,如果用戶正常輸入作者名稱,則該語句能夠正常工作,然而如果惡意人員構造以下字符串:

那么上述SQL語句則變成:

由于該語句符合SQL語句規(guī)范,則計算機程序會正確執(zhí)行該語句。因為where語句中的條件為永真條件,那么該語句執(zhí)行結果為所有作者的書籍列表。當用戶通過構造特定的語句,就能夠完成竊取數(shù)據(jù)庫信息的任務,甚至執(zhí)行操作系統(tǒng)命令或對數(shù)據(jù)庫數(shù)據(jù)進行修改。

根據(jù)輸入語句參數(shù)的不同,SQL注入可以分為數(shù)字型注入和字符型注入。數(shù)字型注入和字符型注入只是在注入過程中需要對單引號進行區(qū)分,實際上并無本質區(qū)別。根據(jù)返回注入結果的不同,可以分為顯示注入、顯錯注入、盲注和二階注入四種方法。

(1)SQL顯示注入

Web應用程序直接將查詢結果顯示到輸出頁面的顯示位,直接泄露數(shù)據(jù)信息。

(2)SQL顯錯注入

通過構造的錯誤SQL命令將目標信息在數(shù)據(jù)庫錯誤信息中顯示出來,從而達到竊取數(shù)據(jù)的目的。

(3)SQL盲注

SQL盲注也稱為延時注入,就是根據(jù)SQL查詢語句的真假,利用時間函數(shù)推遲輸出或正常輸出。如果Web應用程序對數(shù)據(jù)庫錯誤信息進行過濾,不進行錯誤信息顯示,那么,就需要利用時間函數(shù)或其他特定手段來對數(shù)據(jù)庫的返回結果進行判斷。在MSSQL中,使用WAITFOR DELAY函數(shù)進行延時,當查詢結果為假時立即返回查詢頁面,當查詢結果為真時延遲一定時間返回查詢頁面,從而對數(shù)據(jù)信息進行判斷。同理,在Oracle和MySQL 5.0以上版本使用sleep()函數(shù)來實現(xiàn)上述功能。對于不支持延時函數(shù)的數(shù)據(jù)庫,可以使用耗時操作來實現(xiàn)延時注入,例如BENCHMARK()函數(shù)。

(4)二階注入

二級注入攻擊是指不直接執(zhí)行SQL語句命令,而是向數(shù)據(jù)庫中存儲惡意字符,當應用程序調用該惡意字符時,對系統(tǒng)進行危害。二階注入攻擊,不會直接竊取到用戶數(shù)據(jù),只有當特定條件時,威脅才會被觸發(fā),這就需要攻擊者清楚數(shù)據(jù)處理流程才能利用該漏洞[3]。例如,在一個Web論壇中,存在uid為用戶編號和prd為用戶權限兩個參數(shù),其中uid為用戶注冊時輸入,prd為系統(tǒng)分配。那么,用戶在注冊用戶信息時uid輸入為1 and rd=1--,用戶在登陸系統(tǒng)時,執(zhí)行SQL語句where id=uid and rd=prd,則實際語句將變?yōu)閣here id=1 and rd=1—and rd=prd,則成功繞過系統(tǒng)驗證獲取到管理員權限。

2 SQL注入檢測及繞過技術

SQL注入繞過技術通常也作為SQL注入檢測技術,兩者之間是密不可分的。SQL注入繞過技術屬于模糊測試的一種方法,只有對目標WEB應用撐血有足夠了解,才能夠應用模糊測試技術實現(xiàn)SQL注入漏洞的檢測。只有了解Web應用程序中采用的防御機制,才能繞過目標系統(tǒng)的過濾機制實施攻擊。

(1)關鍵字編碼

針對SQL注入攻擊,程序員通常采用黑名單的方式對一些關鍵字進行過濾,已達到防御SQL注入的目的。常見的SQL關鍵字有:“and”、“union”、“count”、“mid”、“insert”、“contact”、“group_concat”等。針對這種防御技術,通??梢圆捎肬NICODE編碼或ASCII編碼,實現(xiàn)繞過。例如,可以對空格進行編碼,unicode下使用%3D 代替“ =”號,同樣 Select char(66,67,68)等價于Select‘BCD’。同樣,在一些特殊數(shù)據(jù)庫中,還存在一些特定字符的繞過技術。例如,在MySQL數(shù)據(jù)庫中,使用/??/代替空格字符,%26%26和and等同,||和or等同。

(2)混合編碼

由于WEB應用程序區(qū)分大小寫字母,而在SQL語句執(zhí)行的過程時不區(qū)分大小寫字母,利用這個特性,可以使用fuzzing技術生成隨機大小寫關鍵字,從而繞過黑名單達到非法攻擊的目的。例如and關鍵字等價于And、aNd、And等等。

(3)拆分繞過

部分關鍵字過濾技術采取一次去除機制,例如用戶輸入id=1 and 1=1,應用程序對關鍵字and進行一次過濾,結果變?yōu)閕d=11=1,從而造成SQL注入語句失敗,但如果用戶輸入id=1 anandd 1=1,同樣應用程序對and進行一次過濾,輸出結果變?yōu)閕d=1 and 1=1,從而可以正確執(zhí)行SQL注入攻擊。

可以通過以上技術繞過SQL的防御技術,實施SQL注入攻擊。根據(jù)以上規(guī)則,通過模糊測試系統(tǒng),生成測試用例,實現(xiàn)SQL注入漏洞的檢測。

3 SQL注入防御機制

針對前文提到的繞過技術,可以在代碼層面和網(wǎng)絡架構層面兩方面來防御SQL注入攻擊。在代碼層面主要使用參數(shù)化查詢、黑白名單過濾、字符編碼等方法。在網(wǎng)絡架構層面,主要使用Web應用防火墻、數(shù)據(jù)庫防火墻等設備,并在操作系統(tǒng)和數(shù)據(jù)庫系統(tǒng)層面進行安全配置。

(1)參數(shù)化查詢

通常SQL查詢語句直接被當做字符串送到數(shù)據(jù)庫中執(zhí)行,這樣容易產(chǎn)生SQL注入漏洞。為對這一缺點進行改進,現(xiàn)在編程語句和數(shù)據(jù)庫借口都允許程序員使用參數(shù)來創(chuàng)建SQL查詢語句,代替直接使用用戶輸入,使用它來代替動態(tài)查詢[4]。參數(shù)化查詢先指定查詢結構,為用戶輸入的每個數(shù)據(jù)預留占位符,再指定每個占位符的內(nèi)容,這樣做可有效防止SQL注入[3]。但是,編寫參數(shù)化查詢比構造簡單的SQL動態(tài)查詢語句要花費更多的時間和精力,許多程序員往往僅注意由用戶直接提交的輸入,致使二階SQL注入攻擊很容易被忽略。這種方式可能會向數(shù)據(jù)庫傳遞不安全的參數(shù),如果數(shù)據(jù)庫函數(shù)調用實在存儲過程中使用動態(tài)SQL語句,那還是會產(chǎn)生SQL注入漏洞。

(2)黑白名單過濾

黑白名單過濾主要就是對用戶輸入進行驗證,以確定其是否遵循數(shù)據(jù)輸入規(guī)則,通??梢允褂脜?shù)類型驗證、正則表達式或業(yè)務邏輯等驗證[5]。白名單驗證就是只接受己知的不存在威脅的用戶輸入,涉及到在接受輸入之前先驗證輸入是否滿足期望的類型,長度或大小,數(shù)值范圍以及其他格式標準[6]。雖然白名單可以有效地降低SQL注入威脅,但由于在復雜SQL查詢中,白名單不能夠對所以不必要關鍵字或規(guī)則進行過濾,導致正常查詢不能成功進行,所以其應用受到一定的限制。黑名單是指對用戶輸入進行檢測,一旦發(fā)現(xiàn)名單中的關鍵字或規(guī)則,則拒絕該查詢。該方法效率較高,但由于黑名單不能夠覆蓋所有不合規(guī)格字符串,所以仍然存在一定的風險。

(3)編碼輸出

由于黑白名單過濾機制具有一定的局限性,那么當數(shù)據(jù)在不同模塊間進行傳輸時,為了進一步防止SQL注入攻擊,應對傳遞的數(shù)據(jù)內(nèi)容進行編碼,尤其是未經(jīng)過嚴格驗證的數(shù)據(jù)或第三方數(shù)據(jù)。對傳輸?shù)臄?shù)據(jù)進行編碼,可以消除特定字符帶來影響,使其成為正常SQL語句,從而消除SQL注入攻擊。但這種方法在應用過程中,必須對所有關鍵字進行編碼,一旦某個值沒有編碼,則應用程序仍然容易受到SQL注入攻擊。

(4)合理權限配置

對數(shù)據(jù)庫應用程序不同賬戶間使用不同權限,僅賦予該賬戶完成必須工作所需要的權限。例如,一個查詢程序不需要執(zhí)行、插入、更新等操作,查詢倉庫數(shù)量的賬戶不應具有查看管理員表的權限。通過必要的賬戶權限配置和數(shù)據(jù)庫安全配置,可以極大的減少SQL注入帶來的各種風險。

(5)WEB應用防火墻

目前,WEB應用防火墻已經(jīng)到得到廣泛的應用,WEB客戶端提交至服務器端時,先經(jīng)過WEB應用防火墻進行檢測。如含有特殊字符則將參數(shù)提交給具體的頁面處理,發(fā)現(xiàn)SQL注入?yún)?shù)后,便將請求丟棄。通過這種方法可以有效地防止SQL注入攻擊,對于開發(fā)完成網(wǎng)站即使存在SQL注入漏洞,也可以使用WEB應用防火墻進行防護。

通常采用一種技術很難在根本上避免SQL注入攻擊,這就要求各系統(tǒng)運維單位要在網(wǎng)絡架構、服務器安全配置、軟件檢測等多方面進行防護。首先,在新WEB系統(tǒng)正式運行前,通過專業(yè)掃描工具,對軟件安全漏洞進行檢測,從根本上盡量減少SQL注入攻擊。其次,對操作系統(tǒng)和數(shù)據(jù)庫進行合理的權限配置,減輕SQL注入攻擊帶來的危害,提高網(wǎng)絡攻擊難度。最后,通過部署必要的安全設備,對提交至WEB服務器的數(shù)據(jù)進行檢查,消除SQL注入攻擊。只有通過全方位的防護才能從根本上保障WEB安全。

4 結語

針對目前危害WEB安全的第一要素SQL注入攻擊,本文給出了其分類方法,并對SQL注入繞過技術進行分析,對每種繞過方法舉出構造規(guī)則,通過該規(guī)則可以使用fuzzing技術對SQL注入漏洞進行檢測。最后,針對SQL注入繞過技術,從網(wǎng)絡層面和代碼層面給出了SQL注入的防御機制。

在未來工作中,需要針對WEB頁面的特殊編碼規(guī)則研究SQL注入繞過及檢測技術,并根據(jù)相關規(guī)則構造SQL注入檢測分析與防御系統(tǒng)。

[1] 王溢,李舟軍,郭濤.防御代碼注入式攻擊的字面值污染方法[J].計算機研究與發(fā)展,2012,49(11):2414-2423.

[2] 周淡.SQL注入檢測方法的研究與實現(xiàn)[D].西安:西北大學,2011.

[3] 練坤梅,許靜,田偉.SQL注入漏洞多等級檢測方法研究[J].計算機科學與探索,2011,5(05):474-480.

[4] 馮谷,高鵬.新型SQL注入技術研究與分析[J].計算機科學,2012, 11(39):415-423.

[5] 周敬利,王曉鋒,余勝生等.一種新的反SQL注入策略的研究與實現(xiàn)[J].計算機科學,2006, 11(33):64-68.

[6] 陳小兵,張漢煌,駱力明.SQL注入攻擊及其防范檢測技術研究[J].計算機工程與應用,2007,43(11):150-152.

猜你喜歡
關鍵字漏洞語句
漏洞
履職盡責求實效 真抓實干勇作為——十個關鍵字,盤點江蘇統(tǒng)戰(zhàn)的2021
華人時刊(2022年1期)2022-04-26 13:39:28
重點:語句銜接
成功避開“關鍵字”
精彩語句
三明:“兩票制”堵住加價漏洞
漏洞在哪兒
兒童時代(2016年6期)2016-09-14 04:54:43
高鐵急救應補齊三漏洞
如何搞定語句銜接題
語文知識(2014年4期)2014-02-28 21:59:52
基于用戶反饋的關系數(shù)據(jù)庫關鍵字查詢系統(tǒng)
和田市| 施秉县| 宜都市| 石楼县| 马山县| 方山县| 宜良县| 西丰县| 渑池县| 清水县| 上饶县| 尖扎县| 车致| 九寨沟县| 桂平市| 汝城县| 濮阳县| 广水市| 兖州市| 惠安县| 包头市| 砚山县| 花垣县| 建平县| 汉中市| 将乐县| 罗江县| 瑞昌市| 西城区| 民权县| 伊吾县| 望奎县| 四川省| 清原| 东辽县| 兴城市| 隆化县| 柳河县| 武强县| 彭水| 安仁县|