欢迎光临
我们一直在努力

注入技巧:使用内置函数快速确定数据库类型

从以往的经验来看,一些注入点可以被sqlmap成功扫描出来,但确识别不出数据库类型或识别为错误的数据库类型;如下图:

或是因为WAF拦截,或是因为过滤,我们不再去深究其原因;这个时候多半需要手工探测数据库类型并辅以小脚本来跑数据了。那么如何快速的确定数据库类型呢?一个最常用且高效的方法就是使用不同数据库所特有的内置函数。如:

id=1'?AND?SUBSTRING('ABC')='A'?and?'a'='a

如果条件成立,页面响应符合预期,那么我们便可以确定后端数据库类型一定不是Oracle,因为Oracle是没有SUBSTRING这个内置函数的。

诸如此类,我依次尝试了一些数据库的内置函数,并确定其在对应的数据库类型中是否可用;下面的列表列举了最常用的三种数据库类型:MySQL、MSSQL、ORACLE中一些函数是否被支持的情况。

(排除因同一数据库类型不同版本的而导致的函数支持不同的情况)测试使用的数据库对应版本为:

  • MySQL:?5.5.46-0ubuntu0.14.04.2
  • MSSQL: Microsoft SQL Server 2008 (RTM) – 10.0.1600.22 (X64)
  • ORACLE:?Oracle Database 11g Release 11.2.0.1.0 – 64bit Production

其中ORACLE的SELECT必须要跟上对应的FROM(SELECT xxx FROM DUAL),不再单独说明。测试的一些常用函数如下(“-”为不支持此函数):

函数名称执行语句不同数据库执行结果备注
MySQLSQL ServerOracle
SUBSTRINGSELECT ? SUBSTRING(‘ABC’,1,1)AA字符串截取函数
SUBSTRSELECT ? SUBSTR(‘ABC’,1,1)AA字符串截取函数
SUBSTRCSELECT ? SUBSTRC(‘ABC’,1,1)A字符串截取函数
MIDSELECT MID(‘ABC’,1,1)A字符串截取函数
ASCIISELECT ASCII(‘A’)656565字符转换为对应ASCII码
CHARSELECT CHAR(65)AAASCII码转换为对应字符
CHRSELECT CHR(65)AASCII码转换为对应字符
LOWERSELECT LOWER(‘ABC’)abcabcabc将字符串转换为小写
UPPERSELECT UPPER(‘abc’)ABCABCABC将字符串转换为大写
CHAR_LENGTHSELECT ? CHAR_LENGTH(‘ABC’)3计算字符串长度
LENGTHSELECT LENGTH(123)33计算字符串长度
LENSELECT LEN(123)3计算字符串长度
DATABASESELECT DATABASE()test返回当前数据库
DB_NAMESELECT DB_NAME()test返回当前数据库
USERSELECT USER()root@%返回当前用户
CURRENT_USERSELECT CURRENT_USERroot@%dbo返回当前用户
USERSELECT USERdboSYSTEM返回当前用户
LEFTSELECT LEFT(‘ABC’,1)AA返回字符串左边指定个数字符
PISELECT PI()3.1415933.141592653589793返回派值
REPLACESELECT ? REPLACE(‘ABC’,’A’,’X’)XBCXBCXBC字符串替换
MD5SELECT MD5(1)c4ca4238a0b923820dcc509a6f75849b返回字符串MD5值
HEXSELECT HEX(10)A返回数字16进制值
TO_CHARSELECT ? TO_CHAR(10,’XX’)A返回数字16进制值

使用内置函数快速确定数据库类型.xlsx

未经允许不得转载:杂术馆 » 注入技巧:使用内置函数快速确定数据库类型
分享到: 更多 (0)