SQL注入攻擊與防御技術(shù)計(jì)算機(jī)專(zhuān)業(yè)_第1頁(yè)
SQL注入攻擊與防御技術(shù)計(jì)算機(jī)專(zhuān)業(yè)_第2頁(yè)
SQL注入攻擊與防御技術(shù)計(jì)算機(jī)專(zhuān)業(yè)_第3頁(yè)
SQL注入攻擊與防御技術(shù)計(jì)算機(jī)專(zhuān)業(yè)_第4頁(yè)
SQL注入攻擊與防御技術(shù)計(jì)算機(jī)專(zhuān)業(yè)_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、題 目:SQL注入攻擊與防御技術(shù)摘 要自20世紀(jì)90年代末起,互聯(lián)網(wǎng)技術(shù)得到快速發(fā)展,web應(yīng)用程序越來(lái)越多帶給人們極大的便利,但與此同時(shí)針對(duì)web應(yīng)用的攻擊也越來(lái)越多。SQL注入攻擊就是其中一種最常見(jiàn)的,而且SQL注入具有隱蔽性大,危害性高、易于實(shí)施等特點(diǎn)。目前對(duì)于這種攻擊技術(shù)的研究比較混亂,本文對(duì)SQL注入技術(shù)進(jìn)行了深入的歸納整理總結(jié)研究,系統(tǒng)性詳細(xì)闡述了SQL注入攻擊技術(shù)的產(chǎn)生背景、攻擊原理、攻擊手段和防御手段等相關(guān)知識(shí)。最后本文提出SQL注入防范模型,在理論能有效防止SQL注入攻擊。該防御系統(tǒng)具有一定的應(yīng)用價(jià)值。關(guān)鍵字:SQL注入攻擊 SQL注入防御ABSTRACTSince the

2、end of the 1990s, Internet technology has developed rapidly, and more and more web applications have brought great convenience to people, but at the same time, more and more attacks on Web applications have been made. SQL injection is one of the most common attacks, and SQL injection is characterize

3、d by high invisibility, high hazard and easy implementation. At present, the research on this kind of attack technology is rather chaotic. This paper makes a thorough summary and Research on SQL injection technology, and systematically expounds the background, attack principle, attack means and defe

4、nse means of SQL injection attack technology. Finally, this paper proposes a SQL injection prevention model, which can effectively prevent SQL injection attacks. The defense system has a certain value of application.Keyword: SQL injection attack SQL injection defense目錄第一章 緒論41.1研究背景與意義41.2國(guó)內(nèi)外研究現(xiàn)狀51.

5、3課題研究?jī)?nèi)容61.31 SQL注入攻擊原理和攻擊過(guò)程61.32 SQL注入攻擊防御手段和防御模型61.4論文結(jié)構(gòu)7第二章 SQL注入攻擊概述82.1 SQL注入攻擊背景知識(shí)82.11 SQL介紹82.12 SQL注入攻擊概念介紹82.2 SQL注入攻擊特點(diǎn)及危害92.3 SQL注入攻擊手段102.31沒(méi)有正確過(guò)濾轉(zhuǎn)義字符102.32 Incorrect type handling112.33 數(shù)據(jù)庫(kù)服務(wù)器中的漏洞122.34 盲目SQL注入式攻擊122.35 條件響應(yīng)122.36 條件性差錯(cuò)132.37 時(shí)間延誤132.4 SQL注入實(shí)現(xiàn)過(guò)程詳細(xì)分析132.5本章小結(jié)18第三章 SQL注入攻

6、擊防范概述203.1 SQL注入攻擊防御手段203.11針對(duì)注入攻擊的檢測(cè)方法203.12 注入攻擊防御措施203.121 檢查變量數(shù)據(jù)類(lèi)型和格式203.122 過(guò)濾或轉(zhuǎn)義危險(xiǎn)字符213.123 使用參數(shù)化的過(guò)濾性語(yǔ)句223.124 IIS服務(wù)器腳本錯(cuò)誤消息的設(shè)置223.125 數(shù)據(jù)庫(kù)信息加密安全233.126 數(shù)據(jù)庫(kù)用戶(hù)權(quán)限的設(shè)置233.127 使用web應(yīng)用防火墻233.2 SQL注入攻擊防范模型概述243.3本章小結(jié)25第四章 總結(jié)與展望26參考文獻(xiàn)27致謝27第一章 緒論1.1研究背景與意義自互聯(lián)網(wǎng)誕生以來(lái),就很大程度上對(duì)民眾的生活產(chǎn)生了很大的影響,并且對(duì)于工作也提供了很大的便利。不過(guò)

7、任何事物都存在兩面性,在方面人們的同時(shí),帶給人們的困擾越來(lái)越多,猖獗地網(wǎng)絡(luò)攻擊使國(guó)家、社會(huì)、企業(yè)(單位)、個(gè)人損失愈發(fā)不可輕視。司空見(jiàn)慣的網(wǎng)絡(luò)攻擊,攻擊手段日新月異且令人防不勝防。在互聯(lián)網(wǎng)技術(shù)中web形式的應(yīng)用占據(jù)著不可忽視的份量,在政府單位,電子商務(wù),社交平臺(tái)等互聯(lián)網(wǎng)服務(wù)中大部分都會(huì)存在以web形式提供服務(wù),攻擊者針對(duì)web應(yīng)用的攻擊可以說(shuō)是不間斷的,其中SQL注入攻擊尤為明顯,該攻擊方式具有很大的危害性,對(duì)互聯(lián)網(wǎng)應(yīng)用安全具有很大的威脅。攻擊者能夠利用SQL注入攻擊技術(shù)進(jìn)行各種各樣的惡意活動(dòng),導(dǎo)致合法權(quán)益被侵犯,資源被盜取盜用。后期衍生出一些防御手段,但防御手段更新速度無(wú)法與攻擊者更新攻擊技

8、術(shù)跟進(jìn),網(wǎng)絡(luò)安全問(wèn)題日趨嚴(yán)重。作為web應(yīng)用漏洞利用者SQL注入攻擊技術(shù)被攻擊者利用來(lái)獲取web應(yīng)用的資源。這種困擾web應(yīng)用管理者的攻擊技術(shù)還時(shí)不時(shí)定期爆發(fā),給web應(yīng)用的管理者帶來(lái)了極大的困擾,也給各受侵入web應(yīng)用程序帶了各種各樣的損失,比如信譽(yù)受損、敏感信息被竊取、資源被占用等,給人們正常生活帶來(lái)了極大的不安全性。因此針對(duì)此類(lèi)網(wǎng)絡(luò)攻擊技術(shù)研究是極具意義的事情。綜上所述,通過(guò)對(duì)SQL注入攻擊技術(shù)研究,可以掌握SQL注入攻擊的原理、手段且方便了解和評(píng)估其危害。通過(guò)對(duì)SQL注入防范手段和模型的研究,了解和掌握業(yè)界一些比較成熟的防御手段和防御模型,通過(guò)對(duì)其了解、整理、歸納,就能根據(jù)具體情況獨(dú)立

9、設(shè)計(jì)符合滿(mǎn)足自身需要或者針對(duì)大部分常用SQL注入攻擊手段較為實(shí)用、健壯的通用防御系統(tǒng)。這些防御和檢測(cè)系統(tǒng)能有效的檢測(cè)和防御大部分針對(duì)政府企業(yè)單位和用戶(hù)的SQL注入攻擊。因此,這項(xiàng)研究對(duì)保護(hù)人們信息安全具有極大社會(huì)意義和研究。1.2國(guó)內(nèi)外研究現(xiàn)狀隨著互聯(lián)網(wǎng)的發(fā)展極大的便利了人們的工作生活,政府單位、企業(yè)基本上都在線(xiàn)上有開(kāi)展業(yè)務(wù),web應(yīng)用得到了極大的推廣。但針對(duì)web應(yīng)用的攻擊也越來(lái)越多,其中SQL注入攻擊尤為常見(jiàn)且危害極大。隨著SQL注入攻擊愈發(fā)頻繁,SQL注入攻擊迅速成為國(guó)內(nèi)外網(wǎng)絡(luò)安全研究熱點(diǎn)。SQL注入研究大致集中于SQL注入攻擊工具的開(kāi)發(fā),和防SQL注入攻擊系統(tǒng)的研究設(shè)計(jì)開(kāi)發(fā),國(guó)內(nèi)對(duì)于S

10、QL注入研究主要集中于網(wǎng)絡(luò)安全公司,這些網(wǎng)絡(luò)安全公司(如360、綠盟等)對(duì)SQL注入研究主要體現(xiàn)于對(duì)SQL注入入侵檢測(cè)系統(tǒng)的開(kāi)發(fā)。國(guó)外研究對(duì)SQL注入研究提出了大量實(shí)用防御措施,例如提出對(duì)程序終端的用戶(hù)輸入進(jìn)行合法性檢測(cè)、提出屏蔽訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)措施使得攻擊者無(wú)法獲取關(guān)于數(shù)據(jù)庫(kù)的有效信息、提出對(duì)數(shù)據(jù)庫(kù)敏感信息進(jìn)行加密和權(quán)限訪(fǎng)問(wèn),以及提出對(duì)組裝SQL語(yǔ)句預(yù)分析方法等等。1.3課題研究?jī)?nèi)容本課題主要研究?jī)?nèi)容有:1.31 SQL注入攻擊原理和攻擊過(guò)程結(jié)構(gòu)化查詢(xún)語(yǔ)言(SQL)的本質(zhì)為一個(gè)文本語(yǔ)言,主要是用于跟數(shù)據(jù)庫(kù)產(chǎn)生交互的,因?yàn)椴糠謹(jǐn)?shù)據(jù)庫(kù)在執(zhí)行查詢(xún)操作的時(shí)候(針對(duì)于語(yǔ)句的),區(qū)別用戶(hù)數(shù)據(jù)或者是系統(tǒng)查詢(xún)代碼

11、功能缺失,數(shù)據(jù)庫(kù)無(wú)法分清是用戶(hù)數(shù)據(jù)還是查詢(xún)語(yǔ)句。SQL注入攻擊就是利用這一漏洞,將SQL查詢(xún)語(yǔ)句當(dāng)做用戶(hù)數(shù)據(jù)或偽裝成用戶(hù)數(shù)據(jù)提交,使數(shù)據(jù)庫(kù)執(zhí)行該查詢(xún)語(yǔ)句,從而獲取用戶(hù)的敏感信息,此外攻擊者獲取數(shù)據(jù)庫(kù)相關(guān)信息后可進(jìn)一步注入拿到用戶(hù)數(shù)據(jù)庫(kù)的控制權(quán)、帶寬等資源。1.32 SQL注入攻擊防御手段和防御模型本文在闡述SQL注入攻擊防御手段和防御模型時(shí)重點(diǎn)闡述了SQL注入攻擊的檢測(cè):基于特殊、敏感字符的檢測(cè)和防范措施,SQL注入攻擊防范基本策略有:檢查變量數(shù)據(jù)類(lèi)型和格式、過(guò)濾或轉(zhuǎn)義危險(xiǎn)字符、使用參數(shù)化的過(guò)濾性語(yǔ)句、IIS 服務(wù)器腳本錯(cuò)誤消息的設(shè)置、數(shù)據(jù)庫(kù)信息加密安全、數(shù)據(jù)庫(kù)用戶(hù)權(quán)限的設(shè)置等以及闡述了一套簡(jiǎn)

12、約的自動(dòng)防范SQL注入攻擊的模型1.4論文結(jié)構(gòu)本文分為緒論、SQL注入攻擊概述、SQL注入攻擊防范概述、基于SQL注入攻擊通用防注入系統(tǒng)的研究,總共分為5個(gè)部分。第一章為緒論,這個(gè)部分的內(nèi)容重點(diǎn)對(duì)此篇論文的研究目標(biāo)、意義、課題選取原因、研究現(xiàn)狀、以及章節(jié)分布等進(jìn)行了詳細(xì)的陳列;第二章為SQL注入攻擊的概述,該部分詳細(xì)闡述了SQL注入攻擊背景知識(shí)、SQL注入攻擊特點(diǎn)及危害以及手段和其注入實(shí)現(xiàn)過(guò)程;第三章為SQL注入攻擊防范的概述,前一章詳解闡述了SQL注入攻擊的相關(guān)知識(shí),在對(duì)SQL注入攻擊有詳細(xì)了解后,針對(duì)SQL注入攻擊作出相應(yīng)的防御,包括防御的手段和防御模型概述。第四章為全文的總結(jié)與展望部分,

13、針對(duì)本文的研究?jī)?nèi)容作出總結(jié)和提出了自己對(duì)SQL注入今后發(fā)展展望。第二章 SQL注入攻擊概述2.1 SQL注入攻擊背景知識(shí)2.11 SQL介紹SQL的本質(zhì)為一種結(jié)構(gòu)化查詢(xún)語(yǔ)言,它能夠?qū)Τ绦蜻M(jìn)行設(shè)計(jì),也能夠?qū)?shù)據(jù)庫(kù)進(jìn)行查詢(xún)。大多數(shù)情況下都能夠?qū)?shù)據(jù)庫(kù)展開(kāi)儲(chǔ)存、查詢(xún)以及更新等操作,并且還能夠?qū)﹃P(guān)系數(shù)據(jù)庫(kù)系統(tǒng)進(jìn)行有效的管理。SQL為一種編程語(yǔ)言,存在一定的特殊目的,屬于高級(jí)的范疇,并且是非過(guò)程化的,它能夠讓用戶(hù)可以對(duì)高層數(shù)據(jù)結(jié)構(gòu)進(jìn)行相關(guān)的操作,這主要是針對(duì)于它允許用戶(hù)不了解數(shù)據(jù)存放方法和方式的情況下對(duì)數(shù)據(jù)進(jìn)行操作。就理論層面而言,它存在不一樣的底層結(jié)構(gòu),并且存在不一樣的數(shù)據(jù)庫(kù)系統(tǒng),因此它們能夠采取相同

14、的SQL來(lái)對(duì)數(shù)據(jù)庫(kù)系統(tǒng)展開(kāi)有關(guān)的操作,1986年十月份,美國(guó)權(quán)威機(jī)構(gòu)進(jìn)行了關(guān)于SQL的調(diào)整以及規(guī)范,并且將其設(shè)定成關(guān)系式數(shù)據(jù)庫(kù)管理系統(tǒng)的標(biāo)準(zhǔn)語(yǔ)言(ANSI X3. 135-1986),一年以后,它獲得了國(guó)際標(biāo)準(zhǔn)組織對(duì)其的認(rèn)可,發(fā)展成為了國(guó)際標(biāo)準(zhǔn)。但是不同類(lèi)型通行的數(shù)據(jù)庫(kù)系統(tǒng)在使用的階段里都對(duì)其規(guī)范性展開(kāi)了有效的完善以及編改。因此從本質(zhì)而言,不一樣數(shù)據(jù)庫(kù)系統(tǒng)間存在的SQL未能全部地進(jìn)行通用。2.12 SQL注入攻擊概念介紹現(xiàn)在的應(yīng)用開(kāi)發(fā)的整體框架主要分為C/S(client/server,客戶(hù)端服務(wù)器模式)和B/S(Browser/Server,瀏覽器服務(wù)器模式)架構(gòu),兩者雖存在有居多區(qū)別,但兩

15、者模式可以總結(jié)為由表示層發(fā)出請(qǐng)求,經(jīng)由應(yīng)用層處理向數(shù)據(jù)層發(fā)出SQL請(qǐng)求,數(shù)據(jù)層處理請(qǐng)求后把處理后的結(jié)果反饋給應(yīng)用層,應(yīng)用層再應(yīng)答給表示層。攻擊者可以利用應(yīng)用的漏洞,將一些惡意代碼當(dāng)做數(shù)據(jù)提交,或者偽裝成數(shù)據(jù)繞過(guò)應(yīng)用程序檢測(cè),最終在應(yīng)用程序上執(zhí)行惡意的SQL命令,獲取到數(shù)據(jù)庫(kù)中的一些敏感信息,再獲取這些敏感信息后攻擊者可進(jìn)一步對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,最終完全擁有對(duì)數(shù)據(jù)庫(kù)完全控制的權(quán)限。這就是SQL注入攻擊(SQLinject attack)。2.2 SQL注入攻擊特點(diǎn)及危害SQL作為網(wǎng)絡(luò)安全常見(jiàn)威脅點(diǎn)之一,其具很多特點(diǎn)。特點(diǎn)一、存在面廣,SQL注入攻擊是建立在SQL語(yǔ)言基礎(chǔ)上的,理論上存在使用SQL語(yǔ)

16、言的地方就有可能存在SQL注入漏洞,而現(xiàn)實(shí)情況也是基本如此。因?yàn)槟承┎扇QL語(yǔ)言的web應(yīng)用程序并未能就輸入的SQL語(yǔ)言展開(kāi)了有效的解決、處理、以及審核,因此會(huì)導(dǎo)致SQL出現(xiàn)注入漏洞;即使有相當(dāng)部分網(wǎng)站對(duì)輸入的SQL語(yǔ)句進(jìn)行過(guò)嚴(yán)格的處理,但也不能完全保證沒(méi)SQL注入漏洞的存在。特點(diǎn)二、技術(shù)難度低,幾乎大部分的SQL注入資料都可以網(wǎng)上找到,包括學(xué)習(xí)文檔、視頻、SQL注入工具等,利用SQL注入工具很容易對(duì)一些防護(hù)力度低的web應(yīng)用程序?qū)嵤┕?。特點(diǎn)三、危害大,當(dāng)攻擊者成功實(shí)施SQL注入后,可以獲取相應(yīng)數(shù)據(jù)庫(kù)的敏感信息、對(duì)數(shù)據(jù)庫(kù)進(jìn)行改寫(xiě)等操作,對(duì)web應(yīng)用相關(guān)用戶(hù)、單位造成損失。2.3 SQL注入

17、攻擊手段2.31沒(méi)有正確過(guò)濾轉(zhuǎn)義字符如果用戶(hù)在進(jìn)行輸入后,未能就轉(zhuǎn)義字符進(jìn)行有效地處理(一般是指過(guò)濾),那么就很大程度上會(huì)導(dǎo)致上述注入式攻擊行為的出現(xiàn)。假如攻擊人員通過(guò)轉(zhuǎn)義字符來(lái)提供存在較大現(xiàn)實(shí)意義的SQL語(yǔ)句,就很有可能會(huì)使得數(shù)據(jù)庫(kù)能夠得到終端的管理以及操作。比方說(shuō),下面的這行代碼就會(huì)演示這種漏洞:"SELECT * FROM users WHERE name = '" + userName + "'" 這個(gè)種類(lèi)代碼有一個(gè)關(guān)鍵的設(shè)計(jì)初衷為:能夠憑借數(shù)據(jù)表的分析,找到某些特定的數(shù)據(jù),不過(guò)假如期望得到的數(shù)據(jù)被一個(gè)惡意用戶(hù)偽造,那么該語(yǔ)句所執(zhí)

18、行的操作可能就會(huì)被用來(lái)獲取數(shù)據(jù)庫(kù)敏感數(shù)據(jù)進(jìn)而獲取多數(shù)據(jù)庫(kù)操作的相關(guān)權(quán)限,比如,將上述數(shù)據(jù)變量(即username)設(shè)置為:a' or 't'='t,這個(gè)時(shí)候原始語(yǔ)句產(chǎn)生了調(diào)整:SELECT * FROM users WHERE name = 'a' OR 't'='t';如果這個(gè)種類(lèi)的代碼可以在某個(gè)認(rèn)證階段里被使用,如此就能夠認(rèn)可應(yīng)用程序終端用戶(hù)能夠?qū)δ硞€(gè)科學(xué)的數(shù)據(jù)進(jìn)行明確,因?yàn)樵摋l件永遠(yuǎn)為真。在一些服務(wù)器上,以SQL server為例,在理論上任何一個(gè)SQL語(yǔ)句都可以通過(guò)該類(lèi)型的方式注入。2.32 Incorre

19、ct type handling當(dāng)應(yīng)用程序終端用戶(hù)提供了一個(gè)非強(qiáng)類(lèi)型字段或者沒(méi)有實(shí)施強(qiáng)類(lèi)型強(qiáng)制時(shí)就有可能發(fā)生該類(lèi)型形式的攻擊。假如程序員在SQL語(yǔ)句里采取了數(shù)字字段,而且未能對(duì)用戶(hù)是否開(kāi)展了科學(xué)的輸入(即合法性)展開(kāi)審查以及評(píng)判,那么就存在被攻擊人員進(jìn)行不科學(xué)利用的可能性。如:“SELECT * FROM data WHERE id = ” + a_variable + “;”假如某用戶(hù)給出的字段不屬于某個(gè)強(qiáng)類(lèi)型的范疇,或者為能存在任何強(qiáng)制性措施,就會(huì)導(dǎo)致出現(xiàn)這類(lèi)模式的攻擊。如果在某個(gè)SQL語(yǔ)句里采取了特定的數(shù)字字段,假如程序員未能對(duì)這個(gè)用戶(hù)進(jìn)行合法性檢查,即評(píng)判它是否是數(shù)字型,就能夠?qū)е麓祟?lèi)

20、攻擊的出現(xiàn)。比如,如果某數(shù)字跟id有關(guān)聯(lián),那么它能夠是某個(gè)字符串。假如為字符串,就能夠不直接經(jīng)過(guò)轉(zhuǎn)義字符而展開(kāi)相關(guān)的檢測(cè)。如果我們對(duì)a_variable進(jìn)行相關(guān)設(shè)置:1;DROP TABLE users就能夠落實(shí)users表的刪除功能了2.33 數(shù)據(jù)庫(kù)服務(wù)器中的漏洞部分?jǐn)?shù)據(jù)庫(kù)服務(wù)并不是十全十美的,例如MySQL服務(wù)器中mySQL_real_escape_string()也會(huì)存在一定的函數(shù)漏洞。這個(gè)種類(lèi)的漏洞能夠認(rèn)可某個(gè)攻擊人員依據(jù)不正確的字符編碼來(lái)實(shí)現(xiàn)某個(gè)順利的SQL注入式攻擊。2.34 盲目SQL注入式攻擊假如某個(gè)應(yīng)用程序特別易于受到攻擊,不過(guò)卻未能向攻擊人員展示結(jié)果,這就也許會(huì)產(chǎn)生盲注。如

21、果某個(gè)網(wǎng)頁(yè)存在漏洞,那么它無(wú)法把所有的具體數(shù)據(jù)進(jìn)行全面的顯示,而是按照注入到合法語(yǔ)句中的邏輯語(yǔ)句執(zhí)行結(jié)果來(lái)將不一樣的內(nèi)容進(jìn)行表征。假如人們開(kāi)展上述攻擊需要特別多的人力以及物理,所以就應(yīng)該給所有得到的字符進(jìn)行優(yōu)化,使其成為不同于以往的語(yǔ)句。但如果我們能確定漏洞具體位置就可以使用著名的SQLmap以及類(lèi)似工具進(jìn)行攻擊,能夠很大程度上增加攻擊效率。2.35 條件響應(yīng)通過(guò)SQL注入式,能夠讓某個(gè)數(shù)據(jù)庫(kù)不得不在普通應(yīng)用程序屏幕上對(duì)某邏輯語(yǔ)句的大小進(jìn)行計(jì)算,例如SELECT StuDetail FROM StuDetail WHERE StuDetaild = 1234 AND 1=1,這回導(dǎo)致一個(gè)正常的

22、返回頁(yè)面,SELECT StuDetail FROM StuDetail WHERE StuDetaild = 1234 AND 1=2二這可能會(huì)導(dǎo)致一個(gè)出錯(cuò)的頁(yè)面,上述注入能夠?qū)θ缦掠^(guān)點(diǎn)進(jìn)行闡述:盲目的SQL注入存在并不非沒(méi)有希望,它能夠讓攻擊更加易于出現(xiàn)。2.36 條件性差錯(cuò)攻擊人員按照其他表里的信息能夠?qū)δ硞€(gè)語(yǔ)句的真假進(jìn)行檢驗(yàn),攻擊者能夠借助不一樣的情景來(lái)進(jìn)行相應(yīng),如此得到他們想要的結(jié)果,然后根據(jù)結(jié)果進(jìn)行下一步的注入操作。通過(guò)構(gòu)造邏輯錯(cuò)誤來(lái)判斷應(yīng)用程序是否具有注入點(diǎn),攻擊者使用SQL語(yǔ)句構(gòu)造邏輯錯(cuò)誤,如果數(shù)據(jù)庫(kù)顯示具體錯(cuò)誤,那么可能就會(huì)泄露數(shù)據(jù)庫(kù)相關(guān)信息,攻擊者可以根據(jù)數(shù)據(jù)庫(kù)反饋的錯(cuò)誤,

23、進(jìn)一步測(cè)試獲得數(shù)據(jù)庫(kù)類(lèi)型表明等敏感信息,進(jìn)而獲取數(shù)據(jù)庫(kù)權(quán)限。2.37 時(shí)間延誤對(duì)于時(shí)間延誤而言,它屬于SQL注入,但是它不存在很大的科學(xué)性,較為盲目,按照所注入的邏輯,它能夠使得SQL完成某個(gè)關(guān)于時(shí)間的延誤語(yǔ)句,也能夠完成某個(gè)長(zhǎng)隊(duì)列。攻擊人員能夠?qū)?yè)面加載所需要耗費(fèi)的時(shí)間進(jìn)行衡量,如此來(lái)判定注入的語(yǔ)句是正確的還是錯(cuò)誤的。2.4 SQL注入實(shí)現(xiàn)過(guò)程詳細(xì)分析手工注入: 先判斷是否存在SQL注入 一般用and 1=1 and 1=2或者or 1=1 和or1=2以正常圖 1出錯(cuò)圖 2通過(guò)圖1和圖2的對(duì)比可知該點(diǎn)存在SQL注入知道存在注入后我們需要猜測(cè)字段使用order by n/*圖 3圖 4通過(guò)對(duì)

24、比圖3、4 我們可知有10個(gè)字段接下來(lái)我們查看基本信息: system_user() 系統(tǒng)用戶(hù)名user() 用戶(hù)名current_user 當(dāng)前用戶(hù)名 session_user()連接數(shù)據(jù)庫(kù)的用戶(hù)名database() 數(shù)據(jù)庫(kù)名version() MYSQL數(shù)據(jù)庫(kù)版本load_file() MYSQL讀取本地文件的函數(shù)datadir 讀取數(shù)據(jù)庫(kù)路徑basedir MYSQL 安裝路徑version_compile_os 操作系統(tǒng)圖 5圖5就是我們查看數(shù)據(jù)庫(kù)名的情況。接下來(lái)查看表名圖 6如圖6所示我們已經(jīng)查詢(xún)到了sq_sydata中表名情況圖 7如上圖圖7所示,我們已經(jīng)查詢(xún)到了sy_admin

25、表中所含有的字段圖 8如圖8很明顯,我們現(xiàn)在已經(jīng)查詢(xún)到了該表中LoginName Password 的信息了。工具注入(以SQLmap為例)圖 9圖 102.5本章小結(jié)本章重點(diǎn)闡述了SQL注入攻擊背景、原理、手段特點(diǎn)及危害,對(duì)于SQL注入而言,它一般的攻擊種類(lèi)包括:不存在正確以及科學(xué)的過(guò)濾轉(zhuǎn)義字符等;通過(guò)本章的詳細(xì)介紹,大家了解到SQL注入攻擊具有存在面廣、技術(shù)難度低、危害性大等特點(diǎn)。同時(shí)也可以感受到對(duì)SQL注入研究的重要性。本章還在最后展示SQL注入攻擊的實(shí)際操作為接下來(lái)的防范奠定了一定的理論和實(shí)踐基礎(chǔ)。第三章 SQL注入攻擊防范概述3.1 SQL注入攻擊防御手段3.11針對(duì)注入攻擊的檢測(cè)方

26、法3.111基于特殊、敏感字符的檢測(cè),它包含許多關(guān)鍵字匹配算法,是基于特征關(guān)鍵字匹配檢測(cè)技術(shù),關(guān)鍵內(nèi)容為在開(kāi)展SQL語(yǔ)句檢測(cè)的時(shí)候,能夠把select等一些不常見(jiàn)的關(guān)鍵字以及特殊字符進(jìn)行提取,不過(guò)如果希望能夠?qū)ι鲜鰞?nèi)容進(jìn)行檢測(cè)的先決條件為SQL語(yǔ)句中的字符必須與檢測(cè)中心的字符編碼一致,攻擊者也可以嘗試其他編碼方式繞過(guò)關(guān)鍵字匹配系統(tǒng)。另外可能由于匹配系統(tǒng)關(guān)鍵字局限,可能會(huì)存在誤報(bào)或漏報(bào)現(xiàn)象,需要后期不斷完善豐富系統(tǒng)中的關(guān)鍵字編碼。3.12 SQL注入攻擊防御措施3.121 檢查變量數(shù)據(jù)類(lèi)型和格式當(dāng)SQL語(yǔ)句是類(lèi)似where id=$id此種類(lèi)型的形式,全部數(shù)據(jù)庫(kù)的id都是通過(guò)數(shù)字構(gòu)成的,需要在S

27、QL得到落實(shí)或者執(zhí)行前,對(duì)變量id進(jìn)行評(píng)判,明確其是否屬于int類(lèi)型;假如為接受郵箱,就需要對(duì)其進(jìn)行更加細(xì)致的評(píng)判,要保證它屬于郵箱的格式,這個(gè)道理可以適用于其他的種類(lèi),包括時(shí)間等。歸納而言:如果具備了固定的變量,并且存在一樣的格式,那么就需要依據(jù)固定格式來(lái)展開(kāi)評(píng)判,保證它跟我們?cè)O(shè)定的格式是一致的,如此能夠較好地防止SQL注入,從而遭受攻擊。3.122 過(guò)濾或轉(zhuǎn)義危險(xiǎn)字符嚴(yán)禁信任用戶(hù)端的變量輸入,如果某些變量不存在統(tǒng)一的格式變量,那么就應(yīng)該借助一些特殊字符來(lái)開(kāi)展不可或缺的過(guò)濾轉(zhuǎn)義。可根據(jù)自身情況編寫(xiě)代碼過(guò)濾或轉(zhuǎn)義掉危險(xiǎn)字符,如下面的代碼public static boolean SQL_inj

28、(String str) String inj_str = "'|and|exec|insert|select|delete|update| count|*|%|chr|mid|master|truncate|char|declare|;|or|-|+|," String inj_stra = split(inj_str,"|"); for (int i=0 ; i < inj_stra.length ; i+ ) if (str.indexOf(inj_strai)>=0) return true; 3.123 使用

29、參數(shù)化的過(guò)濾性語(yǔ)句應(yīng)用開(kāi)發(fā)者和數(shù)據(jù)庫(kù)設(shè)計(jì)者在撰寫(xiě)語(yǔ)句的時(shí)候,對(duì)于傳遞進(jìn)來(lái)的參數(shù)不應(yīng)該直接放在語(yǔ)句中,不應(yīng)該使用語(yǔ)句拼接,而是應(yīng)該盡最大可能地使用參數(shù)來(lái)傳遞系統(tǒng)變量。這樣就能夠有效地防止攻擊者進(jìn)行注入攻擊,例如在中使用,而不是來(lái)執(zhí)行語(yǔ)句。即用戶(hù)輸入的所有內(nèi)容都不允許非間接地在SQL語(yǔ)句里進(jìn)行應(yīng)用或者嵌入,一定要就用戶(hù)實(shí)際輸入的內(nèi)容展開(kāi)高效的過(guò)濾,也能夠借助SQL語(yǔ)句來(lái)形成數(shù)據(jù)庫(kù)最終執(zhí)行的命令。程序編寫(xiě)者在進(jìn)行數(shù)據(jù)庫(kù)操作的時(shí)候應(yīng)該采用參數(shù)化查詢(xún)語(yǔ)句。一般的所需的字段采用參數(shù)化傳遞方式,可以有效地防止攻擊者利用單引號(hào)和連字符等特殊符號(hào)來(lái)實(shí)施注入攻擊3.124 IIS服務(wù)器腳本錯(cuò)誤消息的設(shè)置攻擊者進(jìn)行

30、SQL注入時(shí)會(huì)嘗試構(gòu)造一些含有語(yǔ)法錯(cuò)誤或邏輯錯(cuò)誤的SQL語(yǔ)句,當(dāng)數(shù)據(jù)庫(kù)執(zhí)行這些語(yǔ)句時(shí)會(huì)報(bào)錯(cuò),根據(jù)服務(wù)器返回的提示信息來(lái)判斷,并一步一步地進(jìn)行攻擊的。例如提示類(lèi)型錯(cuò)誤、不存在該表等報(bào)錯(cuò)信息,攻擊者會(huì)利用這些報(bào)錯(cuò)信息。在服務(wù)器端吧應(yīng)用程序配置中吧腳本錯(cuò)誤信息向客戶(hù)端發(fā)送文本錯(cuò)誤信息。讓攻擊者無(wú)法獲取到詳細(xì)的錯(cuò)誤消息,增加攻擊者摸索探測(cè)的難度。總之一句話(huà)不要隨意開(kāi)啟生產(chǎn)環(huán)境中Webserver的錯(cuò)誤顯示。3.125 數(shù)據(jù)庫(kù)信息加密安全以前國(guó)內(nèi)很多網(wǎng)站,包括一些很具人氣的大型網(wǎng)站采用的都是明文密碼,但近些年一些重大的泄密事件讓我們意識(shí)到了對(duì)數(shù)據(jù)庫(kù)重要數(shù)據(jù)加密的重要性,尤其是對(duì)密碼等重要數(shù)據(jù)進(jìn)行加密是防止信息泄露的重要方法,其中最常使用的加密方法就是MD5加密,其不可反向解密的特性大大提高了信息安全的級(jí)別性。嚴(yán)格加密處理用戶(hù)的機(jī)密信息。3.126 數(shù)據(jù)庫(kù)用戶(hù)權(quán)限的設(shè)置不給數(shù)據(jù)庫(kù)里的web應(yīng)用功能提供過(guò)多的權(quán)限,而是僅僅應(yīng)該提供最低權(quán)限,前期是其不用對(duì)一些表進(jìn)行方位,如此明確它不具備對(duì)上述表進(jìn)行訪(fǎng)問(wèn)的權(quán)限。假如在web應(yīng)用里,僅僅依靠只讀權(quán)限,就能夠借助account payables表來(lái)構(gòu)建其他的報(bào)表,因此要明確你不允許它能夠?qū)υ摫黹_(kāi)展的 insert/

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論