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注入的技巧和实验(^▽^)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/649844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型日报-20240126

「think step by step」还不够&#xff0c;让模型「think more steps」更有用 https://mp.weixin.qq.com/s/3mdDYQI0WYgIpctyK6q2PA 如今&#xff0c;大型语言模型&#xff08;LLM&#xff09;及其高级提示策略的出现&#xff0c;标志着对语言模型的研究取得了重大进展&#x…

JavaScript 生成器(Generator)、高级 iteration用法详解

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ 目录 ✨ 前言 ✨ 正文 一、生成器(Generator) 什么是生成器 生成器函数 nex…

Unity 代理模式(实例详解)

文章目录 实例1&#xff1a;资源加载代理&#xff08;Asset Loading Proxy&#xff09;实例2&#xff1a;网络请求代理&#xff08;Network Request Proxy&#xff09;实例3&#xff1a;性能优化代理&#xff08;Performance Optimization Proxy&#xff09;实例4&#xff1a;权…

Docker容器部署OpenCV,打造高效可移植的计算机视觉开发环境

推荐 海鲸AI-ChatGPT4.0国内站点&#xff1a;https://www.atalk-ai.com 前言 在计算机视觉领域&#xff0c;快速部署和测试算法是研究和开发的关键。OpenCV作为一个强大的开源计算机视觉库&#xff0c;广泛应用于各种图像处理和视频分析任务。然而&#xff0c;配置OpenCV环境可…

光纤接口类型

光纤接口 网络设备基础知识 文章目录 光纤接口前言一、光纤接口二、光纤接口的优缺点总结前言 不同的接口类型适用于不同的光纤传输系统和应用需求。在选择光纤设备时,需要根据实际需求和系统要求选择适当的光纤接口类型。 一、光纤接口

计算机基础之微处理器简介

微处理器 微处理器定义 微型计算机的CPU也被称为微处理器&#xff0c;是将运算器、控制器和高速缓存集成在一起的超大规模集成电路芯片&#xff0c;是计算机的核心部件。能完成取指令、执行指令&#xff0c;以及与外界存储器和逻辑部件交换信息等操作。 微处理器发展 CPU从…

[C++]使用纯opencv部署yolov8旋转框目标检测

【官方框架地址】 https://github.com/ultralytics/ultralytics 【算法介绍】 YOLOv8是一种先进的对象检测算法&#xff0c;它通过单个神经网络实现了快速的物体检测。其中&#xff0c;旋转框检测是YOLOv8的一项重要特性&#xff0c;它可以有效地检测出不同方向和角度的物体。…

安全小记-ngnix负载均衡

目录 一.配置ngnix环境二.nginx负载均衡 一.配置ngnix环境 本次实验使用的是centos7,首先默认yum源已经配置好&#xff0c;没有配置好的自行访问阿里云镜像站 https://developer.aliyun.com/mirror/ 接着进行安装工作 1.首先创建Nginx的目录并进入&#xff1a; mkdir /soft &…

【七、centos要停止维护了,我选择Almalinux】

搜索镜像 https://developer.aliyun.com/mirror/?serviceTypemirror&tag%E7%B3%BB%E7%BB%9F&keywordalmalinux dvd是有界面操作的&#xff0c;minimal是最小化只有命里行 镜像下载地址 安装和centos基本一样的&#xff0c;操作命令也是一样的&#xff0c;有需要我…

openlayers+vue实现缓冲区

文章目录 前言一、准备二、初始化地图1、创建一个地图容器2、引入必须的类库3、地图初始化4、给地图增加底图 三、创建缓冲区1、引入需要的工具类库2、绘制方法 四、完整代码总结 前言 缓冲区是地理空间目标的一种影响范围或服务范围,是对选中的一组或一类地图要素(点、线或面…

C++面试:散列表

目录 1. 散列表的基本概念 散列表的定义 散列函数 哈希冲突 2. 处理冲突的方法 链地址法&#xff08;Separate Chaining&#xff09; 开放地址法 再散列 3. 散列表的性能分析 1. 平均查找长度&#xff08;ASL&#xff09; 2. 负载因子&#xff08;Load Factor&#…

【Linux】-cp模型

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

IS-IS:04 DIS

IS-IS 协议只支持两种网络类型&#xff0c;即广播网络和点到点网络。与 OSPF 协议相同&#xff0c; IS-IS 协议在广播网络中会将网络视为一个伪节点 &#xff08; Pesudonde&#xff0c;简称 PSN&#xff09;&#xff0c;并选举出一台DIS &#xff08;Designated IS&#xff09…

ASP.NET Core 7 Web 使用Session

ASP.NET Core 好像不能像20年前那样直接使用Session函数&#xff0c;我使用如下方法 1、在NuGet安装以下2个包 2、在Program.cs注册 //注册Session builder.Services.AddSession(options > {options.IdleTimeout TimeSpan.FromMinutes(60);options.Cookie.HttpOnly fals…

CAN相关寄存器

1. CAN_ MCR&#xff1a;CAN主控制寄存器。主要负责CAN工作模式的配置。 CAN_BTR&#xff1a;位时序寄存器。用来设置分频/TBs1/TBs2/Tsw等参数&#xff0c;设置测试模式。 CAN_(T/R)IxR&#xff1a;标识符寄存器。存放&#xff08;待发送/接收)的报文ID、扩展ID、IDE位及RTR…

如何快速搭建实用的爬虫管理平台

目录 一、前言 二、选择合适的爬虫框架 三、搭建数据库 步骤1 步骤2 步骤3 四、搭建Web服务器 步骤1 步骤2 步骤3 步骤4 五、管理爬虫 六、总结 一、前言 爬虫是互联网数据采集的关键工具&#xff0c;但是随着数据量的增加和需求的多样化&#xff0c;手动运行和管…

SIFT图像特征表述

SIFT&#xff08;尺度不变特征变换&#xff09;是一种用于图像处理和计算机视觉领域的特征提取算法。其目的是检测和描述图像中的局部特征。SIFT特征对旋转、尺度缩放、亮度变化保持不变性&#xff0c;对视角变化、仿射变换、噪声也具有一定的稳健性。下面是SIFT特征提取的基本…

计算机网络体系架构认知--网络协议栈

文章目录 一.计算机网络分层架构各协议层和计算机系统的联系从整体上理解计算机网络通信计算机网络通信的本质 二.Mac地址,IP地址和进程端口号三.局域网通信与跨局域网通信局域网通信跨局域网通信全球互联的通信脉络 四.网络编程概述 一.计算机网络分层架构 实现计算机长距离网…

12.Golang中类的表示与封装

目录 概述类的表示代码结果 类的封装代码结果 结束 概述 Golang中类的表示与封装 类的表示 代码 注释掉的代码&#xff0c;并不能拿来当赋值或获取值来使用。 package mainimport "fmt"// 类大写则代表&#xff0c;可以被其它包使用 type Hero struct {// 属性方法大…

RHCE作业

1.写一个脚本&#xff0c;完成如下功能 传递一个参数给脚本&#xff0c;此参数为gzip、bzip2或者xz三者之一 (1) 如果参数1的值为gzip&#xff0c;则使用tar和gzip归档压缩/etc目录至/backups目录中&#xff0c;并命名为/backups/etc-20160613.tar.gz&#xff1b; (2) 如果参…