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

?

SQL 異形注入分析與防范措施

2013-11-25 03:29:38汪廣舟方少卿
關(guān)鍵詞:關(guān)鍵字字符攻擊者

汪廣舟 方少卿

(1.安徽理工大學(xué),安徽 淮南 232001;2.銅陵職業(yè)技術(shù)學(xué)院,安徽 銅陵 244000)

隨著當(dāng)今的網(wǎng)絡(luò)應(yīng)用全面普及, 基于B/S 模型Web 應(yīng)用系統(tǒng)應(yīng)用越來越廣泛,但是由于這個領(lǐng)域的入門門檻不高,程序員的水平及經(jīng)驗也良莠不齊,相當(dāng)一部分程序員在編寫代碼的時候, 沒有對用戶輸人數(shù)據(jù)的合法性進(jìn)行判斷和檢查, 使應(yīng)用程序存在極大安全隱患。

一、SQL 注入攻擊概述

SQL 注入主要因為程序員對程序中動態(tài)SQL語句沒有作嚴(yán)格的過濾或檢測, 導(dǎo)致攻擊者能在注入點提交非法的SQL 語句, 使得程序和服務(wù)器的信息被泄漏。注入攻擊是互聯(lián)網(wǎng)Web 安全所面臨的最大威脅之一。 根據(jù)美國國家漏洞數(shù)據(jù)庫(National Vulnerability Database)的統(tǒng)計[1],2008 年,SQL 注入漏洞占全年所有漏洞總數(shù)的19.41%,2009 年這個比例為16.85%。 OWASP 的統(tǒng)計結(jié)果表明[2],Web 應(yīng)用十大安全漏洞中,SQL 注入漏洞的比例約為18%, 名列第二。

(一)SQL 注入攻擊定義

SQL 注入(SQL Injection)技術(shù)最早出現(xiàn)在1999年,微軟中國技術(shù)中心從兩個方面進(jìn)行了描述:腳本注入式的攻擊和惡意用戶輸入用來影響被執(zhí)行的SQL 腳本。 利用SQL 注入技術(shù)來實施的網(wǎng)絡(luò)攻擊常被稱為SQL 注入攻擊(SQLIA,SQL Injection Attack),其本質(zhì)是利用Web 應(yīng)用程序中所輸入的SQL 語句的語法處理,針對的是Web 應(yīng)用程序開發(fā)者在編程過程中未對SQL 語句傳入的參數(shù)做出嚴(yán)格的檢查和處理所造成的漏洞。

(二)SQL 注入攻擊原理

如上面代碼所示,如果用戶輸入的loginname 和password 的值分別為“admin”和“123456”,

服務(wù)器得到用戶輸入,交給login.asp 腳本處理,在腳本的第4、5 行將用戶輸入保存到變量中, 在第13 行將用戶輸入放在SQL 查詢語句中。自動生成查詢語句為:

select * from users where username='admin' and password='123456'

正常情況下,上述SQL 查詢?nèi)绻祷匾粭l用戶記錄,則說明身份驗證成功;反之,則說明身份驗證失敗。 然而,當(dāng)用戶的輸入為“'admin' or 1=1 --”和“123456”,該服務(wù)器端腳本構(gòu)造的SQL 查詢語句為:

select * from users where username='admin' or 1=1 -- and password='123456'

輸入的 “'” 閉合了SQL 語句的 “'”,“--”是SQL 語言中的注釋。 所以“--”后面的所有內(nèi)容被忽略,where 判斷語句后面的 “or 1=1” 的恒成立,因此,系統(tǒng)將身份驗證判斷為成功,攻擊者也即成功獲得驗證。

二、SQL 異形注入攻擊

目前對SQL 注入攻擊的通用防范是過濾SQL關(guān)鍵字或者敏感字符串, 包括:“'”,“--”,“exec”,“xp_”,“sp_”,“declare”,“union",“and”,“+”,“//”,“..”,“%”,“0x”等,然而,SQL 語句是千變?nèi)f化的,一種語句可以等價成其他形式, 利用編碼或數(shù)據(jù)庫命令動態(tài)構(gòu)造變異的SQL 語句能繞過這類防范。 如上例中“' or 1=1”可以變異成:“' or 'unusual' = 'unusual'”、“' or 'something'='some'+'thing'”、“' or something like 'some%'”、“' or 2 >1”、“'or' text' >'t'”、“'or whatever in (whatever')”、“'or 2 between 1 and 3”;而SQL 變異注入歸納起來有以下常用手段。

1.大小寫切換法

過濾函數(shù)通常會過濾select、update、delete 這些關(guān)鍵字, 但偏偏忘記區(qū)分大小寫, 因此在構(gòu)造SQL注入語句時可以將關(guān)鍵字進(jìn)行大小寫切換往往可以繞過程序的限制。

假設(shè)某網(wǎng)站有一條新聞的頁面為:

http://site/news.asp?id=1

id 為參數(shù)名,1 為頁面接受的參數(shù)值,攻擊者可以構(gòu)造如下URL:

http://site/news.asp?id=1 and (selecT count(*)from admin)>=0

猜解數(shù)據(jù)庫中是否存在admin 表, 若返回頁面與id=1 頁面相同, 說明附加條件成立, 即表admin存在,反之,即不存在。

2.SQL 函數(shù)變形法

攻擊者喜歡用“'”來測試注入漏洞。 所以也有很多程序會過濾“'”號的方法來“防止”注漏洞。 然而可以利用相關(guān)的函數(shù),構(gòu)造不含有單引號的SQL 注入語句,達(dá)到繞過程序限制的目的。如where xtype='a'。字符a 對應(yīng)的ASCII 碼是97, 所以可以用where xtype=char(97)代替,如果字符是中文的,比如where name=' 用戶', 可以用where name=nchar (29992)+nchar(25143)代替。

3.URL 編碼法

URL 編碼是一種瀏覽器用來打包表單輸入的格式。 瀏覽器從表單中獲取所有的name 和其中的值,將它們以name/value 參數(shù)編碼(移去那些不能傳送的字符, 將數(shù)據(jù)排行等) 作為URL 的一部分或者分離地發(fā)給服務(wù)器。

URL 編碼遵循下列規(guī)則: 每對name/value 由&符分開;每對來自表單的name/value 由=符分開。 如果用戶沒有輸入值給這個name, 那么name 還是出現(xiàn),只是無值。 實質(zhì)是一個字符的ASCII 碼十六進(jìn)制前面加上 “%”。 比如http://site/name 與http://site/nam%65 對于瀏覽器來說是等效的。 若注入語句為“http://site/news.asp?id=1 or 1=1”,經(jīng)過編碼后為:http://site/news.asp?id=1%20%6f%72%20%31%3d%31

4.Cookie 注入

防注入程序過濾了通過Get、Post 方式提交的數(shù)據(jù),而忽略了Cookie 方式提交的數(shù)據(jù)。 若獲取數(shù)據(jù)方式直接使用:request (" 參數(shù)名稱"), 這時就產(chǎn)生Cookie 注入。 上例猜解數(shù)據(jù)庫中是否存在admin 表注入語句可以變?yōu)椋?/p>

Javascript:alert(document.cookie=”id=”+escape(1 and (select count(*) from admin)>=0)

在ASP 中Request 對象在省略具體的集合名稱而直接使用“id=request(“id”)”來獲取數(shù)據(jù)對,總是接Request.OueryString,Request.Form,Request.cookies,Request.servervariables 集合的順序來搜索的,而Cookies 可以在客戶端進(jìn)行修改,這樣一來,攻擊者就可以使用誘使服務(wù)器接收Request.Cookies 方式提交變量的值,從而繞過防注入程序進(jìn)行注入攻擊。判定方式和Get 方式一樣, 如網(wǎng)頁返回的正常,則admin 表存在,反之則不存在。

5.繞過SQL 注入過濾的常用方法

(1)繞過空格過濾

使用注釋/**/來替換空格, 類似C 語言一樣,C語言在編譯之前注釋會被用個空格替換。 如:http://site/news.asp?id=1/**/or/**/1=1/**/,或者變異的如下:

http://site/news.asp?id=1/*o*/or/*o*/1=1/*o*/,然而許多過濾程序也會將“/”過濾掉,此種方法就行不通了,但是可以使用“( )”來分割關(guān)鍵字,如:http://site/news.asp?id=(1)or(1)=(1),此外空格還可以用Tab鍵或“+”來代替。

(2)整句賦值繞過多關(guān)鍵字過濾

SQL 防注入程序通常過濾掉許多關(guān)鍵字, 這時可套用DECLARE @S NVARCHAR(4000) SET @S=CAST(0x16 進(jìn)制語句AS NVARCHAR(4000)) EXEC(@S)語句來繞過限制,比如要執(zhí)行:

exec master.dbo.xp_cmdshell "net user"--

現(xiàn)將此句轉(zhuǎn)換為十六進(jìn)制,然后提交:

若返回正常的頁面,則說明該語句成功執(zhí)行了。

(3)xor 異或

對于SQL 注入來說, 用得最多的邏輯詞就是“and”、“or”了,但是上面的邏輯詞肯定會被SQL 防注入程序過濾掉。 但是除了“and”、“or”還有另外的邏輯詞,如xor 異或,異或就是相同為假,不同為真。

三、SQL 注入的防范措施

現(xiàn)有防御SQL 注入技術(shù)主要基于靜態(tài)程序分析和動態(tài)檢測兩大類, 包括: 輸入過濾、 參數(shù)化查詢、信息流分析[3-5]、專用API 等。

1.輸入過濾往往僅憑預(yù)先定義好的敏感字符進(jìn)行過濾, 比如SQL 通用防注入系統(tǒng), 此種方法容易產(chǎn)生誤報和漏報。而且,因為SQL 注入技術(shù)不斷更新和發(fā)展, 如對注入的關(guān)鍵字進(jìn)行編碼, 因此基于敏感字符過濾的技術(shù)存在很多問題。同時, SQL 語句是千變?nèi)f化的, 一種語句可以等價成其他形式, 利用編碼或數(shù)據(jù)庫命令動態(tài)構(gòu)造結(jié)構(gòu)字符串都可繞過這類防范。

2.在使用參數(shù)化查詢的情況下,數(shù)據(jù)庫服務(wù)器不會將參數(shù)的內(nèi)容視為SQL 指令的一部份來處理,而是在數(shù)據(jù)庫完成SQL 指令的編譯后,才套用參數(shù)運(yùn)行,因此就算參數(shù)中含有惡意的指令,由于已經(jīng)編譯完成,就不會被數(shù)據(jù)庫所運(yùn)行。此種方法缺點在于不是所有數(shù)據(jù)庫都支持參數(shù)化查詢。 目前Access、SQL Server、MySQL、SQLite、Oracle 等常用數(shù)據(jù)庫支持參數(shù)化查詢。

3.動態(tài)的信息流分析技術(shù)主要根據(jù)語法樹推斷原程序查詢語句的目的, 而這類方法面對的最主要問題是能否準(zhǔn)確分析和推斷原語句的目的和注入語句目的的不同。

4.專用API 是特定的WEB 程序?qū)⒊S玫臄?shù)據(jù)庫操作封裝成一些專用的API 函數(shù),一般是一些商業(yè)系統(tǒng)。 這種方法可能不會存在SQL 注入的風(fēng)險,但對于每個WEB 應(yīng)用都采用專用API 是不可能的, 同時需要編程人員學(xué)習(xí)這些專用API 函數(shù)的調(diào)要語法。

四、結(jié)束語

人們的網(wǎng)絡(luò)安全意識越來越強(qiáng), 絕大多數(shù)Web站點對SQL 注入進(jìn)行防范,但是各種SQL 注入變異攻擊隨之出現(xiàn),就目前提出的一些防御SQL 攻擊的方法都有各自的優(yōu)缺點, 還沒有一個完美的解決方案,防范SQL 注入攻擊任重而道遠(yuǎn)。

[1]National Vulnerability Database.National vulnerability database(NVD) CVE statistics[EB/OL].(2012-12).http://web.nvd.nist.gov/view/vuln/statistics-results?cid=4,2012-09-10.

[2]OWASP.Top 10 2007 [EB/OL]. (2012 -11).http://www.owasp.org/index.php/Top_10_2007,2012-10-02.

[3]Sabelfeld A,Myers AC.Language -based infoumation -flow security[J]. IEEE JSA,2003.

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

[5]Carl Gould, Zhendong Su, and Premkumar Devanbu.Static checking of dynamically generated queries in database applications.ACM Transactions on Software Engineeringand Methodology(TOSEM)[C]. U.S.A:ACM,2007,16.

猜你喜歡
關(guān)鍵字字符攻擊者
尋找更強(qiáng)的字符映射管理器
履職盡責(zé)求實效 真抓實干勇作為——十個關(guān)鍵字,盤點江蘇統(tǒng)戰(zhàn)的2021
華人時刊(2022年1期)2022-04-26 13:39:28
基于微分博弈的追逃問題最優(yōu)策略設(shè)計
字符代表幾
一種USB接口字符液晶控制器設(shè)計
電子制作(2019年19期)2019-11-23 08:41:50
成功避開“關(guān)鍵字”
消失的殖民村莊和神秘字符
正面迎接批判
愛你(2018年16期)2018-06-21 03:28:44
有限次重復(fù)博弈下的網(wǎng)絡(luò)攻擊行為研究
基于用戶反饋的關(guān)系數(shù)據(jù)庫關(guān)鍵字查詢系統(tǒng)
商南县| 济阳县| 辽宁省| 舞阳县| 南平市| 疏附县| 苍梧县| 永济市| 遂平县| 隆昌县| 常熟市| 红原县| 古浪县| 治县。| 南雄市| 平凉市| 柞水县| 渭源县| 乃东县| 赤壁市| 饶河县| 长海县| 云龙县| 东乡族自治县| 长沙县| 星子县| 隆尧县| 毕节市| 柳林县| 望谟县| 瑞金市| 米易县| 三河市| 荣成市| 嘉黎县| 满洲里市| 沙洋县| 枝江市| 正阳县| 池州市| 山西省|