|
这是 WMI 攻击手法研究系列文章第四篇,将更多地关注信息收集和枚举。WMI 提供了大量的类,可以从中列举出很多东西。因此,让我们来深入了解,不要再浪费时间了。
一、收集基本信息
在之前的文章中,已经有许多为我们提供有关系统的有价值信息的类,例如 StdRegProv 用于注册表,Win32_Process 用于系统上运行的进程,Win32_Bios 用于 BIOS 信息等。让我们尝试进一步探索。
二、主机/操作系统信息
在侦察方面,了解主机/操作系统是一个非常基本的步骤。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 *
复制代码
三、目录列表
列出系统上的文件是一项非常基本的操作。WMI 有一个名为 Win32_Directory 的类,可帮助列出文件。或者,还有另一个名为 CIM_DataFile 的类也可用于实现相同的目的。
- Get-WmiObject -Class win32_directory
复制代码
通常使用通配符搜索文件模式很有帮助。可以使用 cmdlet 的 -Filter 参数来实现类似的功能。假设对具有名为 snapshots 的文件夹的目录路径感兴趣。使用 WMI 查询它看起来像这样:
- Get-WmiObject -Class win32_directory -Filter 'name LIKE "%snapshots%"'
复制代码
四、AV 产品
进行侦察的第一步是枚举哪种产品为系统提供安全性。WMI 在 root\SecurityCenter2 命名空间下提供了一个名为 AntiVirusProduct 的类,其中包含有关安装在系统上的 AV 的信息。在我机器上,它是默认的 Windows Defender。
- Get-WmiObject -Namespace root\securitycenter2 -Class antivirusproduct
复制代码
五、服务
Windows 系统上的服务类似于 Unix 守护进程,或者只是在后台运行的非 UI 进程。当涉及到权限提升时,这是很有用的信息,尤其是在 SYSTEM 创建的服务具有较低的文件权限的情况下。
要列出服务,需要使用 Win32_Service 类。对于下面这个示例,将仅打印由 LocalSystem (或 NT Authority\System) 启动的服务。请注意 Powershell 实用程序的 select 使用,与没有它相比,它显着扩展了输出。
- Get-WmiObject -Class win32_service -Filter 'startname="localsystem"' | select *
复制代码
WMI 还提供了几种与服务交互的方法。它们允许创建、删除、启动、停止、恢复、更新和许多其他操作服务的功能。要列出 Win32_Service 类下可用的方法,可以使用以下命令:
- Get-WmiObject -Class win32_service -List | select -ExpandProperty methods
复制代码
六、登录用户
在系统上获取登录用户非常简单。有两个类 —— 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
复制代码
七、安装的补丁
枚举机器上安装的更新/补丁通常很有用。如果系统缺少重要补丁,这可能会很容易在一次快速攻击中破坏系统。 WMI 有一个称为 Win32_QuickFixEngineering 的类,其中包含有关已安装更新和安全补丁的信息。查询类是小菜一碟:
- Get-WmiObject -Class win32_quickfixengineering
复制代码
八、事件日志
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 参数来搜索特定的事件类型。
九、共享
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 等方法来创建、更新和删除共享。
十、网络信息
网络信息由 Win32_IP4RouteTable 类提供。类似于 ipconfig 命令,但更详细。
- Get-WmiObject -Class win32_ip4routetable
复制代码
在谈论网络内容时,我想提到另一个名为 Win32_NetworkAdapter 的有用类。查询它可以为我们提供有关系统拥有的网络硬件的有用指示。这反过来对 VM 检测很有用,例如,可以运行以下查询来识别系统是否被 VMWare 虚拟化:
- Get-WmiObject -Class Win32_NetworkAdapter -Filter 'name like "%vmware%"'
- Get-WmiObject -Class Win32_NetworkAdapter -Filter 'manufacturer like "%vmware%"'
复制代码
十一、用户帐户
用户帐户信息由 Win32_UserAccount 类提供。对于默认的本地系统,只有几个帐户,最常见的是管理员、来宾、本地用户和 Windows Defender (WDAGUtilityAccount)。可以通过以下方式快速获取用户列表:
- Get-WmiObject -Class win32_useraccount
复制代码
但是,对于加入域或域控制器,还会有其他几个帐户,包括 krbtgt、sqladmin、webadmin 等。对于默认的 Windows Server 2012 设置,只有 3 个帐户,如下所示。
十二、用户组
与用户帐户类似,用户组信息由 Win32_Group 类提供。在本地上查询类很容易:
- Get-WmiObject -Class win32_group
复制代码
如果在企业环境中运行相同的命令,例如在加入域的网络中,组的数量会增加,让我们可以更广泛地了解网络上的用户组。这将包括本地域、当前域、受信任域和受信任群:
十三、系统机密
当涉及到侦察时,系统机密再次成为枚举的有用信息。如果在系统上有足够的权限,那么就可以创建磁盘的卷影副本并尝试从那里提取机密。但在此之前,对于那些不熟悉卷影副本的人:
提示:卷影拷贝是 Microsoft Windows 中的一项技术,可以创建计算机文件或卷的备份副本或快照,即使它们正在使用中。
为了卷影与副本进行交互,有 2 种可用的方法,如下图所示:
快速创建卷影副本很容易,只需要指定创建副本的卷和上下文:
- (Get-WmiObject -Class win32_shadowcopy -List).create("C:", "ClientAccessible")
复制代码
为此,我们可以创建一个符号链接,以便从本地资源管理器轻松访问卷影副本:
- $link = (Get-WmiObject -Class win32_shadowcopy).deviceobject + "/"
- cmd /c mklink /d C:\shadowcopy "$link"
复制代码
一旦准备好使用卷影副本,那就可以简单地使用 -Thorough 选项运行诸如 Invoke-SessionGopher.ps1 之类的工具来搜索文件系统上的机密。这将为 PuTTY、WinSCP、FileZilla、SuperPuTTY、RDP 等生成保存的会话信息。就我自已机器而言,我使用脚本找到了一些保存的 RDP 会话和 PuTTY 会话。
十四、结论
所以这完全是一篇通过 WMI 收集信息的简单文章。我们看到了如何方便地只需轻按几个键即可收集如此多的有用数据。当然,上面提供的信息并不是详尽无遗的,在侦察方面有无限的可能性需要考虑。
这就是现在的人们,我将在我们的下一篇文章中与您见面,将重点介绍通过 WMI 进行的 Active Directory 枚举。Sláinte!
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|