报错注入(主键重复)攻击原理

news2024/12/23 5:48:25

基本原理

利用数据表中主键不能重复的特点,通过构造重复的主键,使得数据库报错,并将报错结果返回到前端。

SQL说明函数

以pet数据表为例进行说明
在这里插入图片描述

rond():

返回[0,1)区间内的任意浮点数。

count():

返回每个组的列行数。
如,返回test表的行数。

select count(*) from pet;

在这里插入图片描述
或者,返回pet表中性别分别为female和male的动物个数。

select count(*) from pet group by sex;

在这里插入图片描述

floor():

向下取整,得到整数。

floor(0.4)//结果为0
floor(0.99999)//结果为0
floor(1.0001)//结果为1

主键报错语句

通过构造下述语句,实现主键重复。

select count(*) from pet group by floor(rand(0)*2);

主键重复的原因:
1、首先,需要得知,floor(rand(0)*2)的计算结果。
在这里插入图片描述
这里可以看出,floor(rand(0)*2)的计算结果前五位分别为,0、1、1、0、1。记住这5位结果,后面会用到。

2、其次,需要知道,group by语句的计算过程。
group by语句在执行时,首先会在内存中建立一个空白虚拟表,并将select后面的字段名称作为主键。这个虚拟表的结构和最终输出结果的结构一样。比如,查询select age,sex from pet group by key;。产生的虚拟表结构如下。(age,sex)为虚拟表的主键。

agesex

在建立完成虚拟表后,根据SQL语句往虚拟表中填充数据。这里对于原pet表的每一行数据操作分为两步,第一步:依据group by语句后面的字段,获取这一行对应的字段值,并确认虚拟表中这个字段值是否发生重复。第二步:若发生重复,则将这一行与重复的行归为一组;若未发生重复,则再次获取group by后面的字段,将这一行对应的字段插入虚拟表。

3.最后,可以得到下述语句的执行过程。
这里,group by后面只是单纯的代表数字,不代表列。

select count(*) from pet group by floor(rand(0)*2);

①建立虚拟表pet_v

floor(rand(0)*2)(主键,不显示)count(*)

②第一次执行floor(rand(0)*2),得到结果0。依据当前行的结果,去虚拟表pet_v中查询是否发生主键重复。发现未产生重复,于是第二次执行floor(rand(0)*2)得到1,将当前结果插入虚拟表。

floor(rand(0)*2)(主键,不显示)count(*)
11

③第三次执行floor(rand(0)*2),得到结果1。去虚拟表pet_v中查询是否发生主键重复。发现产生重复,于是自增1。

floor(rand(0)*2)(主键,不显示)count(*)
12

④第四次执行floor(rand(0)*2),得到结果0。去虚拟表pet_v中查询是否发生主键重复。发现未产生重复,于是第五次执行floor(rand(0)*2)得到1,将当前结果插入虚拟表。这时,发生了主键重复,系统报错。

floor(rand(0)*2)(主键,不显示)count(*)
12
11
产生报错结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/850535.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电商API接口的作用,发展意义

电商API接口的作用是实现电商平台与第三方应用或系统之间的数据交互和功能调用。通过API接口,第三方开发者可以从电商平台获取商品信息、订单信息等数据,并进行相关操作,如创建订单、支付、物流查询、评价等。同时,电商平台也可以…

SpringBoot MDC全局链路解决方案

需求 在访问量较大的分布式系统中,时时刻刻在打印着巨量的日志,当我们需要排查问题时,需要从巨量的日志信息中找到本次排查内容的日志是相对复杂的,那么,如何才能使日志看起来逻辑清晰呢?如果每一次请求都…

Mybatis批处理、Mysql深分页

一、Mybatis批量操作 1、Foreach方式 会拼接成:insert into table (ID, PHONE,MESSAGE) values (?,?,?), (?,?,?), (?,?,?) 当数据过多时,可能生成的动态sql过大,mysql默认仅1M的sql字符串,过长可能会执行失败。 在sql循…

桌面端UI自动化测试如何让SplitButtonControl展开

原始SplitButtonControl图 从图中鼠标所指的控件属性为: ControlType(控件类型): SplitButtonControl ClassName(类名): SplitButton AutomationId(自动化ID): esri_geoprocessing_Pyt…

【ChatGLM】大模型之 ChatGLM 微调

目录 1. 微调方法 2. 全量参数微调 3. P-tuning v2 4. LoRA 1. 微调方法 全参数微调 对模型全量参数进行训练。 P-tunning v2 前缀微调,在模型每一层都增加前缀,只训练这部分的参数,训练量明显小于全量微调。 LoRA 基于矩阵分解的微调&…

记录线上一次mysql只能查询,不能插入或更新的bug

错误复现 突然有一天产品通知xx服务不可用,想着最近也没有服务更新,就先排查一下服务日志 使用postman测试的时候请求明显超时,查看日志显示是一个锁的问题 使用工具连接到mysql,查看information_schema.INNODB_TRX,发现有一个事…

flink+kafka+doris+springboot集成例子

目录 一、例子说明 1.1、概述 1.1、所需环境 1.2、执行流程 二、部署环境 2.1、中间件部署 2.1.1部署kakfa 2.1.1.1 上传解压kafka安装包 2.1.1.2 修改zookeeper.properties 2.1.1.3 修改server.properties 2.1.1.3 启动kafka 2.1.2、部署flink 2.1.2.1 上传解压f…

LabVIEW开发高压配电设备振动信号特征提取与模式识别

LabVIEW开发高压配电设备振动信号特征提取与模式识别 矿用高压配电设备是井下供电系统中的关键设备之一,肩负着井下供配电和供电安全的双重任务,其工作状态直接影响着井下供电系统的安全性和可靠性。机械故障占配电总故障的70%。因此,机械故…

论文浅尝 | 面向多步推理任务专业化较小语言模型

笔记整理:张沈昱,东南大学硕士,研究方向为自然语言处理 链接:https://github.com/FranxYao/FlanT5-CoT-Specialization 动机 本文的动机是探索如何在多步推理任务中通过大型语言模型提升较小的语言模型的性能。作者认为&#xff0…

hive 字段注释乱码

hive 字段注释乱码: 在mysql中运行: alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;OK

Nginx与docker配置安装

目录: Nginx的安装配置: 1、安装依赖包: 2、下载Nginx安装包: 3、解压Nginx压缩包: 4、配置Nginx编译环境: 5、编译并安装Nginx: 6、安装完Nginx后,可以切换到Nginx的安装目录…

对任意类型数都可以排序的函数:qsort函数

之前我们学习过冒泡排序&#xff1a; int main() {int arr[] { 9,7,8,6,5,4,3,2,1,0 };int sz sizeof(arr)/sizeof(arr[0]);int i 0;for (i 0; i < sz-1; i) {int j 0;for (j 0; j < sz-1-i; j) {if (arr[j] > arr[j 1]){int temp 0;temp arr[j];arr[j] ar…

中间件多版本冲突的4种解决方案和我们的选择

背景 在小小的公司里面&#xff0c;挖呀挖呀挖。最近又挖到坑里去了。一个稳定运行多年的应用&#xff0c;需要在里面支持多个版本的中间件客户端&#xff1b;而多个版本的客户端在一个应用里运行时会有同名类冲突的矛盾。在经过询问chatGPT&#xff0c;百度&#xff0c;googl…

深度补全算法-CompletionFormer-已开源效果最好

《CompletionFormer: Depth Completion with Convolutions and Vision Transformers 》 摘要 给定稀疏深度和相应的 RGB 图像&#xff0c;深度补全旨在整个图像中空间传播稀疏测量值&#xff0c;以获得密集的深度预测。尽管基于深度学习的深度补全方法取得了巨大进步&#xff0…

NAND Flash 失效之 Data Rentention | 闪存数据保持力 | 数据放几年就坏掉了?

依公知及经验整理,原创保护,禁止转载。专栏 《深入理解Flash:闪存特性与实践》 图1: Data Retention 对 Vt 电压分布影响 图片来源: 知乎 [2] 全文 1900 字, 内容摘要 Data Retention 产生 Data Retention 的影响因素  如何规避 Data Rention 问题 发生Data Retent…

Vue + VSCode + 浏览器显示乱码

浏览器乱码&#xff1a; 将GBK改为UTF-8: 欧克:

领航优配:沪指震荡涨0.47%,保险、券商板块强势,互联金融概念活跃

4日早盘&#xff0c;两市股指高开高走&#xff0c;沪指一度涨逾1%打破3300点&#xff0c;随后涨幅有所收窄&#xff1b;两市半日成交超6000亿元&#xff0c;北向资金小幅净流入。 截至午间收盘&#xff0c;沪指涨0.47%报3295.91点&#xff0c;深成指涨0.67%&#xff0c;创业板指…

CrossOver是什么软件 CrossOver软件好用吗

CrossOver是一款由CodeWeavers公司开发的软件&#xff0c;它可以在Mac和Linux等操作系统上运行Windows软件&#xff0c;而无需在计算机上安装Windows操作系统。这款软件的核心技术是Wine&#xff0c;它是一种在Linux和macOS等操作系统上运行Windows应用程序的开源软件。本文将会…

github pages 用法详解 发布自己的网站

github pages 基础用法 URL 规则 假设你的 github 帐号为 mygithub&#xff0c;需要发布的仓库名为 myrepo&#xff0c;那么 pages 的 URL 为&#xff1a; https://mygithub.github.io/myrepo 添加内容 用任意编辑器写好&#xff08;或者生成&#xff09;标准的网页内容&a…

【QT调用ST-link-使用QT编写程序-调用ST-LINK_CLI.exe-烧写STM32F4xxx-基础样例】

【QT结合ST-link&#xff0c;使用QT编写程序&#xff0c;调用ST-LINK_CLI.exe,烧写STM32F4xxx-基础样例】 1、前言2、实验环境3、先前了解-自我总结4、实验过程&#xff08;0&#xff09;硬件连接与供电&#xff08;1&#xff09;安装&使用STM32 ST-LINK Utility&#xff0…