WMI攻击-基础篇(一)
#WMI攻击-基础篇(一)
这篇文章是关于WMI攻击系列文章的第一部分,面向新手。如果对Powershell有一定了解会对阅读本文有所帮助,但这并不是必需的,我们直接上干货。
#1、概述
为什么是WMI?
WMI 是 Microsoft 的一组规范,是为了对 Windows 系统进行快速高效的管理。WMI 存在于所有可用的 Windows 操作系统版本中。正如你可能知道的那样,安全规则说“任何对管理有用的东西也很容易被攻击者滥用”。 WMI 确实可以做很多事情——从收集计算机状态和配置设置到运行应用程序和执行代码。
什么是WMI?
WMI 全称 Windows Management Instrumentation,它是 Microsoft对 CIM(通用信息模型)和 WBEM(基于 Web 的企业管理)的实现——这两者都是 DMTF(分布式管理任务组)标准。 WMI 为应用程序/脚本提供了一个统一的界面来管理计算机(可能是远程的和本地的)——包括。流程、服务等。
WMI架构
了解体系结构对于了解整个WMI生态系统的工作方式非常重要。下图描述了WMI体系结构的大概组成(源自 Graeber 在 BHUSA 15 的演讲):

主要组件有:
- Clients/Consumers: 与 WMI 类交互以查询数据、运行方法等的最终使用者。常见客户端有:wmic.exe, wbemtest.exe, winrm.exe, VBScript/JScript 和 ofc Powershell cmdlets。
- Query Languages:和 SQL 提供查询数据库的方法类似,WMI 也有用于查询 WMI 服务的 WQL(WMI 查询语言)/CQL。在管理远程机器方面,WBEM 标准开始发挥作用——其中包括 DCOM 和 WS-Man。 WQL 基本上是 WMI 的 SQL 语法,不区分大小写。一个简单的查询可能如下所示:
- select * from win32_bios
- 查询有关 BIOS 的信息
- Repositories:这些是我们之前讨论过的存储类的所有静态数据(定义)的数据库。存储库由定义结构、类、命名空间等的 MOF(托管对象格式)文件定义。数据库文件可以在 %WINDIR%\System32\Wbem\Repository 目录下找到。
- MOF Files:MOF 文件用于定义 WMI 命名空间、类、提供程序等。在 %WINDIR%\System32\Wbem 目录下可以找到它们,扩展名为 .mof。在本系列的后面部分,我们将了解如何编写自己的 MOF 文件来扩展 WMI 的功能集。
- Providers:可以在 WMI 提供程序的帮助下访问存储库中定义的任何内容。它们通常是 DLL 文件并与 MOF 文件相关联——如:cimwin32.dll、stdprov.dll 等,但是,它们也可以采用其他类型的形式(类、事件、事件消费者、方法等) 。提供程序对生态系统至关重要,因为它们监视来自特定定义对象的事件和数据。提供程序为托管对象和WMI之间架起一座桥梁。在下面的屏幕截图中,DLL 文件是相关 MOF 文件的提供程序:
- Managed Objects:这些是上下文中资源的别名,即托管对象可以是由WMI管理的服务、进程或操作系统。
- Namespaces:名称空间是类的逻辑划分,便于发现和使用。他们被分成3组和3中类型:
- system
- core
- extension
- 3种类型:
- abstract
- static
- dynamic
- 其中几个重要的命名空间:root\cimv2, root\default, root\security, root\subscription等。
- 以上这就是WMI的架构。接下来让我们学习一下如何在 Powershell 中使用 WMI
#2、在Powershell 中使用WMI
前面我们已经学习了理论部分,让我们实践一下。重要的是要记住,在 Powershell v2 之前,只有少数 cmdlet 可以与 WMI 交互。检查Powershell 版本并将版本更改为 2:

执行如下命令:
Get-Command -CommandType Cmdlet *wmi*

提示:命令的名称一目了然(我们稍后还会深入研究)。在任何时候,都可以使用 Powershell 的标准语法:help <command> 获取有关特定命令功能的更多信息。例如你可能想尝试 help Invoke-WmiMethod 来查看该命令的作用,这一点与 Linux 的manpages非常相似。
从 Powershell v3 开始,MS 引入了 CIM cmdlet,它利用 WS-MAN 和 CIM 标准来管理对象。访问 CIM cmdlet 在以下两个方面具有优势:
- 在WMI/DCOM本身被阻止运行的计算机中(可能是由于基于主机的防火墙规则?)但是,如果启用了WinRM/WS-MAN(Windows远程管理),我们仍然可以使用CIM来执行WMI的操作。
- CIM 本身是一个行业标准并且是跨平台实现的,这意味着它也可以用于非 Windows 设备。
- DCOM:DCOM是分布式组件对象模型(Distributed Component Object Model)的别名,是一种专有的Microsoft协议,用于联网计算机上的软件组件之间的通信。WMI使用分布式COM(DCOM)连接到远程计算机。但是,DCOM 对防火墙并不那么友好。
- WS-MAN:WS-MAN 或 WS-Management 是一种 DMTF 标准,它为系统提供了一种通用的方式来访问IT基础架构中的管理信息。另一方面,WS-MAN 使用 HTTP,因此对是防火墙友好的。
将 Powershell 版本更改回默认值后(在我的例子中是 Powershell v5)重新执行上面的操作:

正如上面所说,CIM cmdlet可以做WMI cmdlet所能做的一切。如果要在WMI cmdlet和CIM cmdlet之间映射功能,下面是这两种类型之间功能比较的表格:
| Use \ Types | WMI Cmdlets | CIM Cmdlets |
| 获取有关类的信息 | Get-WmiObject | Get-CimInstance |
| 调用方法 | Invoke-WmiMethod | Invoke-CimMethod |
| 订阅事件 | Register-WmiEvent | Register-CimIndicationEvent |
| 创建/更新类的实例 | Set-WmiInstance | Set-CimInstance |
| 删除类的实例 | Remove-WmiObject | Remove-CimInstance |
#3、使用 Powershell 运行 WMI 查询
现在我们已经知道了可供我们使用的不同cmdlet,我们可以尝试运行上面的示例WQL查询。我们已经知道Get-WmiObject可用于获取有关类的信息。因此,使用-query参数运行cmdlet:
Get-WmiObject -Query 'select * from win32_bios'

#4、总结
通过本篇文章的学习,相信你对WMI已经有所了解,这里面有很多专业名词,但理解它们是非常必要的,这有助于后续内容的学习。下次见。
#说明
本文由笔者在原文基础上编译,转载请注明出处。
原文地址:
https://0xinfection.github.io/posts/wmi-basics-part-1/
相关文章:
WMI攻击-基础篇(一)
#WMI攻击-基础篇(一) 这篇文章是关于WMI攻击系列文章的第一部分,面向新手。如果对Powershell有一定了解会对阅读本文有所帮助,但这并不是必需的,我们直接上干货。 #1、概述 为什么是WMI? WMI 是 Microso…...
使用Pygame创建一个简单的消消乐游戏
消消乐游戏是一种经典的益智游戏,玩家通过交换相邻的方块来形成三个或更多相同颜色的连续方块,从而消除它们。本文将介绍如何使用Python的Pygame库来创建一个简单的消消乐游戏。 准备工作 在开始之前,请确保已安装Pygame库。可以通过以下命…...
证明直纹面是可展曲面沿着直母线,曲面的切平面不变
目录 证明直纹面是可展曲面的当且仅当沿着直母线,曲面的切平面不变 证明直纹面是可展曲面的当且仅当沿着直母线,曲面的切平面不变 直纹面是可展曲面当且仅当沿着直母线,曲面的切平面不变. 证明:设直纹面 S S S的参数式为 r ( u …...
Chrome控制台 网站性能优化指标一览
打开chrome-》f12/右键查看元素-》NetWrok/网络 ctrlF5 刷新网页,可以看到从输入url到页面资源请求并加载网页,用于查看资源加载,接口请求,评估网页、网站性能等,如下图: request、stransferred、resour…...
Typora创建markdwon文件的基础语法
标题的创建 使用#空格xxx 可使xxx为标题,同时第一标题为#空格标题;第二标题为##空格标题2。以此类推最多可创建六个标题。 同时按住Ctrl1可创建第一标题,同时按住Ctrl2可创建第二标题,以此类推,最多可创建六个标题。也…...
《嵌入式硬件设计》
一、引言 嵌入式系统在现代科技中占据着至关重要的地位,广泛应用于消费电子、工业控制、汽车电子、医疗设备等众多领域。嵌入式硬件设计作为嵌入式系统开发的基础,直接决定了系统的性能、可靠性和成本。本文将深入探讨嵌入式硬件设计的各个方面ÿ…...
【AIGC】大模型面试高频考点-位置编码篇
【AIGC】大模型面试高频考点-位置编码篇 (一)手撕 绝对位置编码 算法(二)手撕 可学习位置编码 算法(三)手撕 相对位置编码 算法(四)手撕 Rope 算法(旋转位置编码…...
如何使用 SQL 语句创建一个 MySQL 数据库的表,以及对应的 XML 文件和 Mapper 文件
文章目录 1、SQL 脚本语句2、XML 文件3、Mapper 文件4、启动 ServiceInit 文件5、DataService 文件6、ComplianceDBConfig 配置文件 这个方式通常是放在项目代码中,使用配置在项目的启动时创建表格,SQL 语句放到一个 XML 文件中。在Spring 项目启动时&am…...
Unity性能优化---动态网格组合(二)
在上一篇中,组合的是同一个材质球的网格,如果其中有不一样的材质球会发生什么?如下图: 将场景中的一个物体替换为不同的材质球 运行之后,就变成了相同的材质。 要实现组合不同材质的网格步骤如下: 在父物体…...
JVM学习《垃圾回收算法和垃圾回收器》
目录 1.垃圾回收算法 1.1 标记-清除算法 1.2 复制算法 1.3 标记-整理算法 1.4 分代收集算法 2.垃圾回收器 2.1 熟悉一下垃圾回收的一些名词 2.2 垃圾回收器有哪些? 2.3 Serial收集器 2.4 Parallel Scavenge收集器 2.5 ParNew收集器 2.6 CMS收集器 1.垃圾…...
GPS模块/SATES-ST91Z8LR:电路搭建;直接用电脑的USB转串口进行通讯;模组上报定位数据转换地图识别的坐标手动查询地图位置
从事嵌入式单片机的工作算是符合我个人兴趣爱好的,当面对一个新的芯片我即想把芯片尽快搞懂完成项目赚钱,也想着能够把自己遇到的坑和注意事项记录下来,即方便自己后面查阅也可以分享给大家,这是一种冲动,但是这个或许并不是原厂希望的,尽管这样有可能会牺牲一些时间也有哪天原…...
什么是TCP的三次握手
TCP(传输控制协议)的三次握手是一个用于在两个网络通信的计算机之间建立连接的过程。这个过程确保了双方都有能力接收和发送数据,并且初始化双方的序列号。以下是三次握手的详细步骤: 第一次握手(SYN)&…...
《Clustering Propagation for Universal Medical Image Segmentation》CVPR2024
摘要 这篇论文介绍了S2VNet,这是一个用于医学图像分割的通用框架,它通过切片到体积的传播(Slice-to-Volume propagation)来统一自动(AMIS)和交互式(IMIS)医学图像分割任务。S2VNet利…...
Linux ifconfig ip 命令详解
简介 ifconfig 和 ip 命令用于配置和显示 Linux 上的网络接口。虽然 ifconfig 是传统工具,但现在已被弃用并被提供更多功能的 ip 命令取代。 ifconfig 安装 sudo apt install net-toolssudo yum install net-tools查看所有活动的网络接口 ifconfig启动/激活网络…...
Vue3 对于echarts使用 v-show,导致显示不全,宽度仅100px,无法重新渲染的问题
参考链接:解决Echarts图表使用v-show,显示不全,宽度仅100px的问题_echarts v-show图表不全-CSDN博客 Vue3 echarts v-show无法重新渲染的问题_v-show echarts不渲染-CSDN博客 原因不多赘述了,大概就是v-show 本身是结构已经存在,当数据发生…...
C++实现俄罗斯方块
俄罗斯方块 还记得俄罗斯方块吗?相信这是小时候我们每个人都喜欢玩的一个小游戏。顾名思义,俄罗斯方块自然是俄罗斯人发明的。这人叫阿列克谢帕基特诺夫。他设置这个游戏的规则是:由小方块组成的不同形状的板块陆续从屏幕上方落下来…...
鸿蒙分享:添加模块,修改app名称图标
新建公共模块common 在entry的oh-package.json5添加dependencies,引入common模块 "dependencies": {"common": "file:../common" } 修改app名称: common--src--resources--string.json 新增: {"name&q…...
扫描IP段内的使用的IP
扫描IP段内的使用的IP 方法一:命令行 命令行进入 for /L %i IN (1,1,254) DO ping -w 1 -n 1 192.168.3.%iarp -a方法二:python from scapy.all import ARP, Ether, srp import keyboarddef scan_network(ip_range):# 创建一个ARP请求包arp ARP(pds…...
【专题】虚拟存储器
前文提到的存储器管理方式有一个共同的特点,即它们都要求将一个作业全部装入内存后方能运行。 但有两种特殊情况: 有的作业很大,其所要求的内存空间超过了内存总容量,作业不能全部被装入内存,致使该作业无法运行&#…...
Python之爬虫入门--示例(2)
一、Requests库安装 可以使用命令提示符指令直接安装requests库使用 pip install requests 二、爬取JSON数据 (1)、点击网络 (2)、刷新网页 (3)、这里有一些数据类型,选择全部 (…...
AI系统的四层缓存架构
别再被“提示词缓存”“语义缓存”绕晕了,它们根本不是一回事 先上关系图:AI系统里的四层缓存 很多人把缓存当一个东西聊,其实它们是四个不同的层,各管各的,又互相喂数据。 第一层 长期知识源 项目记忆缓存&#x…...
AssetRipper:3步解锁Unity游戏资源逆向提取的终极免费方案
AssetRipper:3步解锁Unity游戏资源逆向提取的终极免费方案 【免费下载链接】AssetRipper GUI Application to work with engine assets, asset bundles, and serialized files 项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper 在Unity游戏开发…...
从硬件小白到Ryzen调优专家:SMUDebugTool实战进阶指南
从硬件小白到Ryzen调优专家:SMUDebugTool实战进阶指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…...
【工业相机】大恒万兆网相机原生RS232串口调试|无需转换板、直连通信、最简接线教程(实测)
【工业相机】大恒万兆网相机原生RS232串口调试|无需转换板、直连通信、最简接线教程(实测)📑 前言一、硬件说明二、最简接线方式(重点)2.1 接线逻辑2.2 实物接线(直接照抄)2.3 通俗口…...
BarTender如何在线刷新许可证
1、在BarTender服务端打开Administration Console注意:此操作需要服务端连接外网,登录本地管理员账户2、点击许可并等待右侧弹出许可证界面选中需要操作的许可证并点击右侧刷新按钮3、许可证刷新成功4、刷新完成后观察刷新后的许可证前方是否有感叹号如果…...
树莓派4B内存分配翻车实录:给GPU 512MB导致libcamera拍照报错‘内存不足’?
树莓派4B内存分配陷阱:GPU设置如何影响libcamera性能 树莓派4B作为一款功能强大的单板计算机,其8GB内存版本尤其受到开发者和创客的青睐。然而,许多用户在尝试使用libcamera进行高性能图像捕获时,会遇到一个令人困惑的问题&#x…...
Dify系列课程 - 5.Ollama:轻松驾驭本地大语言模型(在 Windows 上安装 Ollama 并部署 DeepSeek 大模型)
Ollama 安装Deepseek大模型 Ollama 大模型安装完成...
RT-Thread Studio开发RA2L1:从环境搭建到GPIO输入输出实战
1. 项目概述与核心价值最近在捣鼓瑞萨电子的RA2L1 MCU开发板,想基于RT-Thread Studio这个国产IDE快速上手。我发现很多朋友拿到一块新板子,第一步“点亮LED”或者“读取按键”这个看似简单的操作,往往就卡在了环境搭建上。网上的资料要么过于…...
别再只会点灯了!用Arduino和WS2812B灯带做个会呼吸的桌面氛围灯(附完整代码)
用Arduino打造会呼吸的WS2812B智能氛围灯系统 你是否已经厌倦了简单的LED闪烁效果?想让你的工作台或游戏空间拥有更高级的光效体验?今天我们将突破基础点灯的局限,用Arduino和WS2812B灯带打造一套具备呼吸效果的智能氛围灯系统。这不仅仅是一…...
Perplexity地理信息查询性能断崖式下跌?20年GIS架构师曝出隐藏瓶颈:HTTP/2连接复用失效+TLS 1.3握手阻塞链
更多请点击: https://codechina.net 第一章:Perplexity地理信息查询性能断崖式下跌现象全景透视 近期多个生产环境观测到,Perplexity模型在处理含经纬度坐标、行政区划嵌套(如“北京市朝阳区三里屯街道附近500米内POI”ÿ…...
