WMI
,是Windows 2K/XP管理系统的核心;对于其他的Win32
操作系统,WMI
是一个有用的插件。WMI
以CIMOM
为基础,CIMOM
即公共信息模型对象管理器(Common Information Model Object Manager),是一个描述操作系统构成单元的对象数据库,为MMC
和脚本程序提供了一个访问操作系统构成单元的公共接口。有了WMI
,工具软件和脚本程序访问操作系统的不同部分时不需要使用不同的API;相反,操作系统的不同部分都可以插入WMI
由于刚刚提到的PsExec
在内网中大杀四方后,很多安全厂商开始将PsExec
加入了黑名单,所以攻击者暴露的可能性陡然增加。但是根据研究情况来看,Windows操作系统默认不会将WMI
的操作记录到日志当中,而且因为采用的是无文件攻击,所以导致WMI具有极高的隐蔽性。由此,越来越多的APT开始使用WMI
进行攻击,利用WMI
可以进行信息收集、探测、反病毒、虚拟机检测、命令执行、权限持久化等操作。
使用 wmic
远程执行命令,在远程系统中启动 Windows Mannagement Instrumentation
服务(目标服务器需要开放 135 端口,wmic 会以管理员权限在远程系统中执行命令)
查询进程信息
远程创建进程
wmic
也可以用来调用cmd
执行系统命令,跟at
命令类似,wmic
调用cmd的时候也是没有回显的,所以我们还是写入txt用type命令进行查看
wmic /node:192.168.52.138 /user:administrator /password:qwe123!@# process call create "cmd.exe /c ipconfig > C:\result.txt"
使用type命令读取写入txt的结果如图所示
wmiexec
wmiexec
是windows自带的wmic
的加强版,在渗透过程中使用wmiexec
会比wmic
和psexec
更加方便,这里就介绍几种常用的wmiexec
工具进行渗透。
impacket中的wmiexec.py
首先在github上下载impacket
安装包:https://github.com/SecureAuthCorp/impacket
使用命令
注意:对于运行时间较长的命令,例如ping
、systeminfo
等,需要添加-wait 5000
或更长时间的参数。
由于正常的命令都要查看结果,所以执行的命令后面都会加上重定向符,把结果输出到文件中。所以wmiexec.vbs
在运行nc反弹shell或者msf木马木马等不需要输出结果但需要一直运行的程序时,因为木马进程会一直存在,导致结果文件被占用,不能删除,也不能改写。出现这种情况后由于结果文件被占用,所以WMIEXEC
不能工作,除非手动更改脚本中的结果文件名。或者可以用taskkill 远程结束掉卡死的进程,然后WMIEXEC
可以恢复工作。为了解决这个问题,加入了“-persist” 选项。
当命令加了“-persist
” 选项后,程序会在后台运行,不会有结果输出,而且会返回这个命令进程的PID,方便结束进程。
wmiexec.vbs
wmiexec.vbs
可以在远程系统中执行命令并进行回显,获得远程主机的半交互式shell
输入如下命令,使用 wmiexec.vbs
在远程主机上执行单条命令
Invoke-WMIMethod
利用 PowerShell
自带的 Invoke-WMIMethod
,可以在远程系统主机上执行命令和指定程序
#目标系统用户名
$User = "WIN-U8TRGT93CTR\administrator"
#目标系统密码
$Password= ConvertTo-SecureString -String "qwe123!@#" -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.10.3" -Credential $Cred
这时候靶机进程就会出现calc.exe