最近似乎和WMI有缘,总能碰到WMI的东西。于是看到WMI就想多挖掘一些知识,还好时间没有白费。
“漏洞”是什么不用多说,人人都清楚。这里是个人的简单想法与一些杂乱代码,欢迎讨论。
首先,这肯定不是mysql的问题,也不是什么提权0day。因为加载mof文件本身就是wmi服务的正常功能,而%systemroot%\system32\wbem\mof\ 默认只有administrators组与system组的完全控制权限,同时wbem也不是什么常见目录,因为管理员误操作造成的权限验证失效可能性非常低。这也就是说,能写这个目录必然是高权限。既然有了system/administrator,还需要提权么?显然,除了某些特殊情况外完全不需要。
这个手法其实可以看作是写启动菜单或是LPK,借助某些服务器应用程序(这个或许只能是服务?)文件权限限制不严格来造成写权限->执行权限的效果。Mysql只是躺中枪的一员,更常见的还要属FTP。另外,留后门也很不错,MOF文件加载完之后(会自动移动到good目录中)就可以删了,如果管理员不熟悉这种手法的话可能会直接崩溃掉(还可以加上自动启用账户、木马下载者等等功能,只要VBS+COM+WMI能做的都可以实现)。
关于加账户:其实根本不用net,JScript中的new ActiveXObject就是VBS/ASP中的CreateObject,之后直接用那两个加账户的VBS修改成JScript版直接替换ScriptText的内容即可(注意转义引号)。另外,MOF脚本支持VBScript(都是微软的东西自然支持),所以直接用VBS添加账户的脚本替换ScriptText的内容,同时将ScriptingEngine修改为VBScript也是可以正常执行的。
附件提供修改过的添加账户脚本,使用时请自行修改用户名和密码。
关于删除:如果MOF文件已经加载到系统中,那么单独删除MOF是不能卸载的。用停止服务并删除Repository目录比较麻烦,现在给出一个简单的方式:直接删除对应的事件过滤器、消费者与绑定实例(对应脚本中的三个instance代码块)。代码见附件,提供VBS版本与C#版本。
另外,直接通过wbemtest删除实例也是可以的。针对原始给出的MOF中的命名空间与实例名称,需要连接root\subscription命名空间,并删除以下三个实例:
\\.\ROOT\subscription:__FilterToConsumerBinding.Consumer="\\\\.\\root\\subscription:ActiveScriptEventConsumer.Name=\"consPCSV2\"",Filter="\\\\.\\root\\subscription:__EventFilter.Name=\"filtP2\""
\\.\ROOT\subscription:ActiveScriptEventConsumer.Name="consPCSV2"
\\.\ROOT\subscription:__EventFilter.Name="filtP2"
最后,MSDN WMI SDK:http://msdn.microsoft.com/en-us/library/aa394582.aspx,找了好久终于找到了,有兴趣的可以深究,看看有没有什么更好的方式。