前言
在平常的一些众测项目中,遇到的数据库大部分可以分为3种:Mysql、Mssql(sqlserver)、Oracle。无论是在绕WAF还是读取数据库相关信息时,都需要判断当前的数据库类型,当注入为盲注时,就不能简单的通过报错信息判断当前数据库类型,所以这里简单介绍一下黑盒该如何快速判断数据库类型。
判断手法
数据库中经常会用到and、or这类逻辑判断符,Mysql中就有对这类逻辑处理的平替符号。分别是:&&、||
select * from user where id=1 and name='a'; ———— select * from user where id=1 && name ='a'
select * from user where id=1 or name='a'; ———— select * from user where id=1 || name ='a'
在sqlserver中不支持&&和||这两个逻辑运算符,所以会直接提示报错
select * from user where id=1 && name ='a' ————Line 15,Incorrect syntax near '&'.
oracle中是支持&&和||的,但是他们的用途并不是替代and和or,||是作为concat连接字符串用的一个符号
而&&则是作为一个变量引用符,在SQL的命令行可以用DEFINE去定义后调用,例如:
DEFINE var_name = 10;
SELECT * FROM your_table WHERE id = &&var_name;
这种模式在其他一些客户端调用是不支持的,只有在SQL*Plus这种类似的客户端才支持。
结论
通过上面三种判断手法,可以知道直接通过||就可以判断当前使用的数据库了,不需要用到函数也可以直接判断。
- 当||在使用过程中作为逻辑运算符进行解析的话,那么就是mysql数据库
- 当回显不对或报错时则为sqlserver
- 如果被解析为连接符,把两个字符连接成字符串则为oracle