细说内网横向工具WMIHACK

目录

        1.前言

2. 基础知识

2.1 WMI简介

2.2 WMI体系结构

2.3 WMI的类与命名空间

2.4 查询WMI

2.5 管理WMI

2.6 WMI事件

3.工具分析

3.1 WMIHACK主要功能

3.2 对比WMIEXEC、PSEXEC

3.3 代码分析

未完待续。。。

结尾


1.前言

此工具为香山大佬开源的一款内网横向渗透工具,阅读源码后被大佬的思路及所使用的技术细节所震撼,并始终认为对于wmi没有一定了解是无法写出如此精妙的代码,获益良多。本文不对工具的使用做太多讲解,关于使用网上的文章已经太多了,只探讨背后的技术细节。

项目地址:https://github.com/360-Linton-Lab/WMIHACKER

2. 基础知识

2.1 WMI简介

WMI 的全称是 Windows Management Instrumentation,即 Windows 管理规范,在 Windows 操作系统中,随着 WMI 技术的引入并在之后随着时间的推移而过时,它作为一项功能强大的技术,从 Windows NT 4.0 和 Windows 95 开始,始终保持其一致性。它出现在所有的 Windows 操作系统中,并由一组强大的工具集合组成,用于管理本地或远程的 Windows 系统。

尽管已被大众所知并且从其创始以来,已经被系统管理员大量使用,但当WMI技术在震网病毒中被发现以后,它开始在安全社区变得非常流行。从那之后, WMI 在攻击中变得日益普及,其作用有执行系统侦察,反病毒和虚拟机检测,代码执行,横向运动,权限持久化以及数据窃取。

随着越来越多的攻击者利用 WMI 进行攻击,他将会是安全维护人员,事件响应人员,取证分析师必须掌握的一项重要技能,并且要明白如何发挥它的优势。

2.2 WMI体系结构

WMI是微软实现的由分布式管理任务组(DMTF)发布的基于 Web 的企业管理(WBEM)和公共信息模型(CIM)标准。这两个标准的目的是提供工业不可知论者手段,收集和传播在企业中有关的任何托管组件中的信息。

在一个较高的水平上,微软所实现的这些标准可以总结如下:

托管组件

托管组件被表示为 WMI 对象 —— 表示高度结构化的操作系统数据的类实例。微软提供了丰富的 WMI 对象用来与操作系统相关的信息进行通信。例如: Win32_Process,Win32_Service,AntiVirusProduct,Win32_StartupCommand 等等。

使用 WMI 数据

微软提供了几种方式来使用 WMI 数据和执行 WMI 方法。例如, PowerShell 提供了一种非常简单的方式与 WMI 进行交互。

查询 WMI 数据

所有的WMI对象都使用类似于一个 SQL 查询的语言称为 WMI 查询语言(WQL)。 WQL 能够很好且细微的控制返回给用户的 WMI 对象。

填充 WMI 数据

当用户请求特定的 WMI 对象时,WMI 服务 (Winmgmt) 需要知道如何填充被请求的 WMI 对象。这个过程是由 WMI 提供程序去实现的。WMI 提供程序是一个基于 COM 的 DLL 文件 ,它包含一个在注册表中已经注册的相关联的 GUID 。 WMI 提供程序的功能 —— 例如查询所有正在运行的进程,枚举注册表项等等。

当 WMI 服务填充 WMI 对象时,有两种类型的类实例: 动态对象和持久性对象。动态对象是在特定查询执行时在运行过程中生成的。例如,Win32_Process 对象就是在运行过程中动态生成的。持久性对象存储在位于 %SystemRoot%\System32\wbem\Repository\ 的 CIM 数据库中,它存储着 WMI 类的实例,类的定义和命名空间的定义。

结构化 WMI 数据

绝大多数的 WMI 对象的架构是在托管对象格式 (MOF) 文件中描述的。MOF 文件使用类似于 C++ 的语法并为一个 WMI 对象提供架构。因此,尽管 WMI 提供程序产生了原始数据,但是 MOF 文件为其产生的数据提供了被格式化的模式。从安全维护人员的角度来看,值得注意的是, WMI 对象定义可以在没有 MOF 文件的情况下被创建。相反,他们可以使用 .NET 代码直接插入到 CIM 资料库中。

远程传输 WMI 数据

Microsoft 提供了两个协议用于远程传输 WMI 数据: 分布式组件对象模型 (DCOM) 和 Windows 远程管理 (WinRM)。一般来说我们是通过DCOM来进行通信的,也就是我们的135端口的RPC服务。

执行 WMI 操作

部分 WMI 对象包括可执行的方法。例如,攻击者进行横向运动时执行的一个常用方法是在 Win32_Process 类中的静态 Create 方法,此方法可以快速创建一个新的进程。另外, WMI 提供了一个事件系统,使用户可以使用注册事件处理函数进行创建,修改或删除任何 WMI 对象实例。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值