高版本MySQL之UDF提权
字数 984 2025-08-29 08:32:02
MySQL UDF提权技术详解
一、UDF提权概述
UDF (User Defined Function)提权是利用MySQL自定义函数功能实现权限提升的技术。攻击者通过创建恶意UDF函数,可以执行系统命令,从而获取服务器权限。
二、环境准备与版本差异
1. MySQL版本特性差异
-
MySQL 5.5版本:
- my.ini中无
secure-file-priv参数 - 默认查询该参数为NULL(不允许导出)
- my.ini中无
-
MySQL 5.6版本:
- my.ini中无
secure-file-priv参数 - 默认查询该参数为空(允许任意位置导出)
- my.ini中无
-
MySQL 5.7版本:
- my.ini中包含
secure-file-priv参数 - 默认值为数据目录下的Upload文件夹
- 查询该参数显示为特定目录路径
- my.ini中包含
2. 关键参数:secure-file-priv
此参数控制MySQL的导出行为:
NULL:禁止导出操作- 空值:允许在任何目录导出
- 指定路径:仅允许在指定目录导出
修改方法:在my.ini中添加或修改:
secure-file-priv=
三、提权条件检测
执行以下查询判断当前环境是否适合UDF提权:
- 检查MySQL安装位置:
select @@basedir;
关键点:如果安装在C盘,可能因权限问题无法写入插件目录
- 检查导出权限设置:
show variables like '%secure%';
理想条件:结果为"空"且安装目录不在C盘
四、提权实施步骤
-
准备恶意UDF文件
- 通常为.dll文件(Windows)或.so文件(Linux)
- 包含执行系统命令的函数
-
导出UDF文件到插件目录
- 需要
secure-file-priv参数允许导出 - 需要目标目录有写入权限
- 需要
-
创建UDF函数
CREATE FUNCTION sys_exec RETURNS STRING SONAME 'udf.dll';
- 执行系统命令
SELECT sys_exec('whoami');
五、防御措施
-
安全配置建议:
- 设置
secure-file-priv为特定目录或NULL - 限制MySQL用户的文件系统权限
- 将MySQL安装在非系统分区
- 设置
-
权限控制:
- 避免使用root权限运行MySQL服务
- 限制插件目录的写入权限
-
监控措施:
- 监控异常UDF函数创建
- 审计插件目录的文件变化
六、实际测试注意事项
- 不同MySQL版本表现不同,需针对性测试
- Windows和Linux系统路径和权限机制差异
- 现代系统通常有更严格的默认配置
- 提权成功率取决于具体环境配置
通过以上技术细节,安全研究人员可以更好地理解MySQL UDF提权机制,同时帮助管理员加固MySQL服务器安全配置。