1. 找到注入点
判断方法
- 在地址后面加入
'
判断 ;and 1=1 ;and 1=1
进行测试
2.信息收集
判断数据库类型
常见的数据库
环境 | 数据库 |
---|---|
asp | Access/SQLServer |
php | mysql |
jsp | Oracle |
判断类型
- Access数据库
1.1 报错信息
在注入点上加入'
,返回错误信息中,如果是Microsoft JET Database Engine错误'80040e14'
的话,则说明网站所用的数据库是Access数据库。
1.2 逻辑差异
http://wwww.***.com?id=1 and (select count(*) from sysobjects)>0 //sysobjects 是SQL表 http://www.***.com/id=1 and (select count(*) from msysobjects)>0//msysobjects 是access
如果加sysobjects
和加msysobjects
的SQL语句后,网页显示都不正常,或者加msysobject
后的网页显示正常,则说明是ACCESS数据库。反之,则说明用的是SQLServer数据库。
1.3 对len()和chr()函数支持
如果目标数据库同时支持len()函数和chr()函数
,且不支持length()和char()函数
,则很可能是Access数据库。
支持length()和char()函数
的很可能是MYSQL数据库 - Mysql
3.1 对substring和substr的支持
在mssql中可以调用substring。oracle则只可调用substr
基于符号判断
/*
是MySQL中的注释符,返回错误说明该注入点不是MySQL,继续提交如下查询字符:
--
是Oracle和MSSQL支持的注释符,如果返回正常,则说明为这两种数据库类型之一。继续提交如下查询字符:
;
是子句查询标识符,Oracle不支持多行查询,因此如果返回错误,则说明很可能是Oracle数据库。
在注入点后加(必须为注入点);--
(一个分号,两个横线),例如:http://xxxx/article/as.asp?id=1;–。如果返回正常的话,说明数据库是MSSQL。在MSSQL数据库中;和–都是存在的,;用来分离两个语句,而–就是注释符,它后面语句都不执行。如果返回错误,基本可以肯定是ACCESS数据库了。
以上参数都是int的时候,如果是字符型的话首先在参数后面加上单引号,然后再在查询语句后加上;–
- 判断数据库版本:versions(); @@version
还没写的完,今天先到这。背会单词