当前位置: 首页 > news >正文

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

一、原理:

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

二、内容:

?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)不会再被计算做为虚表的键值,这也就是为什么不加随机因子有时候会报错,有时候不会报错的原因。

http://www.dtcms.com/a/19344.html

相关文章:

  • 数据结构与算法-栈与队列的应用递归表达式求值
  • 当扩展屏显示【输入不支持】怎么解决?!
  • 当Ollama遇上划词翻译:我的Windows本地AI服务搭建日记
  • 一些常用的Yum源
  • 项目版本号生成
  • 嵌入式玩具--无人机字幕
  • 【C++】32.C++11​(4)
  • 了解module_driver宏
  • Flask中获取请求参数的一些方式总结
  • 什么是GraphQL?
  • Day45(补)【软考】2022年下半年软考软件设计师综合知识真题-计算机软件知识1
  • 电子制造企业数字化转型实战:基于Odoo构建MES平台的深度解决方案
  • DC-7靶机渗透测试全过程
  • 学习数据结构(10)栈和队列下+二叉树(堆)上
  • 机器学习实战(2):数据预处理——机器学习的第一步
  • C++效率掌握之STL库:string底层剖析
  • Zotero7 从下载到安装
  • K-均值(K-means)
  • LM Studio笔记
  • 使用 Vite + React 19 集成 Tailwind CSS 与 shadcn/ui 组件库完整指南
  • 日常知识点之遗留问题梳理(被问到用uml画设计模式)
  • Promise详解大全:介绍、九个方法使用和区别、返回值详解
  • 全面理解-c++11的引用折叠
  • PyQt6/PySide6 的 QPropertyAnimation 类
  • Golang GC 三色标记法
  • 多维度健康养生指南
  • 【计算机网络】网络层数据包(Packet)格式
  • 全方位养生指南:打造健康生活蓝图
  • vue-plugin-hiprint (vue2
  • 文本表示方法