前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WMI 攻击手法研究 – 基础篇 (第一部分)

WMI 攻击手法研究 – 基础篇 (第一部分)

作者头像
帝旭科技
发布2022-11-23 19:04:23
1.3K0
发布2022-11-23 19:04:23
举报
文章被收录于专栏:帝讯博客

文章目录[隐藏]

这篇文章是有关 WMI 的多篇系列文章中的第一篇,如果读者对 PowerShell 有个基本的了解,那么对阅读本篇文章会有所帮助,但这不是必需的。

介绍

为何是 WMI

WMI 是 Microsoft 的一组规范,旨在对 Windows 系统进行快速高效的管理。正如你可能知道的那样,一项安全规则表明任何对管理有用的东西也很容易被不法分子滥用,WMI 确实可以做很多事情 —— 从收集计算机状态和配置设置到运行应用程序和执行代码。此外,WMI 存在于所有可用的 Windows 操作系统版本中,因此这里的目标范围非常广泛。

什么是 WMI

让我们快速回顾一些重要术语,WMI 是 Windows Management Instrumentation 的缩写,它是 Microsoft 对 CIM (Common Information Model,通用信息模型) 和 WBEM (Web-Based Enterprise Management,基于 Web 的企业管理) 的实现 —— 这两者都是 DMTF (Distributed Management Task Force,分布式管理任务组) 标准。WMI 为应用程序或脚本提供了一个整洁统一的界面来管理计算机 (可能是远程的,也可能是本地的) —— 包括进程、服务等。

WMI 体系架构

了解体系架构对于了解整个 WMI 生态系统的工作方式非常重要,WMI 架构如下所示 (源于 Graeber 在 BHUSA 15 的演讲):

arch
arch

让我们来逐一了解主要组件:

  • Clients/Consumers:基本上是与 WMI 类交互 (查询数据、运行方法等) 终端。比较有代表性的客户端包括 wmic.exewbemtest.exewinrm.exe、VBScript/JScript 和 ofc PowerShell cmdlets。
  • Query Languages:就像 SQL 提供查询数据库的方法一样,WMI 也有用于查询 WMI 服务的 WQL (WMI 查询语言) / CQL。在管理远程盒子方面,WBEM 标准开始发挥作用,其中包括 DCOM 和 WS-Man (如果你不理解这些术语,请不要担心,请继续阅读)。WQL 是 WMI 基础 SQL 语法,因此不区分大小写。一个简单查询 BIOS 信息语句如下:
代码语言:javascript
复制
select * from win32_bios
  • Repositories:存储类的所有静态数据的数据库,存储库由 MOF (managed object format,托管对象格式) 文件定义,MOF 文件定义了结构、类、名称空间等,可以在 %WINDIR%\System32\Wbem\Repository 目录下找到数据库文件。
repo
repo
  • MOF 文件:MOF 文件基本上用于定义 WMI 命名空间、类、provider 等,通常位于 %WINDIR%\System32\Wbem 下,扩展名为 MOF。在本系列的后续部分中,我们将了解如何编写自己的 MOF 文件来扩展 WMI 功能集。
  • Providers:可以在 WMI Providers 的帮助下访问存储库中定义的任何内容,它们通常是 Dll 文件,并与 MOF 文件 (cimwin32.dll、stdprov.dll 等) 关联。不过,它们也可以采用其它类型 (类、事件、事件使用者、方法等) 的形式。Providers 对生态系统至关重要,因为它们监视来自特定定义对象的事件和数据,比如驱动程序,它在托管对象和 WMI 之间提供了一个桥梁。在下面的截图中,dll 文件都有相对应的 MOF 文件:
mof
mof
  • Managed Objects:上下文中资源的别名,即托管对象可以是 WMI 管理的服务、进程或操作系统。
  • Namespaces:简言之,名称空间是类的逻辑划分,便于发现和使用,分为 3 组 (system、core、extension) 和 3 个类型 (abstract、static、dynamic),默认情况下具有代表性的名称空间是:root\cimv2、root\default、root\security、root\subscription 等。

体系架构基本就是这样,现在,让我们来了解如何将 WMI 与 PowerShell 一起使用。

用 PowerShell 操作 WMI

现在我们已经完成了理论部分,让我们快速生成一个 PS 终端,请务必记住,在 PowerShell 的 v2 之前,只有少数 cmdlet 可以与 WMI 交互,检查 PowerShell 版本,并将版本更改为 2:

version
version

提示:这些命令的名称是见名知意的 (稍后我们还会深入讨论)。在任何时候,都可以使用 Powershell 的标准语法:help <command> 来获取有关特定命令的更多信息。例如可能希望尝试帮助调用 WmiMethod 来查看该命令的功能,类似于 Linux 手册页。

从 PowerShell v3 开始,MS 引入了 CIM cmdlet,它利用 WS-MAN 和 CIM 标准来管理对象,访问 CIM cmdlet 在两种情况下具有优势:

  • 在 WMI/DCOM 本身被阻止运行 (可能是由于基于主机的防火墙规则?) 但启用了 WinRM/WS-MAN (Windows 远程管理) 的计算机中,我们仍然可以使用 CIM 来执行与 WMI 完全相同的操作。
  • CIM 本身是一个行业标准,是跨平台实现的,这意味着它也可以用于非 Windows 设备。

DCOM:分布式组件对象模型的别名,DCOM 是网络计算机上软件组件之间通信的专有 Microsoft 协议。WMI 使用分布式 COM (DCOM) 连接到远程计算机。然而,DCOM 并不是那么友好的防火墙。

WS-MAN:WS-MAN 或 WS-Management 是一种 DMTF 标准,它为系统跨 IT 基础架构访问管理信息提供了一种通用方法。另一方面,WS-MAN 使用 HTTP,因此绝对是防火墙友好的。

我们将重做上面所做的,但在将 Powershell 版本更改回默认版本后 (在示例中使用了 Powershell v5):

cimcmds
cimcmds

CIM cmdlet 可以做 WMI cmdlet 所能做的一切。如果我们希望映射 WMI cmdlet 和 CIM cmdlet 之间的功能,以下是两种类型之间功能比较的表格表示:

Use \ Type

WMI Cmdlets

Cim Cmdlets

获取类的信息

Get-WmiObject

Get-CimInstance

调用方法

Invoke-WmiMethod

Invoke-CimMethod

订阅一个事件

Register-WmiEvent

Register-CimIndicationEvent

创建/更新类的实例

Set-WmiInstance

Set-CimInstance

删除类的实例

Remove-WmiObject

Remove-CimInstance

使用 PowerShell 里的 WMI 查询

现在我们已经知道了可供我们使用的不同 cmdlet,我们可以尝试运行上面的示例 WQL 查询。我们已经知道 Get WmiObject 可以用来获取关于类的信息。因此,让我们使用 -Query 参数运行 cmdlet:

代码语言:javascript
复制
Get-WmiObject -Query 'select * from win32_bios'
wql
wql

结论

这篇文章旨在概述我们将在本系列的下一部分中处理的内容。这里有很多技术术语,但理解它们是必要的。我希望你喜欢阅读本篇文章,期待与你一起探索。

再见,朋友!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 用 PowerShell 操作 WMI
  • 使用 PowerShell 里的 WMI 查询
  • 结论
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档