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

基本原理

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

SQL说明函数

以pet数据表为例进行说明

rond():

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

count():

返回每个组的列行数。

如,返回test表的行数。

sql 复制代码
select count(*) from pet;

或者,返回pet表中性别分别为female和male的动物个数。

sql 复制代码
select count(*) from pet group by sex;

floor():

向下取整,得到整数。

sql 复制代码
floor(0.4)//结果为0
floor(0.99999)//结果为0
floor(1.0001)//结果为1

主键报错语句

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

sql 复制代码
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)为虚拟表的主键。

age sex

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

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

sql 复制代码
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(*)
1 1

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

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

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

floor(rand(0)*2)(主键,不显示) count(*)
1 2
1 1
产生报错结果:
相关推荐
杨云龙UP2 小时前
SQL Server2022部署:Windows Server 2016下安装、SSMS配置、备份还原与1433端口放通全流程_20260508
运维·服务器·数据库·sql·sqlserver·2022
m0_738120725 小时前
应急响应(重点)——记一次某公司流量应急溯源分析(附带下载链接)
服务器·前端·数据库·安全·web安全·网络安全
其实防守也摸鱼6 小时前
无线网络安全--实验 规避WLAN验证之发现隐藏的SSID
java·开发语言·网络·安全·web安全·智能路由器·无线网络安全
丑八怪大丑7 小时前
SQL数据类型
java·数据库·sql
2601_9549711312 小时前
没有SQL基础能学数据分析吗?先学什么更合适
数据库·sql·数据分析
旺仔Sec13 小时前
国光sqlsec_upload-labs靶场渗透测试通关解析教程总结
web安全·网络安全
PawSQL13 小时前
同一条SQL,单机秒回,分布式集群卡成PPT——问题究竟出在哪?
数据库·分布式·sql
金融小白数据分析之路13 小时前
go 查询 sql go-sqlite3 版本
sql·golang·sqlite
尚雷558014 小时前
oracle知识整理_锁及等待事件SQL_第二部分
数据库·sql·oracle·锁及等待事件
深邃-15 小时前
【Web安全】-云服务器与Docker(2):Docker镜像操作,Docker容器操作,Docker搭建漏洞靶场
linux·服务器·web安全·网络安全·docker