SQL注入:报错注入
SQL注入系列文章:
初识SQL注入-CSDN博客
SQL注入:联合查询的三个绕过技巧-CSDN博客
目录
什么是报错注入?
报错注入常用的3个函数
UpdateXML
ExtractValue
Floor
rand(随机数)
floor(向上取整)
count(统计)
group by(分组)
前面两篇和大家分享了SQL注入的基本知识和用法,还有联合查询的三个常用技巧。
那么在本篇中,我会和大家通过复习+练习的形式一起学习一下SQL注入中的报错注入,那么花不多少,我们开始ヾ(◍°∇°◍)ノ゙
什么是报错注入?
在SQL注入的过程中,如果网站的web服务器开启了错误回显,则会被攻击者提供极大的便利
比如说我们可以在sqli-labs的第一关中,闭合'但是不注释后面的其他数据,则前端页面就会直接报错且将报错信息直接展现在页面中

还有就是部分数据库执行出错时hiatus将参数内容添加到错误信息中,如UpdateXML、ExtractValue等函数的第二个参数必须是Xpath格式,当其格式非法时,错误信息中会包含参数的内容,这样我们就可以将需要获取的信息从错误信息中显示出来
报错注入常用的3个函数
- extractvalue
- updatexml
- floor
那么下面就分别使用这三个函数来演示一下SQL的报错注入
UpdateXML
根据Mysql官网的介绍,UpdateXML和ExtractValue这两个都是XML函数,具体的描述如下:
| 姓名 | 描述 |
|---|---|
| ExtractValue() | 使用 XPath 表示法从 XML 字符串中提取值 |
| UpdateXML() | 返回替换的 XML 片段 |
错误处理。 对于ExtractValue()和 UpdateXML(),使用的 XPath 定位器必须有效,并且要搜索的 XML 必须包含正确嵌套和闭合的元素。如果定位器无效,则会生成错误
传参格式:UpdateXML(xml_target, xpath_expr, new_xml)
xml_target此函数用新的 XML 片段 替换给定 XML 标记片段的单个部分new_xml,然后返回更改后的 XML。被替换的部分 xml_target匹配用户提供的 XPath 表达式xpath_expr 。
这里不需要懂得它的每个参数的具体含义,只需要知道它需要传入三个参数参数即可
从上面的介绍可以看出,UpdateXML函数的xpath,也就是第二个参数,必须要符合规范,否则就会报错,那么就可以利用这一点来进行报错注入:
我们来在sqli-labs的第一关尝试一下
payload:
?id=1%27 and updatexml(1,concat(0x7e,(select user()),0x7e),1) --+
从报错信息中可以看到显示XPATH的语法错误了,然后后面就是我们注入出的数据库额度用户名
这里我们能够注入成功的原因就是将updatexml的第二个参数传入了一个不符合规范的值,因此就会产生报错,然后我们利用报错,来注入出了用户名
然后我们就可以利用这样的方式再注入出数据库名
有了数据库名称,我们就可以利用information_schema数据库来依次注入出表名,列名,最后注入出具体的数据
ExtractValue
传参格式:ExtractValue(xml_frag, xpath_expr)
ExtractValue()采用两个字符串参数,一个 XML 标记片段 xml_frag和一个 XPath 表达式 xpath_expr(也称为 定位器);它返回CDATA第一个文本节点的文本 ( ),该文本节点是与 XPath 表达式匹配的一个或多个元素的子元素。
这里同样不需要懂得它的每个参数的具体含义,只需要知道它需要传入两个参数即可
从上面的介绍可以看出,ExtractValue函数的xpath,也就是第二个参数,必须要符合规范,否则就会报错,那么就可以利用这一点来进行报错注入:
这里还是在sqli-labs在第一关进行测试一下:
这里的payload就是与ExtractValue不同的就是少了一个参数,但也是在第二个参数中进行查询
?id=1' and extractvalue(1,concat(0x7e,(select user()),0x7e))--+
当然也可以通过同样的方式查询出数据库的名称:
后面的就不用再说了,直接注入其他数据即可
Floor
最后一个就是floor函数了
主要的利用语句是 select count(),(floor(rand(0)*2))x from table group by x,导致数据库报错,通过 concat 函数,连接注入语句与 floor(rand(0)*2)函数,实现将注入结果与报错信息回显的注入方式。
这里可以看到利用floor函数进行报错注入会使用几个别的关键字,这里先分别介绍一下:
rand(随机数)
rand() 可以产生一个在0和1之间的随机数。
我们可以在mysql中看一下:
可以看到rand()函数每次都会生成一个<1的随机小数
但是当我们给rand()函数传入一个参数后,那么它的值就会变成固定的了
floor(向上取整)
那么再来看看floor函数,floor() 函数的作用就是返回小于等于括号内该值的最大整数。
在mysql中简单使用一下:
从结果中可以看出,确实如定义的那样,取最小的整数,那么将它和rand()函数配合起来在数据库中使用会有什么效果呢?
可以看到结果全是0,如果换成floor(rand(0)*2)应该就是产生的数就是返回 0 到 2 之间的随机数,再配合 floor() 就可以产生确定的两个数了。也就是 0 和 1: 。试试看:
可以看到这样果然就变得有的只有0和1了
count(统计)
count函数的作用统计结果的记录数。
比如我们需要知道users表中一共有多少条记录,就可以使用count来统计一下
group by(分组)
那么再来看那可能group by,它就是mysql的一个用于分组的函数,直接举一个例子来演示一下:
现在基于password来进行一个分组:
可以看到一共有18条记录
几个函数都已经介绍完了,那么最后再来看一下我们的payload是怎么来的吧:
既然是报错注入,首先就需要先进行报错:![]()
这个报错的意思就是它说group_key的主键重复了
根据前面函数,这句话就是统计后面产生随机数的种类并计算每种数量。
分别产生0 1 1 0 1 1... ,这样0是7个,1是11个,但是最后却产生了报错。
下面分析一下报错的原因:
这个整合然后计数的过程中,中间发生了什么我们是必须要明白的。 首先mysql遇到该语句时会建立一个虚拟表。该虚拟表有两个字段,一个是分组的 key ,一个是计数值 count()。也就对应于实验中的 user_name 和 count()。
然后在查询数据的时候,首先查看该虚拟表中是否存在该分组,如果存在那么计数值加1,不存在则新建该分组。
然后mysql官方有给过提示,就是查询的时候如果使用rand()的话,该值会被计算多次,那这个"被计算多次"到底是什么意思,就是在使用group by的时候,floor(rand(0)*2)会被执行一次,如果虚表不存在记录,插入虚表的时候会再被执行一次,我们来看下floor(rand(0)2)报错的过程就知道了,从上面的函数使用中可以看到在一次多记录的查询过程中floor(rand(0)2)的值是定性的,为011011 (这个顺序很重要),报错实际上就是floor(rand(0)2)被计算多次导致的。
到此,三种常见的报错注入函数和报错注入就介绍和演示完毕了,后面的文章还会和大家分享更多的关于SQL注入的技巧和实验(^▽^)
相关文章:
SQL注入:报错注入
SQL注入系列文章:初识SQL注入-CSDN博客 SQL注入:联合查询的三个绕过技巧-CSDN博客 目录 什么是报错注入? 报错注入常用的3个函数 UpdateXML ExtractValue Floor rand(随机数) floor(向上取整&…...
K8s 安装部署-Master和Minion(Node)文档
K8s 安装部署-Master和Minion(Node)文档 操作系统版本:CentOS 7.4 Master :172.20.26.167 Minion-1:172.20.26.198 Minion-2:172.20.26.210(后增加节点) ETCD:172.20.27.218 先安装部署ETC…...
OpenAI 降低价格并修复拒绝工作的“懒惰”GPT-4,另外ChatGPT 新增了两个小功能
OpenAI降低了GPT-3.5 Turbo模型的API访问价格,输入和输出价格分别降低了50%和25%。这对于使用API进行文本密集型应用程序的用户来说是一个好消息。 OpenAI官网:OpenAI AIGC专区:aigc 教程专区:AI绘画,AI视频&#x…...
springboot+value静态属性获取配置文件中的值的操作方法
1.配置类需要让spring管理 2.set方法不要加static 3.如果静态属性是private修饰,则在使用的时候,需要 类名.getXXX方法 如果静态属性是public修饰,则在使用的时候,需要 类名.属性名 import org.springframework.beans.factory.an…...
Prometheus 架构全面解析
在本指南中,我们将详细介绍 Prometheus 架构。 Prometheus 是一个用 Golang 编写的开源监控和告警系统,能够收集和处理来自各种目标的指标。您还可以查询、查看、分析指标,并根据阈值收到警报。 此外,在当今世界,可观…...
把批量M3U8网络视频地址转为MP4视频
在数字媒体时代,视频格式的转换已成为一项常见的需求。尤其对于那些经常处理网络视频的用户来说,将M3U8格式的视频转换为更常见的MP4格式是一项必备技能。幸运的是,现在有了固乔剪辑助手这款强大的工具,这一过程变得异常简单。下面…...
联合 Maxlinear 迈凌 与 Elitestek 易灵思 - WPI 世平推出基于 FPGA 芯片的好用高效电源解决方案
近期 WPI 世平公司联合 Maxlinear 迈凌电源产品搭配 Elitestek 易灵思 FPGA 共同合作推出基于 FPGA 芯片的好用高效电源解决方案。 Elitestek 易灵思 FPGA 核心产品有 2 大系列 : Trion 系列与钛金系列。Trion 系列主要特点是 : 1. 40nm 工艺 2. 超低功耗 ( 可低至竞争对手的 …...
Keycloak - docker 运行 前端集成
Keycloak - docker 运行 & 前端集成 这里的记录主要是跟我们的项目相关的一些本地运行/测试,云端用的 keycloak 版本不一样,不过本地我能找到的最简单的配置是这样的 docker 配置 & 运行 keycloak keycloak 有官方(Red Hat Inc.)的镜像&#…...
架构篇27:如何设计计算高可用架构?
文章目录 主备主从集群小结计算高可用的主要设计目标是:当出现部分硬件损坏时,计算任务能够继续正常运行。因此计算高可用的本质是通过冗余来规避部分故障的风险,单台服务器是无论如何都达不到这个目标的。所以计算高可用的设计思想很简单:通过增加更多服务器来达到计算高可…...
Python 有用的库模块
简介 Python中有许多常用的库或者模块,在写代码的时候或多或少会遇到,本文对其进行总结,方便日后查阅。 pprint Python中的pprint模块是用于打印数据结构(如字典,列表等)的模块,提供了一种以…...
vivado DDS学习
实现DDS通常有两种方式,一种是读取ROM存放的正弦/余弦信号的查表法,另一种是用DDS IP核。这篇学习笔记中,我们要讲解说明的是VIVADO DDS IP核的应用。 目前本篇默认Phase Generator and SIN/COS LUT(DDS)的standard模式…...
微信小程序(十六)slot插槽
注释很详细,直接上代码 上一篇 温馨提醒:此篇需要自定义组件的基础,如果不清楚请先看上一篇 新增内容: 1.单个插槽 2.多个插槽 单个插糟 源码: myNav.wxml <view class"navigationBar custom-class">…...
gtest 单元测试
文章目录 前言一、Google Test介绍1.1 gtest源码下载编译1.2 常用API介绍1.3 gtest运行参数介绍 二、Google Mock参考资料 前言 Google Test(简称gtest)是一个开源的C单元测试框架。和常见的测试工具一样,gtest提供了单体测试常见的工具和组…...
掌握assert的使用:断言在错误检查和调试中不可或缺
断言在错误检查和调试中不可或缺 一、简介二、断言的基本语法和用法三、错误检查与断言四、 调试与断言五、避免滥用断言六、总结 一、简介 断言是一种在程序中用于检查特定条件是否满足的工具。一般用于验证开发者的假设,如果条件不成立,就会导致程序报…...
概念杂记--到底啥是啥?(数据库篇)
文章目录 1.聚集索引(clustered index)2.非聚集索引(Non-clustered index)3.聚集索引和非聚集索引区别?4.覆盖索引(covering index)5、复合索引 (Composite Index)6.索引…...
Ubuntu20.4 Mono C# gtk 编程习练笔记(四)
连续实时绘图 图看上去不是很清晰,KAZAM录屏AVI尺寸80MB, 转换成gif后10MB, 按CSDN对GIF要求,把它剪裁缩小压缩成了上面的GIF,图像质量大不如原屏AVI,但应该能说明原意:随机数据随时间绘制在 gtk 的 drawin…...
1 月 26日算法练习
文章目录 九宫幻方穿越雷区走迷宫 九宫幻方 小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个33的矩阵当中,使得每一行、每一列和每一条对角线的和都是相同的。 三阶幻方又被称…...
今日AI大热潮,明日智能风向标
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
03 SB实战 -微头条之首页门户模块(跳转某页面自动展示所有信息+根据hid查询文章全文并用乐观锁修改阅读量)
1.1 自动展示所有信息 需求描述: 进入新闻首页portal/findAllType, 自动返回所有栏目名称和id 接口描述 url地址:portal/findAllTypes 请求方式:get 请求参数:无 响应数据: 成功 {"code":"200","mes…...
Abaqus许可分析工具
在当今的知识产权保护和许可管理领域,一款高效、精准的许可分析工具对于企业来说至关重要。Abaqus许可分析工具凭借其强大的功能和卓越的性能,成为了企业优化知识产权许可管理的得力助手。 一、Abaqus许可分析工具的核心优势 1.全面性:Abaqus…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
