当前位置: 首页 > 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/

相关文章:

WMI攻击-基础篇(一)

#WMI攻击-基础篇&#xff08;一&#xff09; 这篇文章是关于WMI攻击系列文章的第一部分&#xff0c;面向新手。如果对Powershell有一定了解会对阅读本文有所帮助&#xff0c;但这并不是必需的&#xff0c;我们直接上干货。 #1、概述 为什么是WMI&#xff1f; WMI 是 Microso…...

使用Pygame创建一个简单的消消乐游戏

消消乐游戏是一种经典的益智游戏&#xff0c;玩家通过交换相邻的方块来形成三个或更多相同颜色的连续方块&#xff0c;从而消除它们。本文将介绍如何使用Python的Pygame库来创建一个简单的消消乐游戏。 准备工作 在开始之前&#xff0c;请确保已安装Pygame库。可以通过以下命…...

证明直纹面是可展曲面沿着直母线,曲面的切平面不变

目录 证明直纹面是可展曲面的当且仅当沿着直母线&#xff0c;曲面的切平面不变 证明直纹面是可展曲面的当且仅当沿着直母线&#xff0c;曲面的切平面不变 直纹面是可展曲面当且仅当沿着直母线&#xff0c;曲面的切平面不变. 证明&#xff1a;设直纹面 S S S的参数式为 r ( u …...

Chrome控制台 网站性能优化指标一览

打开chrome-》f12/右键查看元素-》NetWrok/网络 ctrlF5 刷新网页&#xff0c;可以看到从输入url到页面资源请求并加载网页&#xff0c;用于查看资源加载&#xff0c;接口请求&#xff0c;评估网页、网站性能等&#xff0c;如下图&#xff1a; request、stransferred、resour…...

Typora创建markdwon文件的基础语法

标题的创建 使用#空格xxx 可使xxx为标题&#xff0c;同时第一标题为#空格标题&#xff1b;第二标题为##空格标题2。以此类推最多可创建六个标题。 同时按住Ctrl1可创建第一标题&#xff0c;同时按住Ctrl2可创建第二标题&#xff0c;以此类推&#xff0c;最多可创建六个标题。也…...

《嵌入式硬件设计》

一、引言 嵌入式系统在现代科技中占据着至关重要的地位&#xff0c;广泛应用于消费电子、工业控制、汽车电子、医疗设备等众多领域。嵌入式硬件设计作为嵌入式系统开发的基础&#xff0c;直接决定了系统的性能、可靠性和成本。本文将深入探讨嵌入式硬件设计的各个方面&#xff…...

【AIGC】大模型面试高频考点-位置编码篇

【AIGC】大模型面试高频考点-位置编码篇 &#xff08;一&#xff09;手撕 绝对位置编码 算法&#xff08;二&#xff09;手撕 可学习位置编码 算法&#xff08;三&#xff09;手撕 相对位置编码 算法&#xff08;四&#xff09;手撕 Rope 算法&#xff08;旋转位置编码&#xf…...

如何使用 SQL 语句创建一个 MySQL 数据库的表,以及对应的 XML 文件和 Mapper 文件

文章目录 1、SQL 脚本语句2、XML 文件3、Mapper 文件4、启动 ServiceInit 文件5、DataService 文件6、ComplianceDBConfig 配置文件 这个方式通常是放在项目代码中&#xff0c;使用配置在项目的启动时创建表格&#xff0c;SQL 语句放到一个 XML 文件中。在Spring 项目启动时&am…...

Unity性能优化---动态网格组合(二)

在上一篇中&#xff0c;组合的是同一个材质球的网格&#xff0c;如果其中有不一样的材质球会发生什么&#xff1f;如下图&#xff1a; 将场景中的一个物体替换为不同的材质球 运行之后&#xff0c;就变成了相同的材质。 要实现组合不同材质的网格步骤如下&#xff1a; 在父物体…...

JVM学习《垃圾回收算法和垃圾回收器》

目录 1.垃圾回收算法 1.1 标记-清除算法 1.2 复制算法 1.3 标记-整理算法 1.4 分代收集算法 2.垃圾回收器 2.1 熟悉一下垃圾回收的一些名词 2.2 垃圾回收器有哪些&#xff1f; 2.3 Serial收集器 2.4 Parallel Scavenge收集器 2.5 ParNew收集器 2.6 CMS收集器 1.垃圾…...

GPS模块/SATES-ST91Z8LR:电路搭建;直接用电脑的USB转串口进行通讯;模组上报定位数据转换地图识别的坐标手动查询地图位置

从事嵌入式单片机的工作算是符合我个人兴趣爱好的,当面对一个新的芯片我即想把芯片尽快搞懂完成项目赚钱,也想着能够把自己遇到的坑和注意事项记录下来,即方便自己后面查阅也可以分享给大家,这是一种冲动,但是这个或许并不是原厂希望的,尽管这样有可能会牺牲一些时间也有哪天原…...

什么是TCP的三次握手

TCP&#xff08;传输控制协议&#xff09;的三次握手是一个用于在两个网络通信的计算机之间建立连接的过程。这个过程确保了双方都有能力接收和发送数据&#xff0c;并且初始化双方的序列号。以下是三次握手的详细步骤&#xff1a; 第一次握手&#xff08;SYN&#xff09;&…...

《Clustering Propagation for Universal Medical Image Segmentation》CVPR2024

摘要 这篇论文介绍了S2VNet&#xff0c;这是一个用于医学图像分割的通用框架&#xff0c;它通过切片到体积的传播&#xff08;Slice-to-Volume propagation&#xff09;来统一自动&#xff08;AMIS&#xff09;和交互式&#xff08;IMIS&#xff09;医学图像分割任务。S2VNet利…...

Linux ifconfig ip 命令详解

简介 ifconfig 和 ip 命令用于配置和显示 Linux 上的网络接口。虽然 ifconfig 是传统工具&#xff0c;但现在已被弃用并被提供更多功能的 ip 命令取代。 ifconfig 安装 sudo apt install net-toolssudo yum install net-tools查看所有活动的网络接口 ifconfig启动/激活网络…...

Vue3 对于echarts使用 v-show,导致显示不全,宽度仅100px,无法重新渲染的问题

参考链接&#xff1a;解决Echarts图表使用v-show,显示不全,宽度仅100px的问题_echarts v-show图表不全-CSDN博客 Vue3 echarts v-show无法重新渲染的问题_v-show echarts不渲染-CSDN博客 原因不多赘述了&#xff0c;大概就是v-show 本身是结构已经存在&#xff0c;当数据发生…...

C++实现俄罗斯方块

俄罗斯方块 还记得俄罗斯方块吗&#xff1f;相信这是小时候我们每个人都喜欢玩的一个小游戏。顾名思义&#xff0c;俄罗斯方块自然是俄罗斯人发明的。这人叫阿列克谢帕基特诺夫。他设置这个游戏的规则是&#xff1a;由小方块组成的不同形状的板块陆续从屏幕上方落下来&#xf…...

鸿蒙分享:添加模块,修改app名称图标

新建公共模块common 在entry的oh-package.json5添加dependencies&#xff0c;引入common模块 "dependencies": {"common": "file:../common" } 修改app名称&#xff1a; common--src--resources--string.json 新增&#xff1a; {"name&q…...

扫描IP段内的使用的IP

扫描IP段内的使用的IP 方法一&#xff1a;命令行 命令行进入 for /L %i IN (1,1,254) DO ping -w 1 -n 1 192.168.3.%iarp -a方法二&#xff1a;python from scapy.all import ARP, Ether, srp import keyboarddef scan_network(ip_range):# 创建一个ARP请求包arp ARP(pds…...

【专题】虚拟存储器

前文提到的存储器管理方式有一个共同的特点&#xff0c;即它们都要求将一个作业全部装入内存后方能运行。 但有两种特殊情况&#xff1a; 有的作业很大&#xff0c;其所要求的内存空间超过了内存总容量&#xff0c;作业不能全部被装入内存&#xff0c;致使该作业无法运行&#…...

Python之爬虫入门--示例(2)

一、Requests库安装 可以使用命令提示符指令直接安装requests库使用 pip install requests 二、爬取JSON数据 &#xff08;1&#xff09;、点击网络 &#xff08;2&#xff09;、刷新网页 &#xff08;3&#xff09;、这里有一些数据类型&#xff0c;选择全部 &#xff08…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统&#xff0c;64位 下载路径 oracle 11g 安装包...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...