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

?

基于Web應(yīng)用的SQL注入攻擊與防范技術(shù)的研究

2015-12-21 11:27宮鼎
電腦知識(shí)與技術(shù) 2015年27期
關(guān)鍵詞:安全漏洞密鑰數(shù)據(jù)庫(kù)

宮鼎

摘要:首先闡述了SQL入注攻擊的產(chǎn)生原因與操作過(guò)程;接著針對(duì)有轉(zhuǎn)義字符漏洞的網(wǎng)站進(jìn)行SQL注入攻擊挖掘,針對(duì)有數(shù)據(jù)庫(kù)代碼編譯漏洞的網(wǎng)站進(jìn)行注入攻擊挖掘,并做了相應(yīng)的分析;最后闡述了注入攻擊的危害,歸納總結(jié)了針對(duì)注入攻擊的防御措施,以提高網(wǎng)站數(shù)據(jù)信息的安全性。

關(guān)鍵詞:安全漏洞;數(shù)據(jù)庫(kù);注入攻擊;密鑰;SQL

中圖分類號(hào):TP39 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)28-0003-03

Research of SQL Injection Attack and Prevention Technology based on Web Application

GONG Ding

(Nanjing Communications Institute of Technology ,Nanjing 211188, China)

Abstract:First, described the reasons and the operation process for the SQL injection attack ;then tested the side which has Esc vulnerabilities ,tested and analyzed the side which has database code compilation vulnerabilities ; Finally, described the damage of the injection attack ,summed up the defense against injection attacks, in order to improve the security of the site data information.

Key words: security vulnerabilities; database; injection attacks; encryption key; SQL

1 概述

隨著電子商務(wù)、網(wǎng)絡(luò)教育等各種網(wǎng)站智能服務(wù)的發(fā)展,Web服務(wù)應(yīng)用深入到千家萬(wàn)戶的同時(shí)也受到了越來(lái)越多的攻擊者的關(guān)注[1]。目前的Web應(yīng)用服務(wù)已經(jīng)可以實(shí)現(xiàn)動(dòng)態(tài)頁(yè)面交互功能,甚至還可以與網(wǎng)站系統(tǒng)的數(shù)據(jù)庫(kù)直接通信,利用該數(shù)據(jù)庫(kù)進(jìn)行指定內(nèi)容的動(dòng)態(tài)生成。但是由于編寫網(wǎng)頁(yè)應(yīng)用程序的人員的水平及開發(fā)經(jīng)驗(yàn)的不同,其中一部分程序員在編寫網(wǎng)頁(yè)代碼時(shí),并未對(duì)用戶輸入到網(wǎng)站中的指令代碼的合法性進(jìn)行檢驗(yàn),使這些網(wǎng)頁(yè)的交互程序存在一定的安全隱患。OWASP全球最有影響力的網(wǎng)頁(yè)安全研究組織,發(fā)布了十個(gè)最嚴(yán)重的網(wǎng)頁(yè)應(yīng)用安全風(fēng)險(xiǎn),其中SQL注入攻擊的安全風(fēng)險(xiǎn)名列前茅,其對(duì)應(yīng)著對(duì)互聯(lián)網(wǎng)中危害較大的安全漏洞[2]。

2 SQL注入攻擊產(chǎn)生的原因

SQL注入是指用戶向網(wǎng)站輸入一段該系統(tǒng)數(shù)據(jù)庫(kù)的查詢代碼,根據(jù)客戶端輸入的程序,網(wǎng)站將結(jié)果返回給該用戶,使其可以獲得某些想得知的數(shù)據(jù)信息的操作過(guò)程。而造成可進(jìn)行注入攻擊的原因主要有如下幾個(gè)方面:

1)應(yīng)用程序自身存在漏洞

網(wǎng)頁(yè)應(yīng)用程序自身存在漏洞給該攻擊發(fā)生提供了重要條件。網(wǎng)站應(yīng)用程序的開發(fā)時(shí)間短,加上編程人員的網(wǎng)絡(luò)安全意識(shí)不夠,安全編程方面的經(jīng)驗(yàn)不足,造成編寫的網(wǎng)頁(yè)應(yīng)用程序代碼中出現(xiàn)一定的安全漏洞。一些開發(fā)人員在程序開發(fā)的過(guò)程中,并未對(duì)用戶可輸入的指令內(nèi)容部分進(jìn)行安全性檢測(cè)與驗(yàn)證,導(dǎo)致攻擊者可通過(guò)在的輸入請(qǐng)求字符串或表單域里編寫惡意的字符代碼以構(gòu)造特殊的指令語(yǔ)句,提交到網(wǎng)站的后臺(tái)數(shù)據(jù)庫(kù)中運(yùn)行,以達(dá)到其攻擊目的。

2)開發(fā)人員使用動(dòng)態(tài)語(yǔ)句技術(shù)存在的安全隱患

基于網(wǎng)頁(yè)的動(dòng)態(tài)語(yǔ)句是在客戶與服務(wù)器端進(jìn)行交互的過(guò)程中構(gòu)造成的,用戶輸入的不同代碼字符串可獲得不同的語(yǔ)句。而這些語(yǔ)句是在網(wǎng)頁(yè)應(yīng)用配置的數(shù)據(jù)庫(kù)中被執(zhí)行,以方便得到用戶需要的數(shù)據(jù)信息。因此網(wǎng)站開發(fā)者可以使用動(dòng)態(tài)語(yǔ)句來(lái)創(chuàng)建特殊功能的應(yīng)用程序[4]。動(dòng)態(tài)語(yǔ)句技術(shù)方便了各種應(yīng)用程序的創(chuàng)建,但也帶來(lái)了潛在的安全威脅,當(dāng)用戶提交給后臺(tái)數(shù)據(jù)庫(kù)執(zhí)行的指令代碼中有單引號(hào)時(shí),數(shù)據(jù)庫(kù)會(huì)將該單引號(hào)解析成指令代碼與用戶數(shù)據(jù)之間的分界符。在SQL注入攻擊中,攻擊者往往用單引號(hào)字符來(lái)轉(zhuǎn)義網(wǎng)站系統(tǒng)設(shè)計(jì)者的查詢以方便其構(gòu)造特殊的查詢方式,達(dá)到注入攻擊目的[3]。

3)數(shù)據(jù)庫(kù)配置不當(dāng)

網(wǎng)站的數(shù)據(jù)庫(kù)系統(tǒng)有著較為完善的身份權(quán)限認(rèn)證機(jī)制,外網(wǎng)的用戶一般無(wú)法直接對(duì)其進(jìn)行訪問(wèn),很難實(shí)施入侵。但如果網(wǎng)站系統(tǒng)的開發(fā)人員在作數(shù)據(jù)庫(kù)配置時(shí),用戶權(quán)限設(shè)置不當(dāng),給予不該具有較高權(quán)限的用戶以特權(quán),則攻擊者可以利用該賬戶對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行讀取、編輯甚至是刪除操作。

3 SQL注入攻擊的挖掘

SQL 注入攻擊是一種威脅大、應(yīng)用廣闊的網(wǎng)站攻擊技術(shù), 從網(wǎng)站的URL地址欄處正常訪問(wèn),與一般的網(wǎng)頁(yè)訪問(wèn)區(qū)別不大,防火墻及簡(jiǎn)單的IDS安全設(shè)備檢測(cè)不到該類型的攻擊具有較高的隱蔽性,若攻擊者注意對(duì)操作痕跡的擦除,或者網(wǎng)站管理人員沒有定期查看數(shù)據(jù)庫(kù)日志,該攻擊基本不會(huì)發(fā)現(xiàn)[5]。SQL注入攻擊的一般過(guò)程為:攻擊者在網(wǎng)頁(yè)應(yīng)用程序給予的客戶端頁(yè)面交互單元中編寫設(shè)計(jì)好的指令代碼進(jìn)行發(fā)送,服務(wù)器收到構(gòu)造好的SQL查詢指令串后,將其提交給網(wǎng)站的數(shù)據(jù)庫(kù)執(zhí)行,執(zhí)行完畢后由網(wǎng)站將數(shù)據(jù)庫(kù)運(yùn)行的結(jié)果回傳發(fā)送至客戶端,從而使攻擊者獲得數(shù)據(jù)庫(kù)中的重要信息。該攻擊過(guò)程涉及網(wǎng)頁(yè)應(yīng)用程序架構(gòu)的三個(gè)部分:數(shù)據(jù)庫(kù)、客戶端和服務(wù)器;其中任何部分出現(xiàn)漏洞都能導(dǎo)致注入式攻擊。下邊以兩個(gè)網(wǎng)站系統(tǒng)為例,對(duì)其進(jìn)行注入式攻擊挖掘,并對(duì)攻擊方法做分析。

1)針對(duì)轉(zhuǎn)義字符漏洞作SQL注入挖掘

在該網(wǎng)站的源文件plus/feedback.php中存在注入漏洞的代碼如圖1所示:

在本地搭建網(wǎng)站測(cè)試環(huán)境,針對(duì)line243行存在的問(wèn)題,在地址欄中第一次輸入:

)訪問(wèn)該網(wǎng)站,當(dāng)php設(shè)置中g(shù)pc為on時(shí),line 243的$title被轉(zhuǎn)義兩次,進(jìn)入數(shù)據(jù)庫(kù)的時(shí)的結(jié)果如圖2所示。

接著在地址欄中們引用id38的留言:

最后在地址欄中們引用id38的留言:

從該圖中可以看出未注冊(cè)的游客用戶成功使用了惡意查詢語(yǔ)句,查看到該系統(tǒng)版本號(hào),并發(fā)布在留言板中。

2)針對(duì)數(shù)據(jù)庫(kù)代碼編譯漏洞,作SQL注入挖掘

此類注入還可以用來(lái)爆庫(kù),使得系統(tǒng)管理員的賬戶密碼被非法查詢導(dǎo)致數(shù)據(jù)庫(kù)用戶被惡意注入出來(lái)。下邊以XDcms是南寧旭東網(wǎng)絡(luò)科技有限公司開發(fā)的一個(gè)網(wǎng)站為例進(jìn)行注入挖掘。該網(wǎng)站主要使用php+mysql+smarty技術(shù)基礎(chǔ)進(jìn)行開發(fā),XDcms采用 OOP(面向?qū)ο螅┓绞竭M(jìn)行基礎(chǔ)運(yùn)行框架搭建。該網(wǎng)站程序源碼的注冊(cè)模塊中的\system\modules\ \index.php文件中有注入漏洞,當(dāng)用戶注冊(cè)時(shí),會(huì)調(diào)用register_save文件,而該文件的函數(shù)中存在三處漏洞,分析如下:

1)第68行代碼:$user_num=$this->mysql->num_rows("select * from ".DB_PRE."member where `username`='$username'");該語(yǔ)句判斷會(huì)員用戶名存在與否,UserName處可被加轉(zhuǎn)義字符繞過(guò)過(guò)濾,導(dǎo)致不注冊(cè)就可進(jìn)行后續(xù)操作,容易被SQL注入;

2)第73行代碼:$this->mysql->db_insert('member',"`username`='".$username."',

`password`='".$password."',`creat_time`='".datetime()."',`last_ip`='".$ip."',`is_lock`='0',`logins`='0',`groupid`='1'");該處SQL注入發(fā)生在插入字段,這里的UserName同意造成注入,導(dǎo)致注入成功后會(huì)泄漏用戶密碼。

3)第82行代碼:$field_sql.=",`{$k}`='{$f_value}'";該行語(yǔ)句導(dǎo)致沒有對(duì)數(shù)據(jù)進(jìn)行過(guò)濾就直接進(jìn)入了下面的功能語(yǔ)句,會(huì)導(dǎo)致更多的系統(tǒng)信息泄漏。

下面利用這些漏洞進(jìn)行注入攻擊,注冊(cè)一個(gè)用戶,然后使用Burp suit進(jìn)行抓包如圖5所示:

點(diǎn)擊forword按鈕繼續(xù)提交請(qǐng)求,當(dāng)頁(yè)面訪問(wèn)成功后,查看回訪頁(yè)面的最終結(jié)果,成功拿到了管理的用戶名密碼如圖6所示。

在safe_html處雖然過(guò)濾了SQL注入的敏感詞,還過(guò)濾了=和*,但是沒有考慮SQL注入敏感詞的大小寫,這里只過(guò)濾了小寫,那么我們用大寫繞過(guò),這里過(guò)濾的=和*,可以使用不帶*和=的常規(guī)保存SQL注入語(yǔ)句,例如:在UserName處輸入:‘ UNION SELECT 1,2,3,4,5

6,7,8,9,10,11,12,13,14 FROM (SELECT count(1),concat(round(rand(0)),

(SELECT concat(username,0x23,password) FROM c_admin LIMIT 0,1))a FROM information_schema.tables GROUP by a)b#。這樣的注入發(fā)生環(huán)境比較隱蔽,不但直接在url里面可以進(jìn)行構(gòu)造,而且注入雖然有過(guò)濾但是還是被繞過(guò)了,所以注入的防范不能光看要看主配置代碼,也需在對(duì)傳遞的函數(shù)也進(jìn)行檢查。

4 SQL 注入漏洞的危害

SQL 注入攻擊的主要目的并不是對(duì)網(wǎng)站服務(wù)器進(jìn)行攻擊,其目的是想獲取登錄該網(wǎng)站的用戶密碼及網(wǎng)站數(shù)據(jù)庫(kù)中的重要數(shù)據(jù)信息。一般情況下攻擊者不具有網(wǎng)站系統(tǒng)的特殊權(quán)限,訪問(wèn)的網(wǎng)站中的數(shù)據(jù)資源有限;而攻擊者一旦發(fā)現(xiàn)Web應(yīng)用中的漏洞,進(jìn)行SQL注入攻擊,便會(huì)給網(wǎng)站與用戶的數(shù)據(jù)信息的安全帶來(lái)很大的危害[6]。主要表現(xiàn)在如下三點(diǎn):1)在非授權(quán)情況下獲得較高的系統(tǒng)權(quán)限,讀取、修改、刪除系統(tǒng)數(shù)據(jù)庫(kù)中的數(shù)據(jù);2)非法獲得網(wǎng)站系統(tǒng)與用戶敏感信息;3)注入木馬,從而進(jìn)一步入侵網(wǎng)站。

5 SQL 注入漏洞防御技術(shù)

由于網(wǎng)站開發(fā)者客戶端用戶輸入的指令是無(wú)法控制的,所以對(duì)網(wǎng)站系統(tǒng)的注入漏洞的防御措施主要是在服務(wù)器端、數(shù)據(jù)庫(kù)系統(tǒng)以及二者之間的通信上作加強(qiáng)。網(wǎng)站系統(tǒng)中存在注入式漏洞的主要原因是基于Web的交互程序可根據(jù)客戶端的輸入,動(dòng)態(tài)構(gòu)造語(yǔ)句提交給后臺(tái)數(shù)據(jù)庫(kù)解析執(zhí)行,給攻擊者提供了使用特殊代碼獲取敏感數(shù)據(jù)信息的條件。為了減少網(wǎng)站系統(tǒng)中SQL注入攻擊的危害,可以通過(guò)如下一些措施加以防御。

1)使用錯(cuò)誤提示屏蔽機(jī)制

攻擊者常常先遞交一些特殊的構(gòu)造語(yǔ)句到網(wǎng)站服務(wù)器的后臺(tái),經(jīng)服務(wù)器響應(yīng)處理后,即使攻擊者的指令沒有成功執(zhí)行,一般也會(huì)返回一個(gè)出錯(cuò)提示頁(yè)面,攻擊者往往可以從該頁(yè)面中找到有用的系統(tǒng)與用戶信息,以為注入攻擊做必要的準(zhǔn)備。采用系統(tǒng)中的錯(cuò)誤提示屏蔽機(jī)制,可有效地防止攻擊者獲取任何有用的系統(tǒng)信息。

2)使用參數(shù)化語(yǔ)句

參數(shù)化查詢方式是在程序代碼中使用一個(gè)或多個(gè)參數(shù)進(jìn)行是數(shù)據(jù)信息查詢,而這些應(yīng)用到客戶端輸入程序指令中的參數(shù)是不會(huì)當(dāng)作命令去執(zhí)行的,使得輸入的指令代碼不會(huì)出現(xiàn)注入風(fēng)險(xiǎn)。該方法的執(zhí)行效率高于運(yùn)用指令字符串構(gòu)造技術(shù)去動(dòng)態(tài)構(gòu)造并執(zhí)行語(yǔ)句的操作方式,且使得網(wǎng)站的安全性得以提升。

3)驗(yàn)證用戶輸入的合法性

可以用黑名單與白名單兩種方式驗(yàn)證用戶輸入的合法性。若客戶端的輸入指令代碼中有未被系統(tǒng)所定義的內(nèi)容或者包含了系統(tǒng)所禁止的內(nèi)容,那么提示客戶端用戶需進(jìn)行正確輸入。白名單驗(yàn)證是系統(tǒng)只接受預(yù)先設(shè)計(jì)好的操作規(guī)則,指令字符串提交完畢后,需檢驗(yàn)這些字符代碼是否符合預(yù)先設(shè)置好的字符串長(zhǎng)度、類型、大小、數(shù)字范圍等格式標(biāo)準(zhǔn),只執(zhí)行符合制定規(guī)則的字符串,其他一律拒絕[7]。而黑名單驗(yàn)證是只拒絕包含預(yù)先設(shè)置好的非法輸入代碼的字符串,其他一律接收。由于不良字符不可預(yù)測(cè),使得黑名單列表數(shù)量較大,內(nèi)容過(guò)多,檢索的效率不高,且需要及時(shí)更新以增加新內(nèi)容。若是以提高網(wǎng)站系統(tǒng)的安全性為目的,一般采用白名單機(jī)制驗(yàn)證用戶的合法性。

4)盡量使用系統(tǒng)數(shù)據(jù)庫(kù)定義的安全參數(shù)

SQL Server數(shù)據(jù)庫(kù)專業(yè)開發(fā)人員針對(duì)注入式攻擊對(duì)于其存在的安全威脅,專門設(shè)計(jì)了相應(yīng)的SQL安全參數(shù)。在網(wǎng)站數(shù)據(jù)庫(kù)開發(fā)過(guò)程中,盡量采用其系統(tǒng)自帶的安全參數(shù),能更好更專業(yè)地防御SQL注入式攻擊。

5)加密重要的數(shù)據(jù)信息

使用數(shù)據(jù)加密技術(shù)可以有效地保護(hù)網(wǎng)站數(shù)據(jù)庫(kù)中的重要信息不被攻擊者非法查看和修改。因?yàn)楣粽呒词棺⑷氤晒Λ@得了一些重要的信息,但由于得到的是密文,還需要使用一些技術(shù)進(jìn)行密文的破解,若加密密鑰足夠復(fù)雜,會(huì)使得因密文無(wú)法破譯導(dǎo)致注入攻擊失敗。若是系統(tǒng)需要保護(hù)的重要數(shù)據(jù),可以使用多重密鑰加密保證其安全性[8]。在大型網(wǎng)站的信息交互環(huán)境中,運(yùn)行應(yīng)用程序時(shí)再使用密鑰加密較難實(shí)現(xiàn),往往采用在服務(wù)器中的保護(hù)區(qū)域存放密鑰的方式,這樣使得攻擊者需要同時(shí)關(guān)注后臺(tái)數(shù)據(jù)庫(kù)與網(wǎng)站應(yīng)用服務(wù)器兩個(gè)部分才能有條件解密密文,加大注入攻擊的難度,從而提高了網(wǎng)站信息的安全性。

6 結(jié)束語(yǔ)

互聯(lián)網(wǎng)時(shí)代的發(fā)展,已使Web應(yīng)用滲透到當(dāng)今社會(huì)各行各業(yè)中去,其網(wǎng)站中的數(shù)據(jù)安全性越來(lái)越受到人們的重視。本文闡述了注入式攻擊的成因、原理并從實(shí)例著手,對(duì)該攻擊進(jìn)行挖掘分析,最后闡述了針對(duì)該攻擊的防御措施,在科學(xué)地評(píng)估系統(tǒng)數(shù)據(jù)庫(kù)安全性與保護(hù)網(wǎng)站敏感數(shù)據(jù)方面,具有一定的指導(dǎo)意義與實(shí)用價(jià)值。

參考文獻(xiàn):

[1] 陸培軍.Xpath 注入攻擊及其防御技術(shù)研究[J].計(jì)算機(jī)與信息技術(shù),2012(Z1):86-88.

[2] Paul Muschamp.An introduction to Web Services[J].BT Technology Journal,2012,22(1):9-10.

[3] 陳小兵,張漢煜,駱力明,等.SQL 注入攻擊及其防范檢測(cè)技術(shù)研究[J].計(jì)算機(jī)工程與應(yīng)用,2012(11):15-18.

[4] 張令通,羅森林.SQL 盲注入快速攻擊方法研究[J].信息網(wǎng)絡(luò)安全,2013,05:15-18.

[5]王偉平,李昌,段桂華.基于正則表示的SQL注入過(guò)濾模塊設(shè)計(jì)[J].計(jì)算機(jī)工程,2011,37(5):158-160.

[6] 吳貴山.SQL 注入攻擊防御策略的研究.計(jì)算機(jī)與網(wǎng)絡(luò)[J].2012(9):70-73.

[7] 張博.SQL 注入攻擊與檢測(cè)技術(shù)研究[J].信息安全與通信保密,2010(5) : 90-92.

[8] 楊小麗,袁丁.防SQL 注入攻擊的數(shù)據(jù)庫(kù)驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2012(12) : 2691-2694.

猜你喜歡
安全漏洞密鑰數(shù)據(jù)庫(kù)
探索企業(yè)創(chuàng)新密鑰
密碼系統(tǒng)中密鑰的狀態(tài)與保護(hù)*
安全漏洞太大亞馬遜、沃爾瑪和Target緊急下架這種玩具
一種對(duì)稱密鑰的密鑰管理方法及系統(tǒng)
基于ECC的智能家居密鑰管理機(jī)制的實(shí)現(xiàn)
數(shù)據(jù)庫(kù)
基于安全漏洞掃描的校園網(wǎng)告警系統(tǒng)的開發(fā)與設(shè)計(jì)
數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)
安图县| 谢通门县| 山东省| 叙永县| 浮梁县| 乌海市| 天峨县| 大名县| 宁远县| 昌江| 大田县| 宣城市| 蓬莱市| 廉江市| 蓝田县| 南和县| 孟村| 阿图什市| 民和| 绿春县| 平舆县| 新宁县| 阆中市| 普格县| 黄冈市| 故城县| 岳阳市| 台东县| 苍山县| 哈密市| 永嘉县| 西和县| 岢岚县| 琼海市| 常熟市| 堆龙德庆县| 定陶县| 丰顺县| 肥东县| 泰宁县| 民权县|