• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      SQL注入繞過技術(shù)與防御機(jī)制研究

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

      宋超臣, 黃俊強(qiáng), 吳瓊, 郭軼

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

      0 引言

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

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

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

      1 SQL注入分類

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

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

      那么上述SQL語句則變成:

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

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

      (1)SQL顯示注入

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

      (2)SQL顯錯注入

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

      (3)SQL盲注

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

      (4)二階注入

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

      2 SQL注入檢測及繞過技術(shù)

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

      (1)關(guān)鍵字編碼

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

      (2)混合編碼

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

      (3)拆分繞過

      部分關(guān)鍵字過濾技術(shù)采取一次去除機(jī)制,例如用戶輸入id=1 and 1=1,應(yīng)用程序?qū)﹃P(guān)鍵字and進(jìn)行一次過濾,結(jié)果變?yōu)閕d=11=1,從而造成SQL注入語句失敗,但如果用戶輸入id=1 anandd 1=1,同樣應(yīng)用程序?qū)nd進(jìn)行一次過濾,輸出結(jié)果變?yōu)閕d=1 and 1=1,從而可以正確執(zhí)行SQL注入攻擊。

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

      3 SQL注入防御機(jī)制

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

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

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

      (2)黑白名單過濾

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

      (3)編碼輸出

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

      (4)合理權(quán)限配置

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

      (5)WEB應(yīng)用防火墻

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

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

      4 結(jié)語

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

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

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

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

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

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

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

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

      猜你喜歡
      關(guān)鍵字漏洞語句
      漏洞
      履職盡責(zé)求實(shí)效 真抓實(shí)干勇作為——十個關(guān)鍵字,盤點(diǎn)江蘇統(tǒng)戰(zhàn)的2021
      華人時刊(2022年1期)2022-04-26 13:39:28
      重點(diǎn):語句銜接
      成功避開“關(guān)鍵字”
      精彩語句
      三明:“兩票制”堵住加價漏洞
      漏洞在哪兒
      兒童時代(2016年6期)2016-09-14 04:54:43
      高鐵急救應(yīng)補(bǔ)齊三漏洞
      如何搞定語句銜接題
      語文知識(2014年4期)2014-02-28 21:59:52
      基于用戶反饋的關(guān)系數(shù)據(jù)庫關(guān)鍵字查詢系統(tǒng)
      彭水| 余江县| 汨罗市| 南乐县| 丹江口市| 惠东县| 高密市| 桦甸市| 龙陵县| 玉山县| 闽侯县| 河曲县| 安阳县| 定西市| 黄梅县| 夹江县| 阿拉善左旗| 即墨市| 普宁市| 开原市| 成都市| 兴化市| 浮山县| 呼和浩特市| 饶阳县| 梁山县| 浦北县| 宜章县| 宜兴市| 德昌县| 抚宁县| 澜沧| 台安县| 江西省| 和龙市| 苍山县| 依安县| 厦门市| 古丈县| 郎溪县| 阿尔山市|