文章目录[隐藏]
- 1 收集基本信息
- 2 主机/操作信息
- 3 目录列表
- 4 AV 产品
- 5 服务
- 6 登录用户
- 7 安装的补丁
- 8 事件日志
- 9 共享
- 10 网络信息
- 11 用户帐户
- 12 用户组
- 13 系统机密
- 14 结论
这是 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
因此,我们现在拥有的大部分信息都可以帮助我们做一件重要的事情,那就是确定是否处于模拟环境中。当前运行的启动状态表明系统不是在故障安全模式下启动的。我们还可以看到当前的用户是 pew 并且不是任何 AD 域的一部分。我们还获得了可供使用的处理器架构和 RAM。这对于 VM 检测很有用,例如,如果逻辑处理器的数量小于 4 并且可用 RAM 低于 2 Gigs,那么 VM 的可能性很高。当然,SystemFamily
和 OEMStringArray
属性提供了相同的数据,但在受控环境中,可能还有其他指标。
另一个类 Win32_OperatingSystem
也为我们提供了很多有用的信息:
Get-WmiObject -Class win32_operatingsystem | fl *
3 目录列表
列出系统上的文件是一项非常基本的操作。WMI 有一个名为 Win32_Directory
的类,可帮助列出文件。或者,还有另一个名为 CIM_DataFile
的类也可用于实现相同的目的。
Get-WmiObject -Class win32_directory
通常使用通配符搜索文件模式很有帮助。可以使用 cmdlet 的 -Filter
参数来实现类似的功能。假设对具有名为 snapshots
的文件夹的目录路径感兴趣。使用 WMI 查询它看起来像这样:
Get-WmiObject -Class win32_directory -Filter 'name LIKE "%snapshots%"'
4 AV 产品
进行侦察的第一步是枚举哪种产品为系统提供安全性。WMI 在 rootSecurityCenter2 命名空间下提供了一个名为 AntiVirusProduct
的类,其中包含有关安装在系统上的 AV 的信息。在我机器上,它是默认的 Windows Defender。
Get-WmiObject -Namespace rootsecuritycenter2 -Class antivirusproduct
5 服务
Windows 系统上的服务类似于 Unix 守护进程,或者只是在后台运行的非 UI 进程。当涉及到权限提升时,这是很有用的信息,尤其是在 SYSTEM 创建的服务具有较低的文件权限的情况下。
要列出服务,需要使用 Win32_Service
类。对于下面这个示例,将仅打印由 LocalSystem
(或 NT AuthoritySystem
) 启动的服务。请注意 Powershell 实用程序的 select
使用,与没有它相比,它显着扩展了输出。
Get-WmiObject -Class win32_service -Filter 'startname="localsystem"' | select *
WMI 还提供了几种与服务交互的方法。它们允许创建、删除、启动、停止、恢复、更新和许多其他操作服务的功能。要列出 Win32_Service
类下可用的方法,可以使用以下命令:
Get-WmiObject -Class win32_service -List | select -ExpandProperty methods
6 登录用户
在系统上获取登录用户非常简单。有两个类 —— Win32_LoggedOnUser
和 Win32_LogOnSession
,它们保存有关会话和登录到系统用户的详细信息。从特权用户查询类可以为我们提供有关登录用户的更多信息:
Get-WmiObject -Class win32_loggedonuser
从上面可以看出,每个登录的用户都有一个 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
7 安装的补丁
枚举机器上安装的更新/补丁通常很有用。如果系统缺少重要补丁,这可能会很容易在一次快速攻击中破坏系统。 WMI 有一个称为 Win32_QuickFixEngineering
的类,其中包含有关已安装更新和安全补丁的信息。查询类是小菜一碟:
Get-WmiObject -Class win32_quickfixengineering
8 事件日志
Win32_NtLogEvent
类为我们提供了有关系统捕获的事件日志的有用数据。可以使用以下命令来查询:
Get-WmiObject -Class win32_ntlogevent
每个日志条目都包含详细信息,例如时间、生成事件的来源、严重性和消息。严重性由输出中的 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
在上面的示例中,使用 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
等方法来创建、更新和删除共享。
10 网络信息
网络信息由 Win32_IP4RouteTable
类提供。类似于 ipconfig
命令,但更详细。
Get-WmiObject -Class win32_ip4routetable
在谈论网络内容时,我想提到另一个名为 Win32_NetworkAdapter
的有用类。查询它可以为我们提供有关系统拥有的网络硬件的有用指示。这反过来对 VM 检测很有用,例如,可以运行以下查询来识别系统是否被 VMWare 虚拟化:
Get-WmiObject -Class Win32_NetworkAdapter -Filter 'name like "%vmware%"'
代码语言:javascript复制Get-WmiObject -Class Win32_NetworkAdapter -Filter 'manufacturer like "%vmware%"'
11 用户帐户
用户帐户信息由 Win32_UserAccount
类提供。对于默认的本地系统,只有几个帐户,最常见的是管理员、来宾、本地用户和 Windows Defender (WDAGUtilityAccount
)。可以通过以下方式快速获取用户列表:
Get-WmiObject -Class win32_useraccount
但是,对于加入域或域控制器,还会有其他几个帐户,包括 krbtgt
、sqladmin
、webadmin
等。对于默认的 Windows Server 2012 设置,只有 3 个帐户,如下所示。
12 用户组
与用户帐户类似,用户组信息由 Win32_Group
类提供。在本地上查询类很容易:
Get-WmiObject -Class win32_group
如果在企业环境中运行相同的命令,例如在加入域的网络中,组的数量会增加,让我们可以更广泛地了解网络上的用户组。这将包括本地域、当前域、受信任域和受信任群:
13 系统机密
当涉及到侦察时,系统机密再次成为枚举的有用信息。如果在系统上有足够的权限,那么就可以创建磁盘的卷影副本并尝试从那里提取机密。但在此之前,对于那些不熟悉卷影副本的人:
卷影拷贝是 Microsoft Windows 中的一项技术,可以创建计算机文件或卷的备份副本或快照,即使它们正在使用中
为了卷影与副本进行交互,有 2 种可用的方法,如下图所示:
快速创建卷影副本很容易,只需要指定创建副本的卷和上下文:
代码语言:javascript复制(Get-WmiObject -Class win32_shadowcopy -List).create("C:", "ClientAccessible")
为此,我们可以创建一个符号链接,以便从本地资源管理器轻松访问卷影副本:
代码语言:javascript复制$link = (Get-WmiObject -Class win32_shadowcopy).deviceobject "/"
代码语言:javascript复制cmd /c mklink /d C:shadowcopy "$link"
一旦准备好使用卷影副本,那就可以简单地使用 -Thorough
选项运行诸如 Invoke-SessionGopher.ps1 之类的工具来搜索文件系统上的机密。这将为 PuTTY、WinSCP、FileZilla、SuperPuTTY、RDP 等生成保存的会话信息。就我自已机器而言,我使用脚本找到了一些保存的 RDP 会话和 PuTTY 会话。
14 结论
所以这完全是一篇通过 WMI 收集信息的简单文章。我们看到了如何方便地只需轻按几个键即可收集如此多的有用数据。当然,上面提供的信息并不是详尽无遗的,在侦察方面有无限的可能性需要考虑。
这就是现在的人们,我将在我们的下一篇文章中与您见面,将重点介绍通过 WMI 进行的 Active Directory 枚举。Sláinte!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。