WEB安全--SQL注入--floor报错注入

一、原理:

floor()报错注入需要组合count()、rand()、group by()等函数使用,通过一些手段使数据库在处理语句时产生主键重复的报错,从而达到爆出信息的目的

二、内容:

sql 复制代码
?id=-1' or 
(select 1 from (select count(*),concat(database(),floor(rand(0)*2))x 
from information_schema.tables group by x)y)--

2.1函数作用:

1、 "count(*)":统计查询到的不同类型的个数

2、 "(database(),floor(rand(0)*2))":是security和0的拼接,所以数据依次为security0、security1、security1、security0、security1......等

3、 "information_schema.tables":这个表可以替换为其他表(表中有数据即可),不过在我们注入的时候不知道当前数据库有什么表所以用它

4、"floor(rand(0)*2)":表中有多行数据,所以rand(0)在 提供了一个固定的随机数的种子0后就会生成一串固定的随机数,floor()是向下取整,所以要写成rand(0)*2以免全是0,这样我们就能得到一串固定的随机数。并且根据固定的随机数种子0,他每次产生的随机数列都是相同的0 1 1 0 1 1

5、"group by":将表中的数据按列名分组显示,相同的内容只显示最开始匹配的一个数据

2.2报错原因:

假如我们需要注入出数据库名security

floor(rand(0)*2)产生的随机数是0 1 1 0 1 1

"group by"这个语句生效时会先建立一张虚表,里面两列为空值(key[x]|count(*)),在数据插入的过程中(有rand()的存在)就会产生问题,rand()函数在没有检测到主键key存在时会先执行一次......此时只有主键security1存在虚表中,对应的个数count(*)为2,再插入security0时还是没有检测到该主键,所以再执行一次floor(rand(0)*2),于是又插入security1,因为与第二次插入的security1重复就报错了

key payload count(*)

security0

1 security1 1

security1 2

security0

1 security1 ---此时key['1']重复了,报错

三、注意:

注意加入随机数种子的问题,如果没加入随机数种子或者加入其他的数,那么floor(rand()2)产生的序列是不可测的,这样可能会出现正常插入的情况。最重要的是前面几条记录查询后不能让虚表存在0,1键值,如果存在了,那无论多少条记录,也都没办法报错,因为floor(rand()2)不会再被计算做为虚表的键值,这也就是为什么不加随机因子有时候会报错,有时候不会报错的原因。

相关推荐
Andya_net2 小时前
网络安全 | 深入理解SQL注入的原理和防范
sql·安全·web安全
成为你的宁宁2 小时前
【Redis 从入门到实战:详细讲解 Redis 安装配置、RDB/AOF 数据持久化方案、一主两从同步部署,深入剖析哨兵模式工作原理与哨兵模式高可用全攻略】
数据库·redis·缓存
云和数据.ChenGuang2 小时前
r=re.search(r‘data-original=“(.*?)“‘, line)指令解析
数据库·mysql·r语言
v***5653 小时前
使用bitnamiredis-sentinel部署Redis 哨兵模式
数据库·redis·sentinel
2501_941111823 小时前
使用Python进行网络设备自动配置
jvm·数据库·python
T***16074 小时前
免费的Web安全漏洞利用,Metasploit教程
安全·web安全
m***11904 小时前
MySQL官网驱动下载(jar包驱动和ODBC驱动)【详细教程】
数据库·mysql
武汉唯众智创4 小时前
职业院校网络安全靶场实训演练系统建设方案
网络·安全·web安全·网络安全·网络安全靶场实训演练系统·网络安全靶场实训·网络安全实训演练系统
盈创力和20074 小时前
北斗形变监测仪:高精度结构安全的“守护之眼”
安全·变形监测·地质灾害监测·北斗形变监测仪·楼宇变形监测·桥梁隧道公路变形监测·水利安全监测
奋进的电子工程师4 小时前
如何实现开源组件的安全与合规治理?
安全·开源·代码规范·设计规范·代码复审