0x00 前言
WMI(Windows Management Instrumentation)是一种管理功能,提供了一个统一的环境来访问Windows系统组件,支持本地和远程访问。在之前的文章《WMI Attacks》、《WMI Backdoor》、《WMI Defense》和《Study Notes of WMI Persistence using wmic.exe》介绍过相关内容,本文将要在信息收集和横向移动的角度,分析wmic的常用方法,结合利用思路,给出防御建议。
0x01 简介
本文将要介绍以下内容:
wbemtest用法
通过wmic查询主机信息
通过wmic修改注册表
通过wmic执行程序
本地和远程访问WMI服务
0x02 wbemtest用法
参考资料:
https://docs.microsoft.com/en-us/mem/configmgr/develop/core/understand/introduction-to-wbemtest
Windows系统默认安装,可以用于连接WMI命名空间,访问WMI服务
借助wbemtest,我们可以获得WMI完整的功能细节和使用方法
界面如下图
点击Connect...,输入WMI命名空间root\cimv2,连接到root\cimv2后,可进入主页面,如下图
常用功能示例如下:
(1)Enum Classes…
枚举类,可以用来枚举所有的对象,查询每个类的定义
这里以查询Win32_Process对象为例:
依次选中Enum Classes... -> Recursive -> OK,选中Win32_Process,双击进入对象编辑器,如下图
Properities栏可以查看属性,例如这里有Handle,可以通过后文的Query...进行查询
Methods栏可以查看方法,例如这里有Create,可以通过后文的Execute Method...进行调用
(2)Query…
查询属性,需要输入WMI Query Language (WQL)
参考资料:
https://docs.microsoft.com/en-us/windows/win32/wmisdk/wql-sql-for-wmi
语法示例:
SELECT Handle FROM Win32_Process
查询结果如下图
这条查询语句换成wmic的命令如下:
wmic /namespace:"\\root\cimv2" PATH Win32_Process get Handle
(3)Execute Method…
调用方法,这里以调用Win32_Process对象的Create方法为例
设置Object Path为Win32_Process,点击OK
在弹出的界面设置设置Method为Create
点击Edit in Parameters...,在弹出的界面中依次选择CommandLine -> Edit Property
设置Valve为calc,如下图
点击Save Object -> Execute!,弹出计算器
以上操作换成wmic的完整命令如下:
wmic /namespace:"\\root\cimv2" PATH Win32_Process call create "calc"
简写命令如下:
wmic process call create "calc"
0x03 本地和远程访问WMI服务
1.查询主机名称
本地:
wmic /namespace:"\\root\cimv2" PATH Win32_ComputerSystem get Name
远程:
wmic /node:192.168.1.1 /user:"administrator" /password:"123456" /namespace:"\\root\cimv2" PATH Win32_ComputerSystem get Name
2.注册表操作
具体细节可参考《Study Notes of WMI Persistence using wmic.exe》
这里列出几个常用命令:
(1)获得当前用户的远程桌面连接历史记录
枚举注册表键值HKCU:\Software\Microsoft\Terminal Server Client\Servers,命令如下:
wmic /namespace:"\\root\cimv2" path stdregprov call EnumKey ^&h80000001,"Software\Microsoft\Terminal Server Client\Servers"
(2)远程查询和修改Restricted Admin Mode
关于Restricted Admin Mode的内容可参考《渗透技巧——Pass the Hash with Remote Desktop(Restricted Admin mode)》
远程查询和修改Restricted Admin Mode的C Sharp实现可参考:
https://github.com/GhostPack/RestrictedAdmin
https://github.com/airzero24/WMIReg
远程查询Restricted Admin Mode的wmic命令如下:
wmic /node:192.168.1.1 /user:"administrator" /password:"123456" /namespace:"\\root\cimv2" path stdregprov call GetDWORDValue ^&H80000002,"System\CurrentControlSet\Control\Lsa","DisableRestrictedAdmin"
远程开启Restricted Admin Mode的wmic命令如下:
wmic /node:192.168.1.1 /user:"administrator" /password:"123456" /namespace:"\\root\cimv2" path stdregprov call SetDWORDValue ^&H80000002,"System\CurrentControlSet\Control\Lsa","DisableRestrictedAdmin","0"
远程关闭Restricted Admin Mode的wmic命令如下:
wmic /node:192.168.1.1 /user:"administrator" /password:"123456" /namespace:"\\root\cimv2" path stdregprov call SetDWORDValue ^&H80000002,"System\CurrentControlSet\Control\Lsa","DisableRestrictedAdmin","1"
3.执行程序
本地:
wmic process call create "calc"
远程:
wmic /node:192.168.1.1 /user:"administrator" /password:"123456" process call create "calc"
4.进程操作
查询本地所有进程:
wmic /namespace:"\\root\cimv2" PATH Win32_Process get name,processid,commandline /FORMAT:list
查询远程主机所有进程:
wmic /node:192.168.1.1 /user:"administrator" /password:"123456" /namespace:"\\root\cimv2" PATH Win32_Process get name,processid,commandline /FORMAT:list
其他用法还可参考:https://docs.microsoft.com/en-us/archive/blogs/jhoward/wmic-samples
0x04 防御检测
需要注意的是,默认配置下WMI的日志记录很少,无法记录WMI的命令细节
WMI-Activity的Trace日志能够记录简单的日志,但也无法记录WMI的命令细节,开启方法如下:
打开Event Viewer,选择View -> Show Analytic and Debug Logs
依次选择Applications and Services Logs -> Microsoft -> Windows -> WMI-Activity -> Trace,点击Enable Log
使用wmic命令时,默认启动进程c:\windows\system32\wbem\wmic.exe,这里可以选择Sysmon记录进程创建的细节,查看CommandLine获得WMI的命令细节
详细日志细节可参考:https://jpcertcc.github.io/ToolAnalysisResultSheet/details/wmic.htm
也可以选择开源的数字取证工具Velociraptor,能够记录进程创建的细节,包括CommandLine
0x05 小结
本文介绍了wmic的相关基础知识,结合利用思路,给出防御建议。
如若转载,请注明原文地址