Mysql报错注入之floor报错详解
updatexml extractvalue
floor 是mysql的函数
groupby+rand+floor+count
一、简述
利用 select count(),(floor(rand(0)2))x from table group by x,导致数据库报错,通过 concat 函数,连接注入语句与 floor(rand(0)*2)函数,实现将注入结果与报错信息回显的注入方式。
基本的查询 select 不必多说,剩下的几个关键字有 count 、group by 、floor、rand。
二、关键函数说明
1.rand函数
rand() 可以产生一个在0和1之间的随机数。

可见,直接使用rand函数每次产生的数都不同,但是当提供了一个固定的随机数的种子0之后:

每次产生的值都是一样的。也可以称之为伪随机(产生的数据都是可预知的)。 查看多个数据看一下。(users是一个有6行数据的表)

这样第一次产生的随机数和第二次完全一样,也就是可以预测的。 利用的时候rand(0)*2为什么要乘以 2 呢?这就要配合 floor 函数来说了。
2.floor(rand(0)*2)函数
floor() 函数的作用就是返回小于等于括号内该值的最大整数。
而rand() 是返回 0 到 1 之间的随机数,那么floor(rand(0))产生的数就只是0,这样就不能实现报错的:

而rand产生的数乘 2 后自然是返回 0 到 2 之间的随机数,再配合 floor() 就可以产生确定的两个数了。也就是 0 和 1:

并且根据固定的随机数种子0,他每次产生的随机数列都是相同的0 1 1 0 1 1。
3.group by 函数
group by 主要用来对数据进行分组(相同的分为一组)。
还是按照下表进行实验

首先我们在查询的时候是可以使用as用其他的名字代替显示的:

但是在实际中可以缺省as直接查询,显示的结果是一样的:

然后就可以用group by函数进行分组,并按照x进行排序
注意:最后x这列中显示的每一类只有一次,前面的a的是第一次出现的id值

4.count(*)函数
count(*)统计结果的记录数。
这里与group by结合使用看一下:

这里就是对重复性的数据进行了整合,然后计数,后面的x就是每一类的数量。
5.综合使用产生报错:
select count(*),floor(rand(0)*2) x from users group by x;
0 1 1 0 1 1
0 2
1 4
![]()
根据前面函数,这句话就是统计后面产生随机数的种类并计算每种数量。
分别产生0 1 1 0 1 1 ,这样0是2个,1是4个,但是最后却产生了报错。
0 2
1 4
三、报错分析
这个整合然后计数的过程中,中间发生了什么我们是必须要明白的。 首先mysql遇到该语句时会建立一个虚拟表。该虚拟表有两个字段,一个是分组的 key ,一个是计数值 count()。也就对应于实验中的 user_name 和 count()。 然后在查询数据的时候,首先查看该虚拟表中是否存在该分组,如果存在那么计数值加1,不存在则新建该分组。
然后mysql官方有给过提示,就是查询的时候如果使用rand()的话,该值会被计算多次,那这个"被计算多次"到底是什么意思,就是在使用group by的时候,floor(rand(0)2)会被执行一次,如果虚表不存在记录,插入虚表的时候会再被执行一次,我们来看下floor(rand(0)2)报错的过程就知道了,从上面的函数使用中可以看到在一次多记录的查询过程中floor(rand(0)2)的值是定性的,为011011 (这个顺序很重要),报错实际上就是floor(rand(0)2)被计算多次导致的,我们还原一下具体的查询过程:
(1)查询前默认会建立空虚拟表如下图:

(2)取第一条记录,执行floor(rand(0)*2),发现结果为0(第一次计算), 0 1 1 0 1 1

(3)查询虚拟表,发现0的键值不存在,则插入新的键值的时候floor(rand(0)*2)会被再计算一次,结果为1(第二次计算),插入虚表,这时第一条记录查询完毕,如下图: 0 1 1 0 1 1
0 1 1 0 1 1 0
0 1 1

(4)查询第二条记录,再次计算floor(rand(0)*2),发现结果为1(第三次计算)

(5)查询虚表,发现1的键值存在,所以floor(rand(0)2)不会被计算第二次,直接count()加1,第二条记录查询完毕,结果如下:

(6)查询第三条记录,再次计算floor(rand(0)*2),发现结果为0(第4次计算)
0 1 1 0

(7)查询虚表,发现键值没有0,则数据库尝试插入一条新的数据,在插入数据时floor(rand(0)*2)被再次计算,1作为虚表的主键,其值为1(第5次计算),插入

然而1这个主键已经存在于虚拟表中,而新计算的值也为1(主键键值必须唯一),所以插入的时候就直接报错了。
0 1 1 0 1
四、总结
select count(*),concat(database(),floor(rand(0)*2))x from information_schema.tables group by x security1 security1 security1
整个查询过程floor(rand(0)*2)被计算了5次,查询原数据表3次,所以这就是为什么数据表中需要最少3条数据,使用该语句才会报错的原因。
另外,要注意加入随机数种子的问题,如果没加入随机数种子或者加入其他的数,那么floor(rand()2)产生的序列是不可测的,这样可能会出现正常插入的情况。最重要的是前面几条记录查询后不能让虚表存在0,1键值,如果存在了,那无论多少条记录,也都没办法报错,因为floor(rand()2)不会再被计算做为虚表的键值,这也就是为什么不加随机因子有时候会报错,有时候不会报错的原因。
比如下面用1作为随机数种子,就不会产生报错:


相关文章:
Mysql报错注入之floor报错详解
updatexml extractvalue floor 是mysql的函数 groupbyrandfloorcount 一、简述 利用 select count(),(floor(rand(0)2))x from table group by x,导致数据库报错,通过 concat 函数,连接注入语句与 floor(rand(0)*2)函数,实现将…...
EPS原理笔记
EPS UE(user equipment),移动用户设备 LTE(Long Term Evolution),无线接入网部分,E-UTRAN EPC(system Architecture Evolution、Evoloed Packet Core),核心网部分,主要包括MME、S-GW、P-GW、HSS,连接Intern…...
LeetCode 876. 链表的中间结点
题目描述: 给你单链表的头结点 head ,请你找出并返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 示例 1: 输入:head [1,2,3,4,5] 输出:[3,4,5] 解释:链表只有一个中间结点࿰…...
划界与分类的艺术:支持向量机(SVM)的深度解析
划界与分类的艺术:支持向量机(SVM)的深度解析 1. 引言 支持向量机(Support Vector Machine, SVM)是机器学习中的经典算法,以其强大的分类和回归能力在众多领域得到了广泛应用。SVM通过找到最优超平面来分…...
题目:100条经典C语言笔试题目(1-5)
题目: 1、请填写 bool , float, 指针变量 与“零值”比较的if 语句。 提示:这里“零值”可以是 0, 0.0 , FALSE 或者“空指针” 。例如 int 变量 n 与“零值”比较的 if 语句为: (1)请写出bool flag 与“零值”比较…...
python代码编写规范及注意事项
目录 1. 注意1.1 变量与常量解释:建议的修复: 1.2 Too many arguments 和 Too many local variables解决方案1. 减少参数数量2. 减少局部变量数量3. 调整 Pylint 配置 总结 1. 注意 1.1 变量与常量 解读下面的pylint问题 C0103: Constant name “file_p…...
【Linux】命令行参数 | 环境变量
🪐🪐🪐欢迎来到程序员餐厅💫💫💫 主厨:邪王真眼 主厨的主页:Chef‘s blog 所属专栏:青果大战linux 总有光环在陨落,总有新星在闪烁 前几天在搞硬件&…...
python 使用进程池并发执行 SQL 语句
这段代码使用了 Python 的 multiprocessing 模块来实现真正的并行处理,绕过 Python 的全局解释器锁(GIL)限制,从而在多核 CPU 上并发执行多个 SQL 语句。 from pyhive import hive import multiprocessing# 建立连接 conn hive.…...
我也谈AI
“随着人工智能技术的不断发展,我们已经看到了它在各行业带来的巨大变革。在医疗行业中,人工智能技术正在被应用于病例诊断、药物研发等方面,为医学研究和临床治疗提供了新的思路和方法;在企业中,人工智能技术可以通过…...
算法妙妙屋-------1.递归的深邃回响:二叉树的奇妙剪枝
大佬们好呀,这一次讲解的是二叉树的深度搜索,大佬们请阅 1.前言 ⼆叉树中的深搜(介绍) 深度优先遍历(DFS,全称为DepthFirstTraversal),是我们树或者图这样的数据结构中常⽤的⼀种…...
编写第一个 Appium 测试脚本:从安装到运行!
前言 最近接到一个测试项目,简单描述一下,需求就是:一端发送指令,另一端接受指令并处理指令。大概看了看有上百条指令,点点点岂不是废了,而且后期迭代,每次都需要点点点,想想就头大…...
mysql查表相关练习
作业要求: 单表练习: 1 . 查询出部门编号为 D2019060011 的所有员工 2 . 所有财务总监的姓名、编号和部门编号。 3 . 找出奖金高于工资的员工。 4 . 找出奖金高于工资 40% 的员工。 5 找出部门编号为 D2019090011 中所有财务总监,和…...
airtest+poco多脚本、多设备批处理运行测试用例自动生成测试报告
一:主要内容 框架功能、框架架构及测试报告效果 airtest安装、环境搭建 框架搭建、框架运行说明 框架源码 二:框架功能及测试报告效果 1. 框架功能: 该框架笔者用来作为公司的项目的前端自动化,支持pc和app,本文…...
Prometheus套装部署到K8S+Dashboard部署详解
1、添加helm源并更新 helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update2、创建namespace kubectl create namespace monitoring 3、安装Prometheus监控套装 helm install prometheus prometheus-community/prome…...
python使用pymysql
为了封装这个数据库操作为一个通用方法,我们可以创建一个函数,该函数接受数据库连接参数(如主机名、用户名、密码、数据库名)、SQL语句以及必要的参数(用于参数化查询)。下面是一个简单的封装示例ÿ…...
Vue3 + TypeScript 组件和文件命名规范及 setup 导入顺序规范
前言 在 Vue3 项目中,合理的文件命名规范和导入顺序不仅有助于提高代码的可读性,还能增强团队协作的效率。特别是在使用 TypeScript 和 Composition API 的项目中,清晰的组件和文件结构尤为重要。本文将详细介绍 Vue3 TypeScript 项目中的组…...
netty之处理连接源码分析
写在前面 在这篇文章看了netty服务是如何启动的,服务启动成功后,也就相当于是迎宾工作都已经准备好了,那么当客人来了怎么招待客人呢?也就是本文要看的处理连接的工作。 1:正文 先启动源码example模块的echoserver&a…...
Dockerfile文件编写
1、打nginx原始包 登录后复制 ROM nginxENV LANG zh_CN.UTF-8 ENV LC_ALL zh_CN.UTF-8 ENV TZ Asia/Singapore# 设置时区,同样保持在一层 RUN ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime && \echo "${TZ}" > /etc/timezoneRUN apt-get …...
Oracle SQL 使用 ROWNUM 分页查询速度太慢的问题及解决方案!
在使用 Oracle 数据库进行数据查询时,分页查询是一种常见的需求。传统上,开发者常常使用 ROWNUM 来实现分页功能。 然而,当数据量较大时,使用 ROWNUM 进行分页查询可能会导致性能问题。本文将深入探讨这一问题的原因,并提供多种解决方案,以提高分页查询的性能。 一、RO…...
Django3 + Vue.js 前后端分离书籍添加项目Web开发实战
文章目录 Django3后端项目创建切换数据库创建Django实战项目App新建Vue.js前端项目 Django3后端项目创建 创建Django项目,采用Pycharm或者命令行创建皆可。此处,以命令行方式作为演示,项目名为django_vue。 django-admin startproject djang…...
百川2-13B-4bits量化版模型蒸馏:为OpenClaw定制更小尺寸专用模型
百川2-13B-4bits量化版模型蒸馏:为OpenClaw定制更小尺寸专用模型 1. 为什么需要为OpenClaw定制专用模型 去年冬天,当我第一次尝试在树莓派上部署OpenClaw时,遇到了一个尴尬的问题——即使是最轻量级的开源模型,也会让这个小家伙…...
镜像视界|大模型+空间智能:公安视频系统迈入“目标持续掌控时代”——融合多视角三角测量、动态三维重构与行为认知引擎的无感定位体系
📘 镜像视界|大模型空间智能:公安视频系统迈入“目标持续掌控时代”——融合多视角三角测量、动态三维重构与行为认知引擎的无感定位体系一、时代转折:公安视频系统进入“大模型时代”近年来,以大模型为代表的新一代人…...
OpenClaw爆火!Token是什么?一文搞懂这个AI核心概念!
随着龙虾OpenClaw这几天的爆火,token也成了高频词。“养龙虾”并不是免费的,OpenClaw需要接入大模型,平时各种操作都要消耗token 最近网上还有一个很好笑的梗:用自己的脑子思考不会消耗token那么token究竟是什么?我在O…...
成本控制艺术:OpenClaw+Phi-3-vision-128k-instruct任务级计费方案
成本控制艺术:OpenClawPhi-3-vision-128k-instruct任务级计费方案 1. 当Token消耗成为拦路虎 上个月收到账单时,我的手指在鼠标滚轮上停滞了整整三秒——Phi-3-vision-128k-instruct的API调用费用比预期高出47%。这个数字让我意识到,在享受…...
效率革命:跳过java安装与配置,用快马平台秒级验证算法性能
效率革命:跳过Java安装与配置,用快马平台秒级验证算法性能 最近在优化一个数据处理模块时,我需要快速验证几种排序算法的性能差异。按照传统开发流程,至少要经历以下步骤: 下载并安装JDK,配置环境变量选择…...
大模型解决方案专家,火山方舟:用大模型赋能企业,成本、效果、落地难题一网打尽!
火山方舟作为大模型解决方案专家,依托豆包大模型家族及智能模型路由等技术,打造企业级服务平台。核心价值在于解决模型效果、推理成本、落地难度三大挑战。提供更强模型能力、更低成本推理、更易落地应用三大解决方案,助力企业高效落地AI应用…...
Radiant Player与Last.fm集成:如何实现无缝音乐记录
Radiant Player与Last.fm集成:如何实现无缝音乐记录 【免费下载链接】radiant-player-mac :notes: Turn Google Play Music into a separate, beautiful application that integrates with your Mac. 项目地址: https://gitcode.com/gh_mirrors/ra/radiant-player…...
yz-bijini-cosplay效果惊艳展示:高精度布料褶皱、金属反光、发丝细节呈现
yz-bijini-cosplay效果惊艳展示:高精度布料褶皱、金属反光、发丝细节呈现 基于通义千问Z-Image底座与yz-bijini-cosplay专属LoRA的RTX 4090专属Cosplay风格文生图系统,为Cosplay创作带来了革命性的突破。这个系统不仅支持LoRA动态无感切换和多训练步数版…...
新手避坑指南:51单片机驱动ADC0809的五个常见问题及解决方法(附Proteus调试技巧)
51单片机与ADC0809实战避坑手册:从仿真异常到显示优化的全流程解析 第一次在Proteus里搭建51单片机驱动ADC0809的仿真环境时,看着屏幕上跳动的乱码和永远为零的电压读数,我盯着电路图反复检查了三遍引脚连接——所有线序明明完全正确。这种挫…...
基于Verilog的74LS181 ALU设计与Quartus II实现
1. 从零开始理解74LS181 ALU 第一次接触数字逻辑设计时,看到74LS181这个编号可能会觉得头大。其实这就是个经典的4位算术逻辑单元(ALU)芯片,相当于CPU中的"计算器"。我在大学实验室第一次用它做加法运算时,那种"原来计算机是这…...
