01 网站类型与数据库的联系
asp:SQL Server,Access
.net :SQL Server
php:Mysql,PostgreSql
java:Oracle,Mysql
可以根据网站类型来大概确定后续测试数据库的优先级。
02 依据主机端口
如果可以对主机进行端口扫描,可以根据是否开启对应端口,来大概判断数据库类型。
Oracle
默认端口号:1521
SQL Server
默认端口号:1433
MySQL
默认端口号:3306
PostgreSql
默认端口号:5432
Access
Access数据库属于文件型数据库,所以不需要端口号。
03 数据库特有函数
len和length
在mssql和mysql中,返回长度值是调用len()函数;在oracle中则是通过length()来返回长度值。
@@version和version()
在mysql内,可以用@@version或是version()来返回当前的版本信息。version()>1 返回与@@version>1 相同页面时,则可能是mysql。如果出现提示version()错误时,则可能是mssql。
substring和substr
在mssql中可以调用substring。oracle则只可调用substr
其它:
04 根据注释符判断
“#”是MySQL中的注释符,返回错误说明该注入点可能不是MySQL,另外也支持’-- ',和/* */注释(注意mysql使用-- 时需要后面添加空格)
“null”和“%00”是Access支持的注释。
“--”是Oracle和MSSQL支持的注释符,如果返回正常,则说明为这两种数据库类型之一。
“;”是子句查询标识符,Oracle不支持多行查询,因此如果返回错误,则说明很可能是Oracle数据库。
05 根据其返回的错误类型
06 根据数据库特有表进行判断
1、mssql数据库
http://127.0.0.1/test.php?id=1 and (select count(*) from sysobjects)>0 and 1=1
2、access数据库
http://127.0.0.1/test.php?id=1 and (select count(*) from msysobjects)>0 and 1=1
3、mysql数据库(mysql版本在5.0以上)
http://127.0.0.1/test.php?id=1 and (select count(*) from information_schema.TABLES)>0 and 1=1
4、oracle数据库
http://127.0.0.1/test.php?id=1 and (select count(*) from sys.user_tables)>0 and 1=1