栏目分类
Apu Apustaja中文网
你的位置:IDNA中文网 > Apu Apustaja中文网 > WMI攻击技术研究WMI攻击技术研究
发布日期:2025-01-03 19:12 点击次数:81
1. WMI 简介
WMI 的全称是 Windows Management Instrumentation,即 Windows 管理规范,在 Windows 操作系统中,随着 WMI 技术的引入并在之后随着时间的推移而过时,它作为一项功能强大的技术,从 Windows NT 4.0 和 Windows 95 开始,始终保持其一致性。它出现在所有的 Windows 操作系统中,并由一组强大的工具集合组成,用于管理本地或远程的 Windows 系统
下面是操作系统版本中对应的 WMI 的版本
0x1: WMI 体系结构
WMI是微软实现的由分布式管理任务组(DMTF)发布的基于 Web 的企业管理(WBEM)和公共信息模型(CIM)标准。这两个标准的目的是提供工业不可知论者手段,收集和传播在企业中有关的任何托管组件中的信,总体上说,我们可以把WMI的实现标准归类如下
Relevant Link:
2. WMI的类与命名空间
我们知道wmi的一大功能就是作为系统信息的数据库的封装。WMI 代表着大多数与操作系统信息以及以对象的形式操作有关的数据。一个 WMI 对象是高度结构化定义的信息被如何表示的类的实例,而且所有的 WMI 类都可以使用 WMI 查询语言 (WQL) 进行查询 由于WMI包含的信息非常多,因此winner使用命名空间的管理方式来进行层次式的管理WMI 类的命名空间的层次结构非常类似于传统的,面向对象的编程语言的命名空间。所有的命名空间都派生自根命名空间,在用脚本语言查询对象并未显式指定命名空间时,微软使用 ROOT\CIMV2 作为默认的命名空间
该注册表项中包含所有 WMI 设置,也包括已定义的默认命名空间,可以使用下面的 PowerShell 代码递归查询所有的 WMI 类和它们各自的命名空间
0x1: 查询 WMI
WMI 提供了一种简单的语法用于查询 WMI 对象实例、 类和命名空间 - WMI 查询语言(WQL),有三种类别的 WQL 查询
1. 实例查询
实例查询是最常见的用于获取 WMI 对象实例的 WQL 查询。需要注意的是,wmi query不能单独执行,要借助编程语言接口或windows api、powershell的wrapper来完成,例如
2. 事件查询
基于异步事件回调的通知机制。wmi支持我们订阅某些系统事件的回调通知
3. 元查询
Schema queries are used to get information about WMI itself and its structure.
Relevant Link:
3. 与 WMI 进行交互
我们知道,WMI是基于windows COM组件实现的,我们要使用wmi的特性需要一个COM client wrapper,幸运的是Microsoft 和第三方供应商提供了丰富的客户端工具使您可以与 WMI 进行交互
0x1: PowerShell
PowerShell 是功能极其强大的脚本语言,包含了丰富的与 WMI 进行交互的功能。在漏洞利用过程中黑客可能把指令写入到一个ps1文件中执行,也可以直接基于powershell的一次性非交互指令来执行
0x2: VBS - Windows 脚本宿主(WSH)语言
Microsoft 提供了两个 WSH 脚本语言,VBScript 和 JScript。尽管它们比较过时,也算不上高雅的编程语言,但是说到与 WMI 进行交互时,它们的确都是功能强大的脚本语言。从攻击的角度来看, VBScript 和 JScript 是在未安装 PowerShell 的老版本的 Windows 系统上的最小公共程序
1. 直接执行vbs文件形式
执行指令
2.向磁盘文件写入payload
黑客在自动化入侵的时候,往往需要将攻击payload写入到磁盘vbs文件后然后再启动执行,例如
0x3: wmic.exe
wmic.exe 是一个与 WMI 进行交互的强大的命令行实用工具。它拥有大量的 WMI 对象的方便记忆的默认别名,但你还可以执行更为复杂的查询。wmic.exe 还可以执行 WMI 方法,攻击者经常用来通过调用 Win32_Process 的 Create 方法来进行横向运动。Wmic.exe 的局限性之一是不能接受调用嵌入的 WMI 对象的方法。在 PowerShell 不可用的情况下,使用 wmic.exe 足够用于执行系统侦察和基本方法的调用
WMIC extends WMI for operation from several command-line interfaces and through batch scripts. Before WMIC, you used WMI-based applications (such as SMS), the WMI Scripting API, or tools such as CIM Studio to manage WMI-enabled computers. Without a firm grasp on a programming language such as C++ or a scripting language such as VBScript and a basic understanding of the WMI namespace, do-it-yourself systems management with WMI was difficult. WMIC changes this situation by giving you a powerful, user-friendly interface to the WMI namespace.
WMIC is more intuitive than WMI, in large part because of aliases. Aliases take simple commands that you enter at the command line, then act upon the WMI namespace in a predefined way, such as constructing a complex WMI Query Language (WQL) command from a simple WMIC alias Get command. Thus, aliases act as friendly syntax intermediaries between you and the namespace. For example, when you run a simple WMIC command such as
不进入交互式界面,直接一次执行指令
远程指令执行
WMIC starts, uses the /node switch to establish a remote connection to SERVER1, and runs a command to display printer status information.
You can remotely access any WMI-enabled computer from any computer running WMIC. The computer you want to access doesn't require WMIC. For example, you can start WMIC from a computer running XP Professional Edition to manage a mix of computers running XP, Win2K, Windows NT 4.0, Windows Me, and Windows 9x.
因为wmic本质上还是一个WMI COM client,它向实现了WMI COM接口的远程服务器请求对应的接口函数,并得到返回结果
0x4: wbemtest.exe
wbemtest.exe 是一个功能强大的带有图形界面的 WMI 诊断工具。它能够枚举对象实例、执行查询、注册事件、修改 WMI 对象和类,并且可以在本地或远程去调用方法。它的接口对大多数用户来说不是特别友好,但从攻击者的角度来看,在其他工具不可用时,它完全可以作为替代选项
0x5: WMI Explorer
WMI Explorer 是一个很好的 WMI 类发现工具。它提供了一个优雅的 GUI (图 4 所示),你可以使用分层次的方式探索 WMI 存储库。它也能够连接到远程的 WMI 存储库,并执行查询
0x6: CIM Studio
CIM Studio 是 Microsoft 遗留的一个免费工具,你可以方便地浏览 WMI 存储库。像 WMI Explorer 一样,此工具也可以很好的进行 WMI 类发现
0x7: C/C++ 调用 IWbem* COM API
如果你需要使用非托管语言如 C 或 C++ 与 WMI 进行交互,你将需要使用 WMI 的 COM API
0x8: .NET System.Management 类
.NET 类库在 System.Management 命名空间中提供了几个与 WMI 相关的类,可以相对简单的使用如 C#、VB.Net 和 F# 语言编写与 WMI 交互的程序
0x9: winrm.exe
winrm.exe 可以在运行 WinRM 服务的本地和远程计算机上进行枚举 WMI 对象实例、调用方法,并创建和删除对象实例。也可以用 winrm.exe 来配置 WinRM 设置
Relevant Link:
4. 远程使用 WMI
由于 DCOM 和 WinRM 这两个协议的存在,将使得远程对象的查询,事件注册, WMI 类方法的执行,以及类的创建都能够被支持
0x1: 分布式组件对象模型 (DCOM)
从 DCOM 出现以来它一直是 WMI 所使用的默认协议,通过 TCP 的 135 端口建立初始连接。后续的数据交换则使用随机选定的 TCP 端口。可以通过 dcomcnfg.exe 并最终修改下面的注册表项来配置此端口的范围
在 PowerShell 中内置的所有 WMI cmdlets 都是使用 DCOM 进行通信的
0x2: Windows 远程管理 (WinRM)
最近, WinRM 取代了 DCOM 并成为 Windows 推荐的远程管理协议。WinRM 的构建基于 Web 服务管理 (WSMan) 规范 —— 一种基于 SOAP 的设备管理协议。此外,PowerShell 的远程传输协议也是基于 WinRM 规范的,同时 PowerShell 提供了极其强大的 Windows 企业级的远程管理。WinRM 也支持 WMI,以及通过网络执行 CIM 操作默认情况下,WinRM 服务监听的 TCP 端口是 5985 (HTTP),并且在默认情况下是加密的。还可以配置证书使其支持 HTTPS ,此时监听的 TCP 端口为 5986。WinRM 的设置很容易配置,可以使用 GPO , winrm.exe ,或 PowerShell 中的 WSMan PSDrive 来配置
5. WMI 事件
从攻击者或防御者的角度来看, WMI 最强大的功能之一就是对 WMI 事件的异步响应的能力。除了少数例外,WMI 事件几乎可以用于对操作系统的任何事件作出响应。例如,WMI 事件可能用于触发一个进程创建的事件。这种机制可随后被用作在任何 Windows 操作系统上执行命令行审计
0x1: 事件触发条件
要安装一个永久事件订阅,需要至少3个步骤
1. 事件筛选器
事件筛选器描述了感兴趣的事件并且执行了 WQL 事件查询。一旦系统管理员配置了筛选器,他们就可以使用它在创建新的事件时接收到通知,事件筛选器可能用于描述以下一些事件
事件筛选器都被存储为一个 ROOT\subscription:__EventFilter 对象的实例。事件筛选器查询支持以下类型的事件
2. 事件消费者
事件消费是一个派生自 __EventConsumer 系统类的类,它表示了在事件触发时的动作。系统提供了以下有用的标准事件消费类
攻击者在响应他们的事件时,大量使用 ActiveScriptEventConsumer 和 CommandLineEventConsumer 类。这两个事件消费者为攻击者提供了极大的灵活性去执行他们想要执行的任何 payload 并且无需写入一个恶意的可执行文件或脚本到磁盘
0x2: 基于WMI异步事件的恶意的 WMI 持久化
上一篇:没有了
下一篇:进博会汽车展区刮起“未来风”
下一篇:进博会汽车展区刮起“未来风”
相关文章
- 2025-01-12FEG 过渡到币安智能链 (BSC)
- 2025-01-109月17日加密货币价格:BTC和 ETH上涨乏力,XRP和FTM上涨 4
- 2025-01-06MOLI万站,正式上线
- 2025-01-04GovHK 香港政府一站通:商务及经济发展局局长 丘应桦, JP
- 2025-01-04solidworks2020sp3破解版