2、字符串型参数的判断 当输入的参数YY为字符串时,通常abc.asp中SQL语句原貌大致如下: select * from 表名 where 字段=’YY’,所以可以用以下步骤测试SQL注入是否存在。 ①HTTP://xxx.xxx.xxx/abc.asp?p=YY’(附加一个单引号),此时abc.ASP中的SQL语句变成了 select * from 表名 where 字段=YY’,abc.asp运行异常; ②HTTP://xxx.xxx.xxx/abc.asp?p=YY&nb ... 39;1’=’1’, abc.asp运行正常,而且与HTTP://xxx.xxx.xxx/abc.asp?p=YY运行结果相同; ③HTTP://xxx.xxx.xxx/abc.asp?p=YY&nb ... 39;1’=’2’, abc.asp运行异常; 如果以上三步全面满足,abc.asp中一定存在SQL注入漏洞。 3、特殊情况的处理 有时ASP程序员会在程序员过滤掉单引号等字符,以防止SQL注入。此时可以用以下几种方法试一试。 ①大小定混合法:由于VBS并不区分大小写,而程序员在过滤时通常要么全部过滤大写字符串,要么全部过滤小写字符串,而大小写混合往往会被忽视。如用SelecT代替select,SELECT等; ②UNICODE法:在IIS中,以UNICODE字符集实现国际化,我们完全可以IE中输入的字符串化成UNICODE字符串进行输入。如+ =%2B,空格=%20 等;URLEncode信息参见附件一; ③ASCII码法:可以把输入的部分或全部字符全部用ASCII码代替,如U=chr(85),a=chr(97)等,ASCII信息参见附件二; 二、区分数据库服务器类型 一般来说,ACCESS与SQL-SERVER是最常用的数据库服务器,尽管它们都支持T-SQL标准,但还有不同之处,而且不同的数据库有不同的攻击方法,必须要区别对待。 1、 利用数据库服务器的系统变量进行区分 SQL-SERVER有user,db_name()等系统变量,利用这些系统值不仅可以判断SQL-SERVER,而且还可以得到大量有用信息。如: ① HTTP://xxx.xxx.xxx/abc.asp?p=YY and user>0 不仅可以判断是否是SQL-SERVER,而还可以得到当前连接到数据库的用户名 ②HTTP://xxx.xxx.xxx/abc.asp?p=YY&n ... db_name()>0 不仅可以判断是否是SQL-SERVER,而还可以得到当前正在使用的数据库名; 2、利用系统表 ACCESS的系统表是msysobjects,且在WEB环境下没有访问权限,而SQL-SERVER的系统表是sysobjects,在WEB环境下有访问权限。对于以下两条语句: ①HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select count(*) from sysobjects)>0 ②HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select count(*) from msysobjects)>0 若数据库是SQL-SERVE,则第一条,abc.asp一定运行正常,第二条则异常;若是ACCESS则两条都会异常。 3、 MSSQL三个关键系统表 sysdatabases系统表:Microsoft SQL Server 上的每个数据库在表中占一行。最初安装 上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >> (中华企业文化网)
|