Windows渗透测试中wmi的利用
0x01 关于WMI
WMI可以描述为一组管理Windows系统的方法和功能。我们可以把它当作API来与Windows系统进行相互交流。WMI在渗透测试中的价值在于它不需要下载和安装, 因为WMI是Windows系统自带功能。而且整个运行过程都在计算机内存中发生,不会留下任何痕迹。这一点是其它渗透测试工具所不能相比的。
0x02 WMI信息收集
1. 检索系统已安装的软件
wmic product list brief |more
2. 搜索系统运行服务
wmic service list brief |more
2. 搜索运行中的程序
wmic process list brief |more
4. 搜索启动程序
wmic startup list brief |more
5. 搜索共享驱动盘
wmic netuse list brief |more
6. 搜索时区
wmic timezone list brief |more
7. 搜索用户帐户
wmic useraccount list brief |more
8. 搜索计算机域控制器
wmic ntdomain list brief
9. 搜索登录用户
wmic logon list brief |more
9. 搜索已安装的安全更新
wmic qfe list brief |more
0x03 WMI执行任务
WMIC不仅仅只是用于检索系统信息。在渗透测试中, 使用适当的命令,它也可以执行各种有用的任务。
1. 卸载和重新安装程序
在渗透测试中, 我们经常遇到反病毒程序阻止payload运行。 这时候我们可以通过WMIC命令来卸载反病毒程序。
Wmic product where "name like '%forit%' " get name
第二步, 通过WMIC命令来停止运行反病毒服务
Wmic process where name=“XXX.exe” call terminate
0x04 PowerShell
自从PowerShell的出现,WMI功能已经被完全整合到了PowerShell里面。在PowerShell中, WMI拥有多个类型的种类,每个种类都代表一个内部组件:Win32_proces代表当前系统所运行程序。 Win32_Service代表当前系统所运行服务等等。每个种类都有它自己的属性,我们可以使用WQL语言来进行查询。它的语法与SQL语言非常接近。那么要在Windows环境中列出所有种类, 我们可以使用PowerShell Get-WmiObject cmdlet来实现。
类型被分组在namespaces or aliases中。以上我们得到的所有资源列表都属于CIMV2 namespaces,包含大多数系统命令。还有其它可由第三方产品提供或注册的其他产品。我们可以用以下命令查找:
0x05代码执行
使用WQL与WMI相互交流只能提供只读访问,除此之外, 我们可以使用Windows上的WMIC实用程序, 向我们提供一个CMD.EXE端口。
正如前面提到的,WMI的真正优势在于能够远程控制这些系统。因此,为了在另一个系统上产生新的CMD.EXE端口,我们可以发布以下命令:
需要注意的是: 当远程执行代码时,请务必使用不受UAC限制的帐户。 比如说administrator帐户和具有本地管理权限的域帐户等等。
使用WMIC进行远程命令执行的主要挑战是将输出返回。解决这个问题的一个便捷快速的方法是将文件重定向。也就是说, 我们可以将命令输出存入共享网络驱动盘。然后再复制到本地驱动盘。
- 第一步, 设置共享网络驱动盘
- ·第二步, 再复制到本地驱动盘
- 第三步, 查看结果
------------------------------------------------------------------------------------