admin管理员组文章数量:1601520
本文作者:伍默(内网知识星球学员)
本文是以WMI的重写版,本来这份笔记会更长,原版的笔记以Black Hat 2015的Abusing Windows Management Instrumentation (WMI) to Build a Persistent, Asyncronous, and Fileless Backdoor为主要学习资料,在笔记写到大概一万字的时候,Typora 中保存的内容部分丢失。于是重新整理,有了这份,我认为精简版的WMI笔记。
WMI 背景
WMI 是什么?Windows管理规范(WMI)是Microsoft对基于Web的业务管理标准(WBEM),公共信息模型(CIM)和分布式管理任务组(DMTF)的实现。
换句话说:Microsoft + CIM + WBEM +DMTF = WMI
打开MSDN 中关于WMI的描述是这样:
Windows Management Instrumentation (WMI) is the infrastructure for management data and operations on Windows-based operating systems。
Windows管理工具(WMI)是基于Windows操作系统的管理数据和操作的基础设施。
快速的过一下这部分内容的重点:
WMI实际上的历史非常久远,最早在Windows 2000中内置,后面所有的Windows 系统中都内置了该项服务。
WMI使用公共信息模型 (CIM) 表示托管组件,其中包括系统、应用程序、网络等等
CIM中使用 “Class"(类)表示管理对象,类的实例是“Object”,名称空间(Namespace)是一个类的集合。类包含属性(Property)和方法(Method)。
WMI支持Schema的概念。Schema 是描述特定管理环境的一组类。Microsoft Windows SDK 中使用了两个 Schema : CIM Schema 和 Win 32 Schema 。CIM Schema Class 使用 "CIM_" 开头,Win32 Schema Class 使用 "Win32_" 开头。
和WMI交互
在开始WMI之前,我建议 WmiExplorer 查看 自己机器上的Namespaces、Class、Property、Method等等,对我说的概念有一个简单的了解,复杂你可能会看着很懵。
为了验证上面我描述的一些内容,我建议WmiExplorer进行查看:
可以注意到前面描述中的Namespace、Class、Properties、Methods……。
实际上和WMI交互有多种方法:
Powershell
wmic.exe
wbemtest.exe
winrm.exe and winrm.vbs
WMI Explorer
-
WMI Explorer 2.0.0.2
WMI Explorer
WMI Tools
CIM Explorer 2020(收费,但是非常强大,对类进行了中文说明,VBscript、powershell 代码简洁,推荐)
Windows Script Host Languages(VBScript – JScript)
IWbem* COM API
.NET System.Management classes
Linux:wmic and wmis
另外两个小工具:
WMI Code Creator
这是微软官方出的一款代码生成器,可生成C#、VB 、VB Script代码
WMIGen
可生成各种变成语言,调用WMI
除了”IWbem* COM API“和”.NET System.Management classes“没有试过,其余的工具均有测试,推荐使用WMI Explorer ,GUI界面非常好用。
WMI Query Language (WQL)
参考:
Querying with WQL
(https://docs.microsoft/en-us/windows/win32/wmisdk/querying-with-wql)
WQL (SQL for WMI)
(https://docs.microsoft/en-us/windows/win32/wmisdk/wql-sql-for-wmi)
WMI 查询语言(WQL)是ANSI SQL 的子集,WQL支持以下的查询:
Data queries
SELECT [Class property name|*] FROM [CLASS NAME] <WHERE [CONSTRAINT]>
Event queries
SELECT [Class property name|*] FROM [INTRINSIC CLASS NAME] WITHIN [POLLINGINTERVAL] <WHERE [CONSTRAINT]>
Schema queries
SELECT [Class property name|*] FROM [Meta_Class<WHERE [CONSTRAINT]>
详细的语法请参考文档,这里不做过多介绍,用的最多的是 data queries ,请在实际查询中使用,需要明确的是WQL仅能查询,无法使用 Methods 进行增删改等操作。
Remote WMI Protocols
WMI 可以使用两种协议用于Remote WMI:分布式组件对象模型 (DCOM) 和 Windows 远程管理 (WinRM)。
DCOM
Microsoft 在TCP 135 端口和一系列的动态端口(不同版本不一样) 运行DCE RPC end-point mapper为它的DCOM服务
端口可通过注册表项
HKEY_LOCAL_MACHINE\Software\Microsoft\Rpc\Internet\中
的Ports设置
可通过DCOMCNFG.exe 配置
对防火墙不友好(使用 TCP 135和一系列动态端口 1024 到 65535)
默认情况下 Wmi Service ——Winmgmt 在135端口下运行和监听
WinRM/PowerShell Remoting
参考:
About Windows Remote Management(https://docs.microsoft/en-us/windows/win32/winrm/about-windows-remote-management)
实验之前,请务必阅读一遍官方官方文档,哪怕是草草看过。
介绍Windows Remote Management(Winrm)之前,先了解WS-Management ,Ws-Man 协议是基于SOAP协议的DMTF开放标准,WinRM则是对WS-Man协议的 Windows 实现。
DMTF是不是感觉有点耳熟?前面说WMI背景中就提到过。
默认情况下,从Windows Vista开始成为Windows 的默认组件,从Windows Server 2008 开始, WinRM服务自动启动
默认情况下,未配置WinRM侦听器,即使WinRM服务在运行,无法接受和请求WS-Man 协议消息
Ws-Man 流量是加密的,不论HTTP 或HTTPS
默认配置侦听端口是:HTTP(5985)和HTTPS(5986)
-
注意,这里的默认配置指定是 Winrm quickconfig 之后。
需要明确的是两种协议均支持NTLM or Kerberos,也就是说,Pass The Hash和Pass The Ticket对 Wmi 和WinRM均适用
Powershell-DCOM
从Powershell v3 及后续版本,Powershell 中提供了两种 Cmdlets:
CIM Cmdlets
WMI Cmdlets
前面我提到过namespace,如果不显式指定,默认namespace 为 root\CIMv2
CIM cmdlets 和WMI Cmdlets 差异在于 CIM Cmdlets 使用WSMAN(WinRM)连接远程计算机,WMI Cmdlets 是所有的是DCOM 连接远程计算机。
如果CIM Cmdlets 使用DCOM 无法建立会话,可以使用 -Protocol 参数退回到DCOM
#WMI Cmdlets
$Username ="0day\Administrator"
$Password = ConvertTo-SecureString "Admin!@#45" -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential
$Username,$Password
#为了避免凭据提示弹框
Get-WmiObject -ComputerName OWA2010SP3 -Credential $Credential -Class
Win32_Process |Select-Object Name,ProcessId
#这里枚举了下进程
#另外支持WQL查询
Get-WmiObject -Query "select * from Win32_Process" |Select-Object Name,ProcessID
#该命令和上面的效果相同
Powershel-WinRM
#CIM cmdlets
$Username ="0day\Administrator"
$Password = ConvertTo-SecureString "Admin!@#45" -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential
$Username,$Password
$CimSessionOption = New-CimSessionOption -Protocol Dcom
$CimSession = New-CimSession -computerName OWA2010SP3 -Credential $Credential -SessionOption $CimSessionOption
版权声明:本文标题:WMI ——重写版 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1725455735a1024166.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论