

渗透基础——WMIC的使用
source link: https://3gstudent.github.io/%E6%B8%97%E9%80%8F%E5%9F%BA%E7%A1%80-WMIC%E7%9A%84%E4%BD%BF%E7%94%A8
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

渗透基础——WMIC的使用
15 Mar 2022
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的相关基础知识,结合利用思路,给出防御建议。
Recommend
-
45
-
64
之前一直说 NOSQL ,也看了不少文章对于未授权 NOSQL 的攻击案例,知道大致怎么用,但是自己一直没有尝试好好使用过,感觉对比 MYSQL 而言,我太轻视 NOSQL ,于是这次下定决心以 Redis 作为例子好好玩玩,特此记录备忘。 0X01...
-
23
渗透基础——Exchange用户邮箱中的隐藏文件夹 0x00 前言 对于Exchange用户邮箱,可通过设置文件夹属性创建隐藏文件夹,用户使用owa网页登录和使用Outlook均无法查看隐藏文件夹中的内容。 站在渗透测试的角度,我们...
-
6
0x00 前言 SSH是一种网络协议,用于计算机之间的加密登录,通常用于远程登录Linux系统。 在渗透测试中,通常需要考虑SSH的口令爆破和日志删除。 本文将要介绍一些渗透测试相关的基础内容,结合利用方法给出检测建议。 ...
-
21
渗透基础——利用Unicode编码混淆字符串 0x00 前言 在渗透测试中,通常会对关键代码(例如shellcode)进行混淆,以此来对抗静态检测和分析。 我最近看到了一个有趣的样本,使用Braille Patterns(盲文点字模型)对字符串进行混...
-
11
0x00 前言 在上篇文章《渗透基础——端口转发与代理》提到了使用go语...
-
27
0x00 前言 在渗透测试中,尤其是域渗透,常常会用到Windows系统的计划任务,一是用于远程启动程序,二是用于程序的自启动 那么,计划任务具体有哪些使用技巧呢?是否对权限有要求?一定需要管理员权限才能运行吗? 0x01 简介
-
10
利用wmic调用xsl文件的分析与利用 0x00 前言 Casey Smith@subTee在博客分享的一个技巧,使用wmic能够从本地或从URL调用XSL(可扩展样式表语言)脚本。这个发现很有用,不仅可以作为一种白名单绕过的方法,而且可以作为pay...
-
14
0x00 前言 最近学习了Matt Graeber@mattifestation分享的方法《WMI Persistence using wmic.exe》,让我对WMI的攻击技巧有了新的认识,本文将结合之前的研究心得,分享利用wmic的一些技巧。 参考资料: http:/...
-
12
0x00 前言 Autodiscover是Exchange的一个服务,用来简化客户端应用程序的配置流程。用户只需要输入自己的电子邮件地址和密码,就能够通过Autodiscover服务获取运行客户端应用程序所需的配置信息。 在渗透测试中,当我们获得了一个邮件用...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK