前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Windows WMI 详解(一)

Windows WMI 详解(一)

原创
作者头像
一只特立独行的兔先生
发布2024-01-28 10:52:01
4092
发布2024-01-28 10:52:01
举报

1. WMI简介

WMI全称为Windows Management Instrumentation,即Windows管理规范,是Windows 2K/XP管理系统的核心。它属于管理数据和操作的基础模块,设计WMI的初衷是为了能达到一种通用性,通过WMI去操作系统、应用程序等去管理本地或者远程资源。它支持分布式组件对象模型(DCOM)和Windws远程管理(WinRM),用户可通过WMI服务访问、配置、管理和监视Windows所有资源的功能,对于其他的Win32操作系统来讲WMI是一个非常不错的插件,同时也是测试人员在攻防实战中一个很完美的“无文件攻击”入口途径。

2.WQL语言

WQL也就是WMI的SQL,WQL的全称是WMI Query Language(Windows管理规范查询语言),主要用于查询WMI任何托管资源,其查询语言与SQL语法相似,但只能执行数据的查询,不能对类或者实例执行创建、删除、修改等操作。

1.基础语法

SELECT properties[,properties] FROM class [where clause]

1)SELECT代表着WQL语句开始。

2)properties代表是要查询的属性名称。

3)FROM指定包含SELECT语句中列出的属性的类。

4)clas代表要查询的类名称。

5)where clause可选项,代表要过滤的信息,用来定义搜索范围。

2.查询用例

1)在CDM命令行中执行wbemtest命令进入WMI测试器中,如图1-1所示。

IMG_312
IMG_312

2)在使用之前我们现需要进行连接,选择默认连接选项即可,如图1-2所示。

IMG_313
IMG_313

3)通过连接默认的命令空间,可以看到如下内容,如图1-3所示。

IMG_314
IMG_314

4)通过点击“查询”模块,可执行WQL语句对所需要的内容进行查询,如图1-4所示。

IMG_315
IMG_315

5)在此输入我们要执行的WQL语句。

代码语言:bash
复制
SELECT * FROM WIN32_Process where Name Like "%cmd%" 

6)上述的查询语句将会把当前正在运行的进程的可执行文件名称中包含“cmd”的结果返回到查询结果中。更具体地说,此查询语句将返回WIN32_Process类的每个实例的所有属性的名称字段中包含“CMD”的结果,如图1-5所示。

IMG_316
IMG_316

7)执行命令从任务管理器中查看,如图1-6所示。

代码语言:bash
复制
tasklist //打开任务管理器

IMG_317
IMG_317

8)除了WIN32_Process属性之外还有很多属性,如需查询更多的WMI属性,我们可以通过Powershell中的命令来进行查看。Powershell是windows下功能很强大的脚本语言,其内部包含了及其丰富与WMI进行交互的功能。

9)通过Powershell与WMI进行更多的交互,如图1-7所示。

代码语言:bash
复制
powershell  //切换到Powershell

IMG_318
IMG_318

10)若要通过Powershell查看当前系统中所有属性可以执行如下命令操作,执行完毕后如图1-8所示。

代码语言:bash
复制
Get-wmiObject -List //查看当前系统中所有属性

IMG_319
IMG_319

3. WMI Client

在WMI交互时有很多客户端,我们在实战中可以根据不同的场景适当的去选择已有的客户端进行操作,接下来详细介绍可以用于实战中的WMI Client。

1.PowerShell

PowerShell是Windows操作系统下非常强大的脚本语言,可以通过PowerShell管理Windows系统中的所有功能。 Poweshell支持WMI和CIM两种命令方式与WMI进行交互,两种命令方式的不同的点在于WMI命令只能用做于DCom协议,而CIM命令不仅支持DCom协议还支持WINRm协议,由此可见,CIM命令与WMI交互时更具有一定的灵活性,下述为Powershell可与WMI交互的功能。

  • Get-WmiObject
  • Get-CimAssociatedInstance
  • Get-CimClass
  • Get-CimInstance
  • Get-CimSession
  • Set-WmiInstance
  • Set-CimInstance
  • Invoke-WmiMethod
  • Invoke-CimMethod
  • New-CimInstance
  • New-CimSession
  • New-CimSessionOption
  • Register-CimIndicationEvent
  • Register-WmiEvent
  • Remove-CimInstance
  • Remove-WmiObject
  • Remove-CimSession

2.Wmic.exe

wmic.exe是一款主要用于与WMI交互的命令行管理工具,他不但可以管理本地计算机,还能够在足够的权限下管理域控中的其他计算机,WMIC是windows自带的一个功能,计算机只要支持WMI即可使用WMIC,WMIC因其强大的功能以及Windows免安装在内网渗透中扮演着重要的角色。

3.Wbemtest

Wbemtest是Windows自带的一个与WMI基础结构交互的图形化工具,它支持任何windows系统,在运行中输入wbemtest即可打开,在弹出连接页面中选择命名空间(WBEMTEST不会浏览命名空间,需要我们手动选择连接到指定命名空间),默认选择root\cimv2,届时,通过Wbemtest工具进行枚举对象实例、执行查询、创建和修改WMI类和对象操作。

4.Winrm

Winrm(Windows remote shell)即windows远程管理,它是windows操作系统的一部分,我们可以以管理员的身份在windows中使用该命令。Winrm是WS 管理协议的 Microsoft 实现,WS 管理协议是一种基于简单对象访问协议 (SOAP) 的标准防火墙友好型协议,当我们开启winrm服务后占用的端口(默认情况下,Winrm http服务占用5985,https占用5986)不会被防火墙拦截,因此我们在内网渗透中可以通过Winrm进行横向渗透。

5.Win explorer

Win explorer(windows资源查看器)是一款图形化查看WMI信息的工具,与wbemtest类似,不过比wbemtest功能更丰富,使用起来更方便。WMI资源管理器允许用户浏览完整的WMI管理类集、对象及其属性,浏览远程计算机上的对象和设置,以及执行任何WQL查询和查看结果集

6.WSH

VBScript和JScript是Microsoft提供的两种WSH(Windows Script Host)脚本开发语言。从当前来看这两种脚本开发语言早已过时,但是它们在与WMI交互时仍有很强大的能力,目前市面上已经出现了基于这两种语言开发,使用WMI功能完成基本的Command and Control机制的后门程序。目前只有VBScript和JScript这两种脚本开发的语言能够支持调用Event Consumer(事件处理)接⼝ActiveScriptEventConsumer(事件消费者组件)来实现无文件写入。


我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. WMI简介
  • 2.WQL语言
    • 1.基础语法
      • 2.查询用例
      • 3. WMI Client
        • 1.PowerShell
          • 2.Wmic.exe
            • 3.Wbemtest
              • 4.Winrm
                • 5.Win explorer
                  • 6.WSH
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档