摘 要:文章主要研究了Web應(yīng)用程序安全問(wèn)題中的SQL注入漏洞,分析其原理及分類(lèi),闡述了SQL注入漏洞的在Web應(yīng)用中的危害,研究了對(duì)SQL注入漏洞的檢測(cè)流程,并選擇實(shí)際案例進(jìn)行漏洞檢測(cè),成功發(fā)現(xiàn)網(wǎng)頁(yè)中所存在的漏洞,本研究對(duì)于推動(dòng)Web應(yīng)用程序安全問(wèn)題的研究起到了不容忽視的作用。
關(guān)鍵詞:Web應(yīng)用程序;SQL注入漏洞;檢測(cè)
引言
在互聯(lián)網(wǎng)時(shí)代的今天,適應(yīng)多平臺(tái)、充分集成的Web應(yīng)用程序已經(jīng)成為當(dāng)前應(yīng)用最廣泛的網(wǎng)絡(luò)交互模式,與之相呼應(yīng)的安全問(wèn)題也日益突出,Web應(yīng)用程序的安全問(wèn)題成為一個(gè)重要課題被廣大學(xué)者研究,在各類(lèi)Web應(yīng)用安全問(wèn)題中,SQL注入攻擊的風(fēng)險(xiǎn)是位居前列的,這主要表現(xiàn)在一下兩個(gè)方面:首先,雖然在聯(lián)入Internet的計(jì)算機(jī)上裝有防火墻,但是為了保證用戶可以訪問(wèn)Web應(yīng)用程序,防火墻允許計(jì)算機(jī)從Internet到Web服務(wù)器正向連接,在這種情況下,如果網(wǎng)絡(luò)應(yīng)用程序中存在注入漏洞,攻擊者就可以直接訪問(wèn)數(shù)據(jù)庫(kù)甚至進(jìn)而訪問(wèn)數(shù)據(jù)庫(kù)所在服務(wù)器。其次SQL攻擊非常廣泛,它在所有基于SQL語(yǔ)言標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)軟件,如Oracle、SQL Server,MySQL等以及與之相連接的網(wǎng)絡(luò)應(yīng)用程序上都是有效的。
1 SQL注入的原理
SQL注入攻擊源于英文“SQL Injection Attack”,所謂SQL注入攻擊,就是利用SQL注入技術(shù)來(lái)實(shí)施的網(wǎng)絡(luò)攻擊,它把SQL命令插入到Web交互頁(yè)面(例如表單遞交或頁(yè)面請(qǐng)求或輸入域名)的查詢字符串中,以達(dá)到欺騙服務(wù)器的目的從而執(zhí)行非授權(quán)的命令。SQL注入漏洞在迄今所發(fā)現(xiàn)的Web應(yīng)用程序的安全漏洞中是最著名的,它利用某些包含特殊目的的SQL語(yǔ)句,通過(guò)關(guān)鍵變量插入到正常的操作語(yǔ)句中從而形成安全漏洞。程序一旦發(fā)生注入漏洞就會(huì)引發(fā)一系列安全問(wèn)題,例如會(huì)對(duì)數(shù)據(jù)庫(kù)進(jìn)行未經(jīng)授權(quán)的訪問(wèn)、更新或刪除等操作。
SQL注入的應(yīng)用違背了“數(shù)據(jù)與代碼分離原則”,它有兩個(gè)條件:一是用戶能夠控制數(shù)據(jù)的輸入;二是代碼拼湊了用戶輸入的數(shù)據(jù),把數(shù)據(jù)當(dāng)作代碼執(zhí)行。并且在任何語(yǔ)言開(kāi)發(fā)環(huán)境中,只要涉及使用SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)操作的應(yīng)用程序,SQL注入漏洞就可能存在。
2 SQL注入的方式
2.1 繞過(guò)Web應(yīng)用的用戶驗(yàn)證
繞過(guò)Web應(yīng)用的用戶驗(yàn)證是攻擊者通過(guò)Web應(yīng)用驗(yàn)證頁(yè)面最常用的方法,在這種情況下,攻擊者往往會(huì)在用戶輸入?yún)^(qū)域輸入一些數(shù)據(jù)信息,而這些信息將會(huì)改變SQL查詢語(yǔ)句中的where條件部分的代碼,使得程序在執(zhí)行時(shí)會(huì)跳過(guò)用戶驗(yàn)證。
2.2 盲注攻擊
攻擊者在通過(guò)輸入注入信息然后提交到服務(wù)器來(lái)檢測(cè)Web應(yīng)用是否存在SQL注入漏洞,當(dāng)提交的信息動(dòng)態(tài)組裝成一個(gè)SQL語(yǔ)句時(shí),如果是一個(gè)不合理的語(yǔ)句,服務(wù)器向客戶端返回一個(gè)錯(cuò)誤代碼,攻擊者可以通過(guò)反復(fù)探測(cè)然后再返回有效信息。
2.3 聯(lián)合查詢攻擊
使用UNION或UNION ALL可以將一個(gè)表追加到另一個(gè)表,從而將兩張表組合在一起進(jìn)行查詢。在使用聯(lián)合查詢時(shí),攻擊者可以在用戶輸入?yún)^(qū)域鍵入類(lèi)似于“UNION SELECT<注入語(yǔ)句>”的數(shù)據(jù)信息,這時(shí)程序運(yùn)行時(shí)會(huì)自動(dòng)組裝SQL査詢語(yǔ)句,代碼變成“select *from user where id=‘UNION select*where account=10and password=’”;若按照普通的SQL語(yǔ)句執(zhí)行,由于id和password都是空值,所以返回的數(shù)據(jù)就是空值,但我們可以明顯看到代碼中加入了UNION方法,則執(zhí)行完該代碼后數(shù)據(jù)庫(kù)服務(wù)器會(huì)從表user中返回account=10時(shí)的值。
3 SQL注入漏洞的危害
SQL注入不但可以獲取網(wǎng)站數(shù)據(jù),還可以生成網(wǎng)站后門(mén)程序從而得到網(wǎng)絡(luò)用戶的所有權(quán)限,主要表現(xiàn)在一下幾點(diǎn):(1)在非授權(quán)情況下讀取、修改甚至刪除數(shù)據(jù)庫(kù)中的數(shù)據(jù);(2)盜取用戶敏感信息;(3)注入木馬。
4 SQL注入漏洞的檢測(cè)
4.1 思考方向
從上面的研究中我們發(fā)現(xiàn)SQL注入主要存在于頁(yè)面中會(huì)與數(shù)據(jù)庫(kù)產(chǎn)生交互的地方,比如查詢、提交、回復(fù)等頁(yè)面,因此可以在Web應(yīng)用程序的這些地方插入設(shè)計(jì)好的注入語(yǔ)句,然后觀察服務(wù)器端的返回響應(yīng)。
4.2 測(cè)試字符串
在SQL注入漏洞測(cè)試中需要用到特定的字符串,用來(lái)査找并判斷Web應(yīng)用程序是否存在漏洞。我們根據(jù)注入?yún)?shù)的類(lèi)型,可以將設(shè)計(jì)好的字符串劃分為以下3類(lèi):(1)數(shù)字型:select*from表名 where 字段=77;(2)字符型:select*from 表名 where 字段=‘IT書(shū)籍’;(3)搜索型:selec*from表名where字段like‘%關(guān)鍵字%’。
4.3 SQL語(yǔ)句變換
Web漏洞測(cè)試人員可以針對(duì)不同的語(yǔ)句類(lèi)型進(jìn)行SQL注入。可以通過(guò)構(gòu)造特定的語(yǔ)句規(guī)則,實(shí)現(xiàn)提升訪問(wèn)權(quán)限、獲取完全數(shù)據(jù)庫(kù)信息等操作。
4.4 數(shù)據(jù)庫(kù)類(lèi)型變換
由于在實(shí)際中對(duì)于不同的數(shù)據(jù)庫(kù)管理系統(tǒng)的攻擊方式也不一樣,因此,測(cè)試人員需要通過(guò)指紋標(biāo)識(shí)數(shù)據(jù)庫(kù)類(lèi)型。
4.5 SQL注入漏洞檢測(cè)
測(cè)試人員通過(guò)對(duì)注入測(cè)試字符串進(jìn)行各種變化,模仿攻擊者根據(jù)不同數(shù)據(jù)庫(kù)類(lèi)型用不同類(lèi)型的語(yǔ)句攻擊Web應(yīng)用程序,從而動(dòng)態(tài)檢測(cè)出注入漏洞。具體流程如下:(1)選取注入測(cè)試字符串,輸入應(yīng)用程序并對(duì)比輸出;(2)使用不同的語(yǔ)句類(lèi)型對(duì)應(yīng)用程序進(jìn)行攻擊;(3)根據(jù)指紋識(shí)別數(shù)據(jù)庫(kù)類(lèi)型來(lái)識(shí)別出應(yīng)用所使用的數(shù)據(jù)庫(kù)管理系統(tǒng);4)輸入應(yīng)用程序并對(duì)比輸出。
5 SQL注入漏洞檢測(cè)試驗(yàn)?zāi)M
以用ASP.NET中一個(gè)簡(jiǎn)單的戶登錄界面為案例,分析源代碼中與數(shù)據(jù)庫(kù)交互的主要語(yǔ)句如下所示:
SqlStr=“select*from會(huì)員表where會(huì)員名='”+this.txt_User_Name.Text+“'and 密碼='”+Md5_User_Pwd+“'”;
按照上述漏洞檢測(cè)規(guī)則及流程,我們選擇“or 1=1—”為漏洞檢測(cè)用例輸入到會(huì)員名文本框中,因?yàn)椤啊痹诖a中是注釋的意思,所以后面的語(yǔ)句都可以視為注釋不必執(zhí)行,而1的確等于1,因此即便沒(méi)有該會(huì)員照樣可以成功登錄,由此可見(jiàn),這個(gè)登錄界面中存在SQL注入漏洞。
6 結(jié)束語(yǔ)
隨著互聯(lián)網(wǎng)時(shí)代的擴(kuò)張,Web應(yīng)用程序已經(jīng)滲透到社會(huì)各個(gè)層面,而Web應(yīng)用程序的安全問(wèn)題則成為當(dāng)今網(wǎng)絡(luò)應(yīng)用的主要問(wèn)題之一,如何科學(xué)地測(cè)試評(píng)估Web應(yīng)用程序的安全性具有重要的理論意義和實(shí)用價(jià)值,文章僅SQL注入漏洞測(cè)試做了簡(jiǎn)單研究,下一步將繼續(xù)深入研究其他類(lèi)型漏洞,如網(wǎng)絡(luò)爬蟲(chóng)漏洞等等。
參考文獻(xiàn)
[1]朱輝,沈明星,李善平.Web應(yīng)用中代碼注入漏洞的測(cè)試方法[J].計(jì)算機(jī)工程,2010(10).
[2]盧俊.SQL注入與XSS攻擊防范方法的研究以及防范模型的設(shè)計(jì)與實(shí)現(xiàn)[J].北京郵電大學(xué),2010.
[3]潘古兵.Web應(yīng)用程序滲透測(cè)試方法研究[D].西南大學(xué),2012.
[4]趙麗娟.Web應(yīng)用程序滲透測(cè)試方法研究[D].中南大學(xué),2014.
[5]尹彥濤.Web漏洞掃描系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].中國(guó)海洋大學(xué),2014.