专栏名称: 安全祖师爷
国内领先的互联网安全媒体,WEB安全爱好者们交流与分享安全技术的最佳平台!这里聚集了XSS牛、SQL牛、提权牛、WEB牛、开发牛、运维牛,公众号定期分享安全教程及相关工具。与其在别处仰望 不如在这里并肩!
目录
相关文章推荐
深圳大件事  ·  深夜惊闻“救命”!深圳一网格员瞬间警觉 ·  昨天  
上下五千年故事  ·  收复台湾前,郑成功只有福建一带弹丸之地,为何 ... ·  3 天前  
上下五千年故事  ·  不容错过的河南特产,鸡内金薄饼真的太香啦! ·  3 天前  
深圳大件事  ·  炸裂!70人!深圳首批“AI公务员”上岗,网 ... ·  2 天前  
51好读  ›  专栏  ›  安全祖师爷

渗透测试实战之WMI持久化记录

安全祖师爷  · 公众号  ·  · 2020-02-01 19:24

正文

0x00 背景

WMI(Windows Management Instrumentation,Windows 管理规范)是一项核心的 Windows 管理技术;用户可以使用 WMI 管理本地和远程计算机,WMI 采用统一的、基于标准的、可扩展的面向对象接口,可以直接调用 WMI 接口来检索性能数据,管理事件日志、文件系统、打印机、进程、注册表设置、计划程序、安全性、服务、共享以及很多其他的操作系统组件和配置设置,使系统开发者可以与 Windows 管理信息进行交互,自从 WMI 被 Stuxnet 用于持久化控制后,越来越多的安全研究人员开始关注 WMI 技术。此后,攻击者同样开始关注 WMI 技术,他们使用这种技术来侦探系统环境、检测反病毒软件和虚拟机环境、执行代码、持久化控制、窃取数据等。


0x01 WMI 命名空间

WMI 引入了命名空间的概念。命名空间是为了把一些类和类的实例更好地管理而定义的把这些类和实体集合起来的一个团体。命名空间可以相互联系和组织成一个具有任意层次的由类和类的实例构成的网状结构。在同一个层次的情况下,命名空间必须具有互异的名称。


WMI 主要有以下几种命名空间:

WMI 包括两个组件:含有 WMI 核心的 WMI 服务和 WMI 存储库。WMI 存储库是由 WMI 命名空间组织的。在系统启动时,WMI 服务会创建如 root\default、root\cimv2 和 root\subscription 等 WMI 命名空间,同时会预安装一部分 WMI 类的定义信息到这些命名空间中,例如 Win32 类。


  1. root\default:与 Windows 注册表操作有关的主机类,可以读取、写入、枚举、监视、创建、删除注册表项和值。

  2. root\cimv32:包含从 CIM 存储库派生的类,提供关于计算机、磁盘、外围设备、文件、文件夹、文件系统、网络组件、操作系统、打印机、进程、安全性、服务、共享、SAM  用户及组等 Win32 信息资源。

  3. root\Security:用于与 Windows 安全有关的类。

  4. root\WMI:提供对  WDM  设备驱动程序中信息访问的类。


分类

WMI 接口

命名空间

属性/方法

制造商

Root/cimv2

Win32_Computer

System

属性:Manufacturer(制造商)、 Model(型号)

CPU

Root/cimv2

Win32_Processor

属性:Name(CPU 基本情况) Manufacturer(制造商)、 ExtClock(外部时钟频率)、 L2CacheSize(二级缓存大小)

内存

Root/cimv2

Win32_Computer

System

属性:TotalPhysicalMemory(内存大小)

硬盘

Root/cimv2

Win32_DiskDrive

属性:InterfaceType(类型)、 Size(容量)、Signature(序列号)

Win32_LogicalDisk

属性:DeviceID(驱动器名称)、Size(盘容量)、FileSystem(文件系统格式)

网卡

Root/cimv2

Win32_Network Adapter

属性:Name(型号)、Manufacturer(制造商)、NetConnectionID(网络连接名称)

打印机

Root/cimv2

Win32_Printer

属性:Name(名称)、Default(是否默认打印机)、PrintStatus(打印机状态)

主机名、域名、

工作组名

Root/cimv2

Win32_Computer

System

属性:Name(主机名)、Domain(域名)、Workgroup(工作组名)

应用软件

查询

Root/cimv2

StdRegProv

方法:

REG_SZ:GetString Value

REG_BINARY:GetBinary Value

REG_DOWRK:GetDWORD value

REG_MULTI_SZ:GetMultiString Value

杀毒软件

Root\SecurityCenter2

AntiVirusProduct

属性:DisplayName(名称) VersionNumber(版本)

防火墙

Root\SecurityCenter

FirewallProduct

属性:DisplayName(名称) VersionNumber(版本)

账户信息

Root/ cimv2

Win32_UserAccount

属性:Name(名称)、Disabled(是否停用)、Lockout(是否锁定)、PasswordExpires(密码是否永不过期)

信息查询

Root/ cimv2

Win32_Process

属性:Name(进程名称)、 ProcessID(PID)、ExecutablePath(执行文件路径)


0x02 WMI 查询

WMI 提供了一种查询语言 WQL,可以查询 WMI 任何托管资源。WQL 是 ANSI SQL 的一个子集,与 SQL 语言相似,但它只能用于数据提取,不能创建、修改和删除类或实例。

服务查询

SELECT * from Win32_Service


共享查询

SELECT * from Win32_Share


进程查询

SELECT * from Win32_Process


用户查询


0x03 WMI 常用命令

杀毒软件检测

Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct


虚拟机检测

wmic /NAMESPACE:"\\root\CIMV2" PATH Win32_ComputerSystem GET NumberOfLogicalProcessors,TotalPhysicalMemory /FORMAT:list


查询补丁信息

wmic qfe get Caption,Description,HotFixID,InstalledOn


0x04 持久化原理

WMI 包含一个事件机制,用来通知 WMI 数据和服务的变化。当特定的事件发生时,WMI 事件类就会提供通知。当有类的实例创建,删除或修改时,就会触发事件类,常见的事件类如下:


_InstanceModificationEvent

_ClassCreationEvent

_ClassDeletionEvent

_ClassModificationEvent

_NamespaceCreationEvent

_NamespaceDeletionEvent

_NamespaceModificationevent

_Instance Creation Event

_Instance Deletion Event


事件类的名字代表着它们发生变化的类型。WMI 可以直接检测到静态数据的变化,例如那些保存在 CIM 存储库中的类,实例或属性。如果是动态数据,WMI 则通过事件订阅的方式检测其变化。在这两种情况下,WMI 一旦检测到变化,将会查看该变化是否被用户订阅,若有则通知用户。


WMI 事件筛选器用于执行WQL事件查询。

SELECT * FROM __InstanceModificationEvent WITHIN 10 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'

CommandLineEventConsumer 类是 WMI 提供的标准事件使用者之一,在CommandLineEventConsumer 类中可以设置 ExecutablePath 等属性,执行所需的可执行文件,如下所示:







请到「今天看啥」查看全文