当前位置: 首页 > news >正文

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/

http://www.lryc.cn/news/497909.html

相关文章:

  • 使用Pygame创建一个简单的消消乐游戏
  • 证明直纹面是可展曲面沿着直母线,曲面的切平面不变
  • Chrome控制台 网站性能优化指标一览
  • Typora创建markdwon文件的基础语法
  • 《嵌入式硬件设计》
  • 【AIGC】大模型面试高频考点-位置编码篇
  • 如何使用 SQL 语句创建一个 MySQL 数据库的表,以及对应的 XML 文件和 Mapper 文件
  • Unity性能优化---动态网格组合(二)
  • JVM学习《垃圾回收算法和垃圾回收器》
  • GPS模块/SATES-ST91Z8LR:电路搭建;直接用电脑的USB转串口进行通讯;模组上报定位数据转换地图识别的坐标手动查询地图位置
  • 什么是TCP的三次握手
  • 《Clustering Propagation for Universal Medical Image Segmentation》CVPR2024
  • Linux ifconfig ip 命令详解
  • Vue3 对于echarts使用 v-show,导致显示不全,宽度仅100px,无法重新渲染的问题
  • C++实现俄罗斯方块
  • 鸿蒙分享:添加模块,修改app名称图标
  • 扫描IP段内的使用的IP
  • 【专题】虚拟存储器
  • Python之爬虫入门--示例(2)
  • 5G CPE终端功能及性能评测(四)
  • 人工智能驱动的骗局会模仿熟悉的声音
  • 电子病历静态数据脱敏路径探索
  • 混合云策略在安全领域受到青睐
  • Echarts使用平面方法绘制三维立体柱状图表
  • java-判断语句
  • 11.14【JAVA EXP3】【DEBUG】
  • UE5 和 UE4 中常用的控制台命令总结
  • MR30分布式IO模块赋能喷水织机
  • C++中的封装性
  • PyTorch 深度学习框架简介:灵活、高效的 AI 开发工具