mysql floor报错_mysql的floor()报错注入方法详细分析
刚开始学习sql注入,遇见了 select count(*) from table group by floor(rand(0)*2); 这么条语句。在此做个总结。
(更好的阅读体验可访问 这里 )
首先,只要该语句明白了,那么类似select count(*),(floor(rand(0)*2))x from table group by x;这样的变形语句基本上都可以变通(这里只是起了个别名)。
基本的查询 select 不必多说,剩下的几个关键字有 count 、group by 、floor、rand。
几个关键函数的说明
rand(0)*2
rand() 可以产生一个在0和1之间的随机数。
可见,每次产生的都不一样。当我们提供一个种子参数 0 后,再次查看:
可以发现,每次产生的值都是一样的。也可以称之为伪随机(产生的数据都是可预知的)。
查看多个数据看一下。( test 是我之前创建的一个拥有9条数据的表)
发现第一条数据与刚才查看的单个数据相符合,其它的数据也完全一样。
为什么要乘以 2 呢?这就要配合 floor 函数来说了。
floor(rand(0)*2)
floor() 返回小于等于该值的最大整数。
之前我们了解到,rand() 是返回 0 到 1 之间的随机数,那么乘 2 后自然是返回 0 到 2 之间的随机数,再配合 floor() 就可以产生确定的两个数了。也就是 0 和 1。
为什么需要这两个数呢?
group by 与 count(*)
group by 主要用来对数据进行分组(相同的分为一组),这里与count() 结合使用。举个例子就一目了然了。
可以观察到,这里对重复性数据进行了整合,然后计数。
重点来了,也就是在这个整合然后计数的过程中,中间发生了什么我们是必须要明白的。
经过网上查询,发现mysql遇到该语句时会建立一个虚拟表。该虚拟表有两个字段,一个是分组的 key ,一个是计数值 count(*)。也就对应于上个截图中的 prod_price 和 count(*)。
然后在查询数据的时候,首先查看该虚拟表中是否存在该分组,如果存在那么计数值加1,不存在则新建该分组。
报错分析
rand()的特殊性
select count(*) from test group by floor(rand(0)*2);
而又因为 rand 函数的特殊性(如果使用rand()的话,该值会被计算多次)。
在这里的意思就是,group by 进行分组时,floor(rand(0)*2)执行一次(查看分组是否存在),如果虚拟表中不存在该分组,那么在插入新分组的时候 floor(rand(0)*2) 就又计算了一次。(其实在上述 rand(0) 产生多个数据的时候,也能观察出来。只要 rand(0) 被调用,一定会产生新值)。
这样,所有的理论细节就全部明朗了。
报错
还记得我们之前产生的疑问,为什么要用 floor(rand(0)*2 产生 0 和 1 这两个数吗?
当 group by 对其进行分组的时候,首先遇到第一个值 0 ,发现 0 不存在,于是需要插入分组,就在这时,floor(rand(0)*2)再次被触发,生成第二个值 1 ,因此最终插入虚拟表的也就是第二个值 1;然后遇到第三个值 1 ,因为已经存在分组 1 了,就直接计数加1(这时1的计数变为2);遇到第四个值 0 的时候,发现 0 不存在,于是又需要插入新分组,然后floor(rand(0)*2)又被触发,生成第五个值 1 ,因此这时还是往虚拟表里插入分组 1 ,但是,分组 1 已经存在了!所以报错!
总结
可见,floor(rand(0)*2的作用就是产生预知的数字序列01101,然后再利用 rand() 的特殊性和group by的虚拟表,最终引起了报错。
内容来源于网络如有侵权请私信删除
mysql floor报错_mysql的floor()报错注入方法详细分析相关推荐
- mysql的count报错_mysql的floor()报错注入方法详细分析
刚开始学习sql注入,遇见了 select count(*) from table group by floor(rand(0)*2); 这么条语句.在此做个总结. (更好的阅读体验可访问 这里 ) ...
- mysql 自定义函数报错_Mysql自定义函数报错解决方法
[最近研究mysql数据库性能的相关问题,为了对比不同版本之间的差别.笔者找了一台测试服务器升级了该服务器的mysql数据库进行测试,在升级mysql过程中遇到了一些问题并将其 1.在MySql中创建 ...
- mysql 自定义函数报错_Mysql自定义函数报错解决方法 | 学步园
1.在MySql中创建自定义函数报错信息如下: ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READ ...
- mysql启动数据库进程_MySQL数据库启动报错的处理
今天在linux中启动mysql时提示mysql Starting MySQL.. The server quit without updating PID file了,下面我来给大家介绍解决办法 从 ...
- mysql打开慢查询_MySQL 开启慢查询日志的方法
1.1 简介 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能. 1.2 登录数据库查看 [root@localhost lib]# ...
- mysql ibd文件还原_MySQL单表ibd文件恢复方法详解
前言: 随着innodb的普及,innobackup也成为了主流备份方式.物理备份对于新建slave,全库恢复的需求都能从容应对. 但当面临单表数据误删,或者单表误drop的情况,如果使用物理全备进行 ...
- mysql floor 不准确_MYSQL的floor出现报错如何解决
MYSQL的floor出现报错如何解决 发布时间:2020-06-02 17:30:49 来源:51CTO 阅读:159 作者:三月 不知道大家之前对类似MYSQL的floor出现报错如何解决的文章有 ...
- mysql主从同步报错_mysql主从同步报错
主从不同步,经查看发现如下报错 Last_Errno: 1666 Last_Error: Error executing row event: 'Cannot execute statement: ...
- mysql max字符串报错_mysql [Warning] max_join_size报错问题解决办法
文章介绍了关于mysql [Warning] max_join_size报错问题解决办法,有需要的同学看看. 100716 06:32:45 d started 100716 6:32:45 [War ...
最新文章
- 贝叶斯网络/深度信念网络学习
- SpringBoot定义统一的controller返回格式
- java基础-迭代器(Iterator)与增强for循环
- cscope使用技巧
- 手电筒java_Java鼠标“手电筒”效果如何?
- 给具有SAP传统产品ABAP开发经验的朋友介绍SAP C4C
- opensll、libcurl库安装的使用,树莓派CSI摄像头的配置,树莓派调用智能API平台实现人脸识别、树莓派配置中文环境
- 关于选择排序的优化——同时找出最小值与最大值
- hihocoder216周:贪心或二分
- Tensorflow简单使用(一)
- vos对接ims光猫
- 格物致知诚意正心修身齐家治国平天下是什么意思【转载】
- JavaScript 打印星号三角形
- 多边形裁剪图片与自定义 Gizmo !Cocos Creator Gizmo!
- Lead-follower因子:新闻共现股票收益的关联性研究
- securecrt 远程映射端口
- 【深圳VS台湾】真正的无人驾驶还要等75年?在台湾已运行大半年(附台湾和深圳无人驾驶公交对比表)...
- 解决卷积神经网络测试集正确率低
- forge 服务器 优化,[FO]难以置信的优化 (Fabulously Optimized)
- 斑马线及让行的变迁与启示
热门文章
- python中使用zip函数基于两个列表数据list创建字典dict数据(Create a dictionary by passing the output of zip to dict)
- python使用matplotlib绘制一条正弦曲线(plot函数可视化sine plot)
- python使用matplotlib可视化条形图、使用barh函数可视化条形图(使用barh函数可视化多分类的并行条形图、side by side)
- R语言使用aov函数进行双因素方差分析(Two-way factorial ANOVA)、使用HH包中的interaction2wt函数为任何阶的双因素方差分析可视化主效应和交互作用图、箱图显示主效应
- python使用matplotlib可视化线图(line plot)、为可视化图像添加双Y轴、分别可视化不同范围的数据(double y axis in matplotlib)
- R语言构建logistic回归模型并评估模型:构建基于混淆矩阵计算分类评估指标的自定义函数、阳性样本比例(垃圾邮件比例)变化对应的分类器性能的变化、基于数据阳性样本比例选择合适的分类评估指标
- R删除数据列基于dplyr包
- R绘制排序的条形图(Ordered Bar Chart)
- Spark运行模式Local+Standalone+Yarn+mesos
- 链mysql_mysql 版本链机制 readView