WMI可以描述为一组管理Windows系统的方法和功能。我们可以把它当作API来与Windows系统进行相互交流。WMI在渗透测试中的价值在于它不需要下载和安装, 因为WMI是Windows系统自带功能。而且整个运行过程都在计算机内存中发生,不会留下任何痕迹。这一点是其它渗透测试工具所不能相比的。
图片来源: msdn.microsoft.com
然而,WMIC不仅仅只是用于检索系统信息。在渗透测试中, 使用适当的命令,它也可以执行各种有用的任务。
在渗透测试中, 我们经常遇到反病毒程序阻止payload运行。 这时候我们可以通过WMIC命令来卸载反病毒程序。
上面我们提到卸载反病毒程序来运行payload。 但是有时候我们没有足够的权限去卸载程序。 这时我们可以通过WMIC命令来停止运行反病毒服务。
· 第一步, 找到反病毒程序
· 第二步, 通过WMIC命令来停止运行反病毒服务
自从PowerShell的出现,WMI功能已经被完全整合到了PowerShell里面。在PowerShell中, WMI拥有多个类型的种类,每个种类都代表一个内部组件:Win32_proces代表当前系统所运行程序。 Win32_Service代表当前系统所运行服务等等。每个种类都有它自己的属性,我们可以使用WQL语言来进行查询。它的语法与SQL语言非常接近。那么要在Windows环境中列出所有种类, 我们可以使用PowerShell Get-WmiObject cmdlet来实现。
类型被分组在namespaces or aliases中。以上我们得到的所有资源列表都属于CIMV2 namespaces,包含大多数系统命令。还有其它可由第三方产品提供或注册的其他产品。我们可以用以下命令查找:
使用WQL与WMI相互交流只能提供只读访问,除此之外, 我们可以使用Windows上的WMIC实用程序, 向我们提供一个CMD.EXE端口。
正如前面提到的,WMI的真正优势在于能够远程控制这些系统。因此,为了在另一个系统上产生新的CMD.EXE端口,我们可以发布以下命令:
需要注意的是: 当远程执行代码时,请务必使用不受UAC限制的帐户。 比如说administrator帐户和具有本地管理权限的域帐户等等。
使用WMIC进行远程命令执行的主要挑战是将输出返回。解决这个问题的一个便捷快速的方法是将文件重定向。也就是说, 我们可以将命令输出存入共享网络驱动盘。然后再复制到本地驱动盘。
· 第一步, 设置共享网络驱动盘
· 第二步, 再复制到本地驱动盘
· 第三步, 查看结果
什么是Impacket框架?
Impacket是用于处理网络协议的Python功能集合。重点在于提供低级别的编程访问分组和一些协议(例如NMB、SMB1-3和MS-DCEPC)来实现本身功能。可以从头开始构建数据包,也可以从原始数据中解析数据包,而面向对象的API使得使用协议的深层层次结构变得简单。Impacket框架提供了一系列工具来帮助我们来完成渗透测试。
在Linux上,我们可以使用著名的Impacket框架中的WMiQuery.Py脚本远程发布WQL查询:
如果您正在寻找Linux平台上的快速远程命令执行,那么最好使用Impacket框架中的WMIEXEC.PY脚本。WMIEXEC.PY脚本优势再于它能够直接运行命令并得到命令的输出。不需要将命令输出存入共享网络驱动盘。然后再复制到本地驱动盘。
在Impacket框架中, 我们可以使用wmipersist.py脚本来创建或删除WMI活动。通过WQL过滤器或指定的定时器执行Visual Basic脚本。
· 第一步, 创建Visual Basic脚本
# persist-cmd.vbs
Set oShell = CreateObject ("WScript.Shell")
oShell.run "cmd.exe /C ipconfig -all "
· 第二步, 设置WMI活动
wmipersist.py domain.net/adminuser:passwd@host install -name IPCONFIG
-vbs persist-cmd.vbs
-filter 'SELECT * FROM __InstanceCreationEvent WITHIN 5 WHERE TargetInstance
ISA "Win32_Process" AND TargetInstance.Name = " iexplore.exe"'
或者设置WMI活动按照指定的定时器来执行Visual Basic脚本:
wmipersist.py domain.net/adminuser:passwd@host install -name IPCONFIG
-vbs persist-cmd.vbs -timer XXX
XXX是毫秒
· 第三步, 删除WMI活动
wmipersist.py domain.net/adminuser:passwd@host remove -name IPCONFIG
注释: 如果你不指定密码,脚本在执行中会提示输入密码。域名是可选项
什么是Empire 框架?
Empire 框架是一个纯粹的PowerSehll后续开发代理。 它建立在密码安全通信频道并且有着灵活的架构。Empire实现了运行PowerShell 代理的能力而不需要PowerShell.exe,并且可以快速部署开发工具,比如说关键记录器和Mimikatz,同时可以很快适应到现有通信频道而且逃避网络检测。所有这些都包装在以可用性为中心的框架中。
该模块将安装Empire代理 在域机器上。Empire并让代理在目标电脑上执行阶段程序。 通过WMI, Empire将在后台处理分级协议并发送新的代理检查通知。
该模块将为指定的目标(SETHC.exe、Utilman.exe、OSK.exe、DealActudi.exe或Max .exe)来设置调试器,使之成为选择的目标(即CMD.exe)或阶段程序。这类似于持久性/调试器模块,但具有远程执行而不是本地执行功能。
该模块可以帮助我们在提升权限条件下保持访问持久化。它在系统启动时或在系统启动过程中以每5分钟或在每日固定时间添加永久WMI订阅。一旦WMI访问持久化永久添加到系统中, 很难被发现和清除。
本文分享了WMI在渗透测试中的重要性。 除了WMI自带功能以外, 我们还谈到了如何在PowerShell中运行WMI功能。 在第三方框架中, 我们涉及到了Impacket 和Empire, 如何在第三方框架中运行WMI功能和检索系统信息。 同时进行横向运动和保持访问持久化。 由于WMI在计算机内存中运行,不会留下任何痕迹,所以很难被发现。
本文作者:wangxianlg
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/72493.html
文章数:2 | 积分: 45 | |
AssessIT risk helps you to take control of IT and security risk! Harness business policies for IT and security risks, vulnerabilities, and threats! |
利用WMI代替psexec——WMIEXEC.vbs
https://www.secpulse.com/archives/32197.html
关闭wmi组件是不是就安全了