• 
    

    
    

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

      ?

      SQL漏洞研究及實(shí)戰(zhàn)分析

      2018-02-25 02:39盧成浪鄭城仁
      電子技術(shù)與軟件工程 2018年7期
      關(guān)鍵詞:漏洞

      盧成浪 鄭城仁

      摘要 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.

      猜你喜歡
      漏洞
      漏洞
      偵探推理游戲(二)
      三明:“兩票制”堵住加價(jià)漏洞
      高鐵急救應(yīng)補(bǔ)齊三漏洞
      細(xì)數(shù)監(jiān)管漏洞
      延津县| 乌鲁木齐市| 甘洛县| 博客| 花垣县| 松滋市| 嘉定区| 浙江省| 扶绥县| 太谷县| 长垣县| 高淳县| 宜阳县| 通海县| 赞皇县| 黑山县| 博兴县| 广水市| 常宁市| 北海市| 南丹县| 洛扎县| 新宾| 秀山| 哈密市| 白银市| 元谋县| 资阳市| 涪陵区| 名山县| 寿光市| 土默特左旗| 赞皇县| 望城县| 辽源市| 吉木萨尔县| 新干县| 五常市| 延安市| 孟州市| 渝北区|