正邦高端网站建设,网站首页快照,北京seo排名优化网站,怎么在vk网站上做推广#WMI攻击-基础篇#xff08;一#xff09; 这篇文章是关于WMI攻击系列文章的第一部分#xff0c;面向新手。如果对Powershell有一定了解会对阅读本文有所帮助#xff0c;但这并不是必需的#xff0c;我们直接上干货。
#1、概述
为什么是WMI#xff1f;
WMI 是 Microso…#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 服务的 WQLWMI 查询语言/CQL。在管理远程机器方面WBEM 标准开始发挥作用——其中包括 DCOM 和 WS-Man。 WQL 基本上是 WMI 的 SQL 语法不区分大小写。一个简单的查询可能如下所示select * from win32_bios查询有关 BIOS 的信息Repositories这些是我们之前讨论过的存储类的所有静态数据定义的数据库。存储库由定义结构、类、命名空间等的 MOF托管对象格式文件定义。数据库文件可以在 %WINDIR%\System32\Wbem\Repository 目录下找到。MOF FilesMOF 文件用于定义 WMI 命名空间、类、提供程序等。在 %WINDIR%\System32\Wbem 目录下可以找到它们扩展名为 .mof。在本系列的后面部分我们将了解如何编写自己的 MOF 文件来扩展 WMI 的功能集。Providers可以在 WMI 提供程序的帮助下访问存储库中定义的任何内容。它们通常是 DLL 文件并与 MOF 文件相关联——如cimwin32.dll、stdprov.dll 等但是它们也可以采用其他类型的形式类、事件、事件消费者、方法等 。提供程序对生态系统至关重要因为它们监视来自特定定义对象的事件和数据。提供程序为托管对象和WMI之间架起一座桥梁。在下面的屏幕截图中DLL 文件是相关 MOF 文件的提供程序Managed Objects这些是上下文中资源的别名即托管对象可以是由WMI管理的服务、进程或操作系统。Namespaces名称空间是类的逻辑划分便于发现和使用。他们被分成3组和3中类型 systemcoreextension3种类型 abstractstaticdynamic其中几个重要的命名空间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 设备。DCOMDCOM是分布式组件对象模型(Distributed Component Object Model)的别名是一种专有的Microsoft协议用于联网计算机上的软件组件之间的通信。WMI使用分布式COM(DCOM)连接到远程计算机。但是DCOM 对防火墙并不那么友好。WS-MANWS-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/