盧成浪 鄭城仁
摘要 SQL漏洞是眾多web漏洞中最常見的漏洞之一,也是黑帽子黑客最常見的攻擊手段之一。隨著SQL漏洞被頻頻曝光,對(duì)于SQL用戶的隱私保護(hù)得到人們的廣泛關(guān)注。文章主要研究SQL漏洞原理及各種攻擊手段,同時(shí)通過(guò)實(shí)戰(zhàn)分析來(lái)總結(jié)防范措施。文章主要通過(guò)四方面進(jìn)行描述,第一章描述SQL漏洞的歷史及當(dāng)前現(xiàn)狀;第二章分析SQL的原理;第三章描述SQL的攻擊模型及檢測(cè)方法;第四章進(jìn)行總結(jié)并展望。
【關(guān)鍵詞】SQL 漏洞 Web 用戶隱私
1 SQL注入漏洞的歷史及現(xiàn)狀
1.1 SQL漏洞發(fā)現(xiàn)歷史
SQL注入最早是由Jeff Forristal在1998年發(fā)現(xiàn)的,在1998年的10月份,F(xiàn)orristal寫了一篇關(guān)于如何在Windows NT服務(wù)器上進(jìn)行攻擊的文章,他發(fā)現(xiàn),那時(shí)候大部分的網(wǎng)站都使用的是Access數(shù)據(jù)庫(kù),并通過(guò)分析源代碼,程序員在寫SQL語(yǔ)法中存在邏輯上的錯(cuò)誤,于是,他通過(guò)分析SQL語(yǔ)法及后端連接數(shù)據(jù)庫(kù)程度,成功從數(shù)據(jù)庫(kù)中返回用戶的敏感信息,通過(guò)SQL漏洞,數(shù)據(jù)庫(kù)被成功滲透。
1.2 SQL漏洞的現(xiàn)狀
SQL注入在2007年被認(rèn)為是在web應(yīng)用程序中十大漏洞之一,在2010年作為主要的研究對(duì)象在公開的web應(yīng)用安全項(xiàng)目中,在2013年,SQL注入攻擊在OWASP十大攻擊中是最常見的攻擊手法之一。具體例子如下(以下涉及的網(wǎng)站注入己修復(fù)):
(1)在2002年二月,Jeremiah Jacks發(fā)現(xiàn)Guess.com網(wǎng)站存在SQL注入漏洞,允許任何人能夠重構(gòu)URL參數(shù)來(lái)訪問(wèn)數(shù)據(jù)庫(kù),使得數(shù)據(jù)庫(kù)返回20000個(gè)用戶名、銀行卡號(hào)以及用戶的其它敏感信息;
(2)在2005年11月,一個(gè)青年黑客利用SQL注入來(lái)破壞臺(tái)灣的一家信息安全雜志社網(wǎng)站,并且竊取了用戶的信息;
(3)在2006年一月,俄羅斯的電腦犯罪者通過(guò)SQL漏洞進(jìn)入了愛爾蘭的一家政府網(wǎng)站并竊取了用戶的銀行卡號(hào)等敏感信息,然后在網(wǎng)站將這些信息公開販賣;
(4)在2006年三月,一個(gè)黑客發(fā)現(xiàn)了offical印度官方旅游網(wǎng)站的一個(gè)SQL漏洞;
(5)在2007年六月,一名電腦罪犯利用SQL注入漏洞破壞了微軟在英國(guó)的網(wǎng)站,微軟發(fā)言人確認(rèn)了網(wǎng)站存在該漏洞;
(6)在2007年九月和2009年一月,土耳其黑客組織mOsted通過(guò)SQL注入來(lái)利用微軟的SQL服務(wù)器攻擊美國(guó)軍事工程網(wǎng)站;
(7)在2008年一月,有成千上萬(wàn)裝有微軟SQL數(shù)據(jù)庫(kù)的PC機(jī)感染了SQL注入攻擊,該攻擊主要是利用應(yīng)用程序中脆弱的代碼實(shí)現(xiàn)的;
(8)在2008年五月,在中國(guó)的一名程序員通過(guò)google搜索工具來(lái)自動(dòng)查找SQL服務(wù)網(wǎng)站,并通過(guò)自動(dòng)化SQL注入工具來(lái)進(jìn)行大范圍攻擊;
(9)在2009年八月,美國(guó)司法部門逮捕了一名叫Albert Gonzalez的美國(guó)公民和兩名俄羅斯公民,原因是他們使用SQL注入攻擊來(lái)竊取了1300萬(wàn)的信用卡數(shù)據(jù)。這一事件被當(dāng)時(shí)稱為‘美國(guó)歷史上最大的竊取個(gè)人信息案犯罪分子通過(guò)信用卡數(shù)據(jù)在支付平臺(tái)上進(jìn)行大規(guī)模的金錢交易,不僅造成個(gè)人財(cái)產(chǎn)損失,也使支付平臺(tái)造成混亂;
(10)在2010年七月,瑞士選舉期間,黑客企圖重寫SQL命令來(lái)進(jìn)行代碼注入,使得產(chǎn)生大量非人為的選票;
(11)在2011年三月,MySQL官方網(wǎng)站mysql.com被黑客利用SQL盲注實(shí)現(xiàn)了攻擊,導(dǎo)致大量的數(shù)據(jù)庫(kù)信息泄露;
(12)在2013年十一月,黑客組織RaptorSwag聲稱利用SQL注入攻擊了中國(guó)國(guó)際運(yùn)動(dòng)事務(wù)所中71家中國(guó)政府?dāng)?shù)據(jù)庫(kù),并通過(guò)匿名的形式將這些信息公開泄露。
2 SQL原理分析
2.1 原理簡(jiǎn)介
SQL(結(jié)構(gòu)化查詢語(yǔ)句)注入攻擊主要使通過(guò)構(gòu)造特殊的輸入?yún)?shù)傳入到Web應(yīng)用程序中,這些輸入?yún)?shù)大部分是由合法的SQL組合構(gòu)成,從而使的數(shù)據(jù)庫(kù)溢出敏感信息。
2.2 Web應(yīng)用程序框架
當(dāng)我們?cè)L問(wèn)一個(gè)網(wǎng)站,然后網(wǎng)站返回我們需要的內(nèi)容,這看上去只是一個(gè)簡(jiǎn)單的request和response的過(guò)程,但是對(duì)于數(shù)據(jù)的轉(zhuǎn)化和訪問(wèn)過(guò)程,具體包括如下:
2.2.1 界面層/表示層
這層主要是呈現(xiàn)用戶需要的內(nèi)容,主要是由瀏覽器將HTML代碼轉(zhuǎn)化為適合人們閱讀的內(nèi)容。
2.2.2 業(yè)務(wù)邏輯層/領(lǐng)域?qū)?/p>
這層主要是利用后臺(tái)服務(wù)器語(yǔ)言(如:PHP、ASP、JSP等)將表示層上的代碼轉(zhuǎn)化、連接到下一層(數(shù)據(jù)訪問(wèn)層),同時(shí)將數(shù)據(jù)訪問(wèn)層返回的數(shù)據(jù)解析成HTML代碼,發(fā)送至表示層。
2.2.3 數(shù)據(jù)訪問(wèn)層/存儲(chǔ)層
這層主要是存儲(chǔ)數(shù)據(jù)的,由上一層腳本來(lái)連接DBMS(數(shù)據(jù)庫(kù)管理系統(tǒng)),并執(zhí)行SQL語(yǔ)言將數(shù)據(jù)添加或取出,然后傳回結(jié)果給Web服務(wù)器。
2.3 SQL注入產(chǎn)生
如果只是簡(jiǎn)單的訪問(wèn)一個(gè)網(wǎng)站,沒有提交數(shù)據(jù)表單,一般是不會(huì)存在SQL注入的,我們稱這種訪問(wèn)為線性訪問(wèn)。但是在大多數(shù)情況下,訪問(wèn)一個(gè)網(wǎng)站是需要結(jié)合用戶的輸入數(shù)據(jù),從而返回用戶需要的內(nèi)容,這種網(wǎng)站一般是動(dòng)態(tài)網(wǎng)站,具體的實(shí)現(xiàn)方式將會(huì)在下一章描述。
3 攻擊模型及檢測(cè)方法
3.1 實(shí)驗(yàn)環(huán)境
本實(shí)驗(yàn)運(yùn)行在Kali linux平臺(tái)上,處理器:Intel(R) Core(TM) 15-3210M cpu @2.50GHz2.50GHz;內(nèi)存(RAM): 6.OOGB;版本號(hào):Linuxkali 4.9.O-kali3-amd64
3.2 攻擊模型
首先我們分析漏洞的檢測(cè)技術(shù),具體包含以下五個(gè)方面:
3.2.1 基于布爾的盲注檢測(cè)
基于布爾的盲注在注入布爾語(yǔ)法時(shí),服務(wù)器僅僅會(huì)返回兩種結(jié)果,True或False,但是并不能獲取我們需要的信息,比如數(shù)據(jù)庫(kù)的大小、長(zhǎng)度和數(shù)據(jù)庫(kù)名等,所以我們需要構(gòu)造SQL語(yǔ)法使得數(shù)據(jù)庫(kù)返回我們需要的內(nèi)容,比如:原始URL(同一資源定位符)為http://127.O.O.l/s qlilabs/Less-5/?id=l;我們獲取數(shù)據(jù)庫(kù)長(zhǎng)度的最終URL為:http://127.O.O.l/sqlilabs/Less-5/?id=l' andlength(database(》=8%23;此時(shí)如果頁(yè)面返回正確結(jié)果,則說(shuō)明數(shù)據(jù)庫(kù)的長(zhǎng)度為8。
3.2.2 基于時(shí)間的盲注
基于時(shí)間的盲注顧名思義就是根據(jù)時(shí)間的長(zhǎng)短來(lái)判斷是否有漏洞,我們?cè)诓檎襍QL漏洞時(shí),經(jīng)常會(huì)發(fā)現(xiàn)有些漏洞難以被識(shí)別,及Web頁(yè)面不會(huì)返回任何信息,所以無(wú)法檢索到任何信息。雖然Web頁(yè)面不會(huì)返回任何信息,但當(dāng)我們向數(shù)據(jù)庫(kù)注入一個(gè)時(shí)間延遲時(shí),可以根據(jù)服務(wù)器響應(yīng)時(shí)間的長(zhǎng)短來(lái)判斷是否有漏洞的存在,具體的參數(shù)構(gòu)造如下:
‘a(chǎn)nd (select* from (select(sleep(20》)a)--+;
這條語(yǔ)句主要的功能是讓服務(wù)器延遲20秒返回響應(yīng),在具體的攻擊環(huán)節(jié)可以根據(jù)不同需求而改變。
3.2.3 基于錯(cuò)誤的檢測(cè)
基于錯(cuò)誤的檢測(cè)是當(dāng)構(gòu)造一個(gè)參數(shù)(比如加一個(gè)括號(hào)或加一個(gè)單引號(hào))傳給服務(wù)器時(shí),服務(wù)器會(huì)判斷你的語(yǔ)法是否正確,如果錯(cuò)誤,會(huì)返回一個(gè)錯(cuò)誤信息,當(dāng)用戶在瀏覽器中看到返回的錯(cuò)誤信息時(shí),基本可以判斷該數(shù)據(jù)庫(kù)存在注入漏洞,因?yàn)檫@就說(shuō)明服務(wù)器并沒有對(duì)用戶的輸入進(jìn)行過(guò)濾或者轉(zhuǎn)義。
3.2.4 基于UNION的聯(lián)合查詢檢測(cè)
Union語(yǔ)句可聯(lián)合兩個(gè)或多個(gè)select查詢語(yǔ)句,但是前提是多個(gè)查詢需要滿足相同的列數(shù)及數(shù)據(jù)類型相同才能正確返回查詢結(jié)果。簡(jiǎn)單的查詢語(yǔ)句可以是:
SELECT column name FROM table__ nameUNION SELECT column name FROM tablename,
3.2.5 基于堆疊查詢的檢測(cè)
因?yàn)樵赟QL語(yǔ)句中,分號(hào)(;)表示一個(gè)語(yǔ)句的結(jié)束,因此,當(dāng)我們?cè)谝粭lSQL語(yǔ)句后面在插入一條SQL語(yǔ)句,相當(dāng)于就執(zhí)行了兩條SQL語(yǔ)句,從而達(dá)到攻擊者的需求。例如以下:
SELECT * FROM product WHEREid=l;DELETE FROM product;
因此,如果在服務(wù)器端沒有進(jìn)行過(guò)濾,當(dāng)攻擊者插入這條語(yǔ)句時(shí),首先它會(huì)顯示product表中id為1的信息,然后再刪除product這張表,從而破壞用戶的數(shù)據(jù)。
以上我們分析了多種攻擊檢測(cè)方式,但其實(shí)歸結(jié)起來(lái)就是兩方面的類型:基于數(shù)字型注入和基于字符型注入。
(1)基于數(shù)字型注入:假如原始URL為:http://xxX /abc.php?id=x我們?cè)俸竺嫣砑訁?shù),構(gòu)成新的URL:http://xxx/abc.php?id=x and1=1和http://xxx/abc.php?id=x and l=2。如果分別返回正確頁(yè)面和錯(cuò)誤頁(yè)面,則說(shuō)明該注入為數(shù)字型注入。因?yàn)?=1為真,1=2為假,所以分別會(huì)返回正確和錯(cuò)誤。
(2)基于字符型注入:同理,假設(shè)原URL為http://xxx/abc.php?id=x插入?yún)?shù)后,新 的URL為http://xxx/abc.php?id=x' and'l=1和http://xxx/abc.php?id=x' and'1=2。如果分別返回正確頁(yè)面和錯(cuò)誤頁(yè)面,則說(shuō)明該漏洞為字符型漏洞。上面兩個(gè)插入?yún)?shù)都閉合了單引號(hào),所以還是判斷1=1和1=2的真假情況。
3.3 攻擊實(shí)戰(zhàn)
接下來(lái),我們用具體的實(shí)戰(zhàn)形式進(jìn)行演示操作。圖1是一個(gè)大概的攻擊模型,首先從客戶端發(fā)起攻擊,然后讓服務(wù)器返回結(jié)果。
因?yàn)槭謩?dòng)檢測(cè)相對(duì)來(lái)說(shuō)效率低,并且比較麻煩,所以我們使用自動(dòng)化測(cè)試攻擊sqlmap,下面我們簡(jiǎn)單介紹sqlmap的用法。
-u表示需要檢測(cè)的URL地址
-g表示使用google搜索來(lái)作為一個(gè)URL地址
--current-user表示查找當(dāng)前數(shù)據(jù)庫(kù)管理系統(tǒng)的所有用戶
--currenr-db表示查找當(dāng)前的所有數(shù)據(jù)庫(kù)
--passwords表示查找用戶的所有密碼哈希值
--tables表示查找一個(gè)數(shù)據(jù)庫(kù)中的表
--columns表示查找一個(gè)表中的列
--dump表示查找表中的值
這里,我們以http://www.xxx.com/subcatphp?id=2網(wǎng)站為例,因?yàn)閟qlmap集成了上述五種的注入檢測(cè)方法,首先,我們查看該網(wǎng)站是否有漏洞存在:
sqlmap -u “http://www.xxx.com/subcatphp?id=2”
返回結(jié)果顯示,id存在漏洞注入,則獲取數(shù)據(jù)庫(kù):
sqlmap -u “http://www.xxx.com/subcatphp?id=2” dbs會(huì)返回所有數(shù)據(jù)庫(kù)(bibleglossary. bible_history、information schema.keywords、kidsdict)
查看數(shù)據(jù)庫(kù)keywords中的表有哪些:
sqlmap -u “http://www.xxx.com/subcatphp?id=2”-D keywords -tables結(jié)果返回所有表(admin、proj ects、style)。查看表admin的列字段:
sqlmap -u “http://www.xxx.com/subcat
4 總結(jié)并展望
SQL漏洞注入的危害很大,若遭到攻擊后,小則網(wǎng)站無(wú)法訪問(wèn),大則數(shù)據(jù)庫(kù)遭到破壞,用戶敏感信息泄露,不但造成經(jīng)濟(jì)上的損失,還可能給人精神和心里造成創(chuàng)傷,所以,對(duì)于SQL漏洞注入的防范是必不可少的,下面將進(jìn)行一個(gè)簡(jiǎn)單的歸納和總結(jié)。
(1)封裝客戶端的提交信息。
(2)屏蔽出錯(cuò)信息。
(3)對(duì)用戶的輸入信息進(jìn)行轉(zhuǎn)義和過(guò)濾處理。
(4)不要使用字符串來(lái)連接SQL查詢語(yǔ)句,而是使用SQL變量來(lái)處理。
(5)將權(quán)限設(shè)置為最小化,盡量不要賦予寫的權(quán)限。
(6)去掉或修改Web服務(wù)器上危險(xiǎn)的命令,比如ftp、telnet、cmd等。
(7)將密碼設(shè)置的更加復(fù)雜,包含大小寫、英文字符、特殊字符等,并且使用混合加密而不是單單的md5加密方式。
(8)將SQL語(yǔ)句進(jìn)行預(yù)編譯。本文主要是描述了當(dāng)前SQL注入漏洞的檢測(cè),同時(shí)借助自動(dòng)化測(cè)試工具sqlmap進(jìn)行自動(dòng)化檢測(cè)并攻擊,在最后根據(jù)漏洞注入的原理提出了一些防范措施,對(duì)防范措施的具體實(shí)現(xiàn)過(guò)程及分析將是下一步研究的目標(biāo)。
參考文獻(xiàn)
[1] Yu
Jing. GaoFeng, XuLianghua,et al.Research on penetration testingbased on SQL injection[J].Computer Engineering andDesign, 2007, 28 (15): 3577-3579.
[2]Williams J,Wichers D.OWASP top 10-2010 rcl [R]. Washington: OWASP, 2010.
[3]Zhang Zhuo. SQL injection attacktechniques and countermeasuresanalysis [D]. Shanghai Jiao TongUniversity, 2007.
[4] Shelly D A, Tront J G, Chair S F,et al. Using a Web Server TestBed to Analyze the Limitationsof Web Application VulnerabilityScanners [J] . Virginia Tech, 2 010.
[5] Shelly, David A,et al. "Using a WebServer Test Bed to Analyze theLimitations of Web ApplicationVulnerability Scanners. "VirginiaTech, 2010.
[6] Shelly, D. A. , Tront, J. G. , Chair,S. F. ,Midkiff, R. C. , Marchany, &Shelly,A. (2010).Using a web servertest bed to analyze the limitationsof web application vulnerabilityscanners. Virginia Tech.
[7]Tabatabaei S A,Asadpour M.Study ofInfluential Trends, Communities,and Websites on the Post-electionEvents of Iranian PresidentialElection in Twitter[M].SocialNetwork Analysis-Community Detectionand Evolution. Springer InternationalPublishing, 2014: 71-87.
[8]張勇,李力,薛倩.Web環(huán)境下SQL注A攻擊的檢測(cè)與防御 [J].現(xiàn)代電子技術(shù),2004,182(15):105-107.