这是 WMI 攻击手法研究系列文章第四篇,将更多地关注信息收集和枚举。WMI 提供了大量的类,可以从中列举出很多东西。因此,让我们来深入了解,不要再浪费时间了。
1 收集基本信息
在之前的文章中,已经有许多为我们提供有关系统的有价值信息的类,例如 StdRegProv
用于注册表,Win32_Process
用于系统上运行的进程,Win32_Bios
用于 BIOS 信息等。让我们尝试进一步探索。
2 主机/操作信息
在侦察方面,了解主机/操作系统是一个非常基本的步骤。WMI 有两个类,即 Win32_OperatingSystem
和 Win32_ComputerSystem
,可以提供相关信息。对于此示例来说,将过滤掉垃圾以仅打印所需的必要信息。
Get-WmiObject -Class win32_computersystem -Property bootupstate,username,totalphysicalmemory,systemtype,systemfamily,domain,dnshostname,oemstringarray
![图片[1]-WMI 攻击手法研究 – 识别和枚举 (第四部分)-零度非安全](https://res.zeronohacker.com/2021/10/systeminfo.png)
因此,我们现在拥有的大部分信息都可以帮助我们做一件重要的事情,那就是确定是否处于模拟环境中。当前运行的启动状态表明系统不是在故障安全模式下启动的。我们还可以看到当前的用户是 pew 并且不是任何 AD 域的一部分。我们还获得了可供使用的处理器架构和 RAM。这对于 VM 检测很有用,例如,如果逻辑处理器的数量小于 4 并且可用 RAM 低于 2 Gigs,那么 VM 的可能性很高。当然,SystemFamily
和 OEMStringArray
属性提供了相同的数据,但在受控环境中,可能还有其他指标。
另一个类 Win32_OperatingSystem
也为我们提供了很多有用的信息:
Get-WmiObject -Class win32_operatingsystem | fl *
![图片[2]-WMI 攻击手法研究 – 识别和枚举 (第四部分)-零度非安全](https://res.zeronohacker.com/2021/10/os.png)
3 目录列表
列出系统上的文件是一项非常基本的操作。WMI 有一个名为 Win32_Directory
的类,可帮助列出文件。或者,还有另一个名为 CIM_DataFile
的类也可用于实现相同的目的。
Get-WmiObject -Class win32_directory
![图片[3]-WMI 攻击手法研究 – 识别和枚举 (第四部分)-零度非安全](https://res.zeronohacker.com/2021/10/directory.png)
通常使用通配符搜索文件模式很有帮助。可以使用 cmdlet 的 -Filter
参数来实现类似的功能。假设对具有名为 snapshots
的文件夹的目录路径感兴趣。使用 WMI 查询它看起来像这样:
Get-WmiObject -Class win32_directory -Filter 'name LIKE "%snapshots%"'
4 AV 产品
进行侦察的第一步是枚举哪种产品为系统提供安全性。WMI 在 root\SecurityCenter2 命名空间下提供了一个名为 AntiVirusProduct
的类,其中包含有关安装在系统上的 AV 的信息。在我机器上,它是默认的 Windows Defender。
Get-WmiObject -Namespace root\securitycenter2 -Class antivirusproduct
![图片[4]-WMI 攻击手法研究 – 识别和枚举 (第四部分)-零度非安全](https://res.zeronohacker.com/2021/10/av.png)
5 服务
Windows 系统上的服务类似于 Unix 守护进程,或者只是在后台运行的非 UI 进程。当涉及到权限提升时,这是很有用的信息,尤其是在 SYSTEM 创建的服务具有较低的文件权限的情况下。
要列出服务,需要使用 Win32_Service
类。对于下面这个示例,将仅打印由 LocalSystem
(或 NT Authority\System
) 启动的服务。请注意 Powershell 实用程序的 select
使用,与没有它相比,它显着扩展了输出。
Get-WmiObject -Class win32_service -Filter 'startname="localsystem"' | select *
![图片[5]-WMI 攻击手法研究 – 识别和枚举 (第四部分)-零度非安全](https://res.zeronohacker.com/2021/10/services.png)
WMI 还提供了几种与服务交互的方法。它们允许创建、删除、启动、停止、恢复、更新和许多其他操作服务的功能。要列出 Win32_Service
类下可用的方法,可以使用以下命令:
Get-WmiObject -Class win32_service -List | select -ExpandProperty methods
![图片[6]-WMI 攻击手法研究 – 识别和枚举 (第四部分)-零度非安全](https://res.zeronohacker.com/2021/10/servicemethods.png)
6 登录用户
在系统上获取登录用户非常简单。有两个类 —— Win32_LoggedOnUser
和 Win32_LogOnSession
,它们保存有关会话和登录到系统用户的详细信息。从特权用户查询类可以为我们提供有关登录用户的更多信息:
Get-WmiObject -Class win32_loggedonuser
![图片[7]-WMI 攻击手法研究 – 识别和枚举 (第四部分)-零度非安全](https://res.zeronohacker.com/2021/10/logged.png)
从上面可以看出,每个登录的用户都有一个 LUID (locally-unique identifier)。一些 LUID 是预定义的。例如,系统帐户登录会话的 LUID 始终为 0x3e7 (十进制 999),网络服务会话的 LUID 为 0x3e4 (996),本地服务的 LUID 为 0x3e5 (997),大多数其他 LUID 是随机生成的。
每个登录用户都通过 Dependent
属性定义其依赖项。可以使用 Win32_LogOnSession
类获取每个会话的登录 ID、身份验证类型、开始时间和范围的列表:
Get-WmiObject -Class win32_logonsession | select authenticationpackage,logonid,starttime,scope
![图片[8]-WMI 攻击手法研究 – 识别和枚举 (第四部分)-零度非安全](https://res.zeronohacker.com/2021/10/session.png)
7 安装的补丁
枚举机器上安装的更新/补丁通常很有用。如果系统缺少重要补丁,这可能会很容易在一次快速攻击中破坏系统。 WMI 有一个称为 Win32_QuickFixEngineering
的类,其中包含有关已安装更新和安全补丁的信息。查询类是小菜一碟:
Get-WmiObject -Class win32_quickfixengineering
![图片[9]-WMI 攻击手法研究 – 识别和枚举 (第四部分)-零度非安全](https://res.zeronohacker.com/2021/10/patch.png)
8 事件日志
Win32_NtLogEvent
类为我们提供了有关系统捕获的事件日志的有用数据。可以使用以下命令来查询:
Get-WmiObject -Class win32_ntlogevent
![图片[10]-WMI 攻击手法研究 – 识别和枚举 (第四部分)-零度非安全](https://res.zeronohacker.com/2021/10/event.png)
每个日志条目都包含详细信息,例如时间、生成事件的来源、严重性和消息。严重性由输出中的 Type 属性指示。 谈到事件类型,有五个不同的级别,如下表所示:
Value | Meaning |
1 | Error |
2 | Warning |
4 | Information |
8 | Security Audit Success |
16 | Security Audit Failure |
当然,我们可以使用 -Filter 参数来搜索特定的事件类型。
9 共享
Win32_Share
类表示系统上的共享资源。这可能是磁盘驱动器、打印机、进程间通信或其他可共享设备。在企业网络中,通常有很多共享,可能在渗透测试期间派上用场。让我们看看如何枚举可用共享:
Get-WmiObject -Class win32_share | select type,name,allowmaximum,description,scope
![图片[11]-WMI 攻击手法研究 – 识别和枚举 (第四部分)-零度非安全](https://res.zeronohacker.com/2021/10/shares.png)
在上面的示例中,使用 select
仅过滤了所需的有用信息。从命令的输出中获得了每个可用共享的共享类型、名称、并发访问权限、描述和范围。同样,类型是定义共享资源类型的常量:
Value | Meaning |
0 | Disk Drive |
1 | Print Queue |
2 | Device |
3 | IPC |
2147483648 | Disk Drive Admin |
2147483649 | Print Queue Admin |
2147483650 | Device Admin |
2147483651 | IPC Admin |
AllowMaximum
是一个布尔属性,指示对资源的并发访问是否受到限制。如果该值设置为 True,则对共享访问没有限制,否则可能表明资源中存在敏感内容,或者更好地监视访问共享的客户端。
WMI 还提供 Create
、SetShareInfo
和 Delete
等方法来创建、更新和删除共享。
![图片[12]-WMI 攻击手法研究 – 识别和枚举 (第四部分)-零度非安全](https://res.zeronohacker.com/2021/10/sharemethods.png)
10 网络信息
网络信息由 Win32_IP4RouteTable
类提供。类似于 ipconfig
命令,但更详细。
Get-WmiObject -Class win32_ip4routetable
![图片[13]-WMI 攻击手法研究 – 识别和枚举 (第四部分)-零度非安全](https://res.zeronohacker.com/2021/10/network.png)
在谈论网络内容时,我想提到另一个名为 Win32_NetworkAdapter
的有用类。查询它可以为我们提供有关系统拥有的网络硬件的有用指示。这反过来对 VM 检测很有用,例如,可以运行以下查询来识别系统是否被 VMWare 虚拟化:
Get-WmiObject -Class Win32_NetworkAdapter -Filter 'name like "%vmware%"'
Get-WmiObject -Class Win32_NetworkAdapter -Filter 'manufacturer like "%vmware%"'
11 用户帐户
用户帐户信息由 Win32_UserAccount
类提供。对于默认的本地系统,只有几个帐户,最常见的是管理员、来宾、本地用户和 Windows Defender (WDAGUtilityAccount
)。可以通过以下方式快速获取用户列表:
Get-WmiObject -Class win32_useraccount
![图片[14]-WMI 攻击手法研究 – 识别和枚举 (第四部分)-零度非安全](https://res.zeronohacker.com/2021/10/accounts.png)
但是,对于加入域或域控制器,还会有其他几个帐户,包括 krbtgt
、sqladmin
、webadmin
等。对于默认的 Windows Server 2012 设置,只有 3 个帐户,如下所示。
![图片[15]-WMI 攻击手法研究 – 识别和枚举 (第四部分)-零度非安全](https://res.zeronohacker.com/2021/10/account1.png)
12 用户组
与用户帐户类似,用户组信息由 Win32_Group
类提供。在本地上查询类很容易:
Get-WmiObject -Class win32_group
![图片[16]-WMI 攻击手法研究 – 识别和枚举 (第四部分)-零度非安全](https://res.zeronohacker.com/2021/10/group.png)
如果在企业环境中运行相同的命令,例如在加入域的网络中,组的数量会增加,让我们可以更广泛地了解网络上的用户组。这将包括本地域、当前域、受信任域和受信任群:
![图片[17]-WMI 攻击手法研究 – 识别和枚举 (第四部分)-零度非安全](https://res.zeronohacker.com/2021/10/group1.png)
13 系统机密
当涉及到侦察时,系统机密再次成为枚举的有用信息。如果在系统上有足够的权限,那么就可以创建磁盘的卷影副本并尝试从那里提取机密。但在此之前,对于那些不熟悉卷影副本的人:
为了卷影与副本进行交互,有 2 种可用的方法,如下图所示:
![图片[18]-WMI 攻击手法研究 – 识别和枚举 (第四部分)-零度非安全](https://res.zeronohacker.com/2021/10/shadowmethods.png)
快速创建卷影副本很容易,只需要指定创建副本的卷和上下文:
(Get-WmiObject -Class win32_shadowcopy -List).create("C:\", "ClientAccessible")
![图片[19]-WMI 攻击手法研究 – 识别和枚举 (第四部分)-零度非安全](https://res.zeronohacker.com/2021/10/shadowcreate.png)
为此,我们可以创建一个符号链接,以便从本地资源管理器轻松访问卷影副本:
$link = (Get-WmiObject -Class win32_shadowcopy).deviceobject + "/"
cmd /c mklink /d C:\shadowcopy "$link"
![图片[20]-WMI 攻击手法研究 – 识别和枚举 (第四部分)-零度非安全](https://res.zeronohacker.com/2021/10/shadowlink.png)
一旦准备好使用卷影副本,那就可以简单地使用 -Thorough
选项运行诸如 Invoke-SessionGopher.ps1 之类的工具来搜索文件系统上的机密。这将为 PuTTY、WinSCP、FileZilla、SuperPuTTY、RDP 等生成保存的会话信息。就我自已机器而言,我使用脚本找到了一些保存的 RDP 会话和 PuTTY 会话。
![图片[21]-WMI 攻击手法研究 – 识别和枚举 (第四部分)-零度非安全](https://res.zeronohacker.com/2021/10/sessiongop.png)
14 结论
所以这完全是一篇通过 WMI 收集信息的简单文章。我们看到了如何方便地只需轻按几个键即可收集如此多的有用数据。当然,上面提供的信息并不是详尽无遗的,在侦察方面有无限的可能性需要考虑。
这就是现在的人们,我将在我们的下一篇文章中与您见面,将重点介绍通过 WMI 进行的 Active Directory 枚举。Sláinte!
请登录后发表评论
注册
社交帐号登录