首页 网络安全 漏洞挖掘 查看内容

精彩!Windows再现任意文件提权漏 CVE-2020-0667漏洞情报

2020-6-11 16:22 |来自: 互联网 3752 0

摘要: 在这篇文章中,我将讨论我在Windows服务跟踪中发现的一个任意文件移动漏洞。从我的测试来看,它影响了从Vista到10的所有Windows版本,但它可能更老,因为这个功能在XP中已经有了。简介Service Tracing是一个古老的功能,最早可以追溯到Windows XP,而在更古老的操作系统中可能也存在类似功能。它旨在提 ...
关键词: 文件 服务 日志 MaxFileSize Windows 模块 大小 注册表 输出


在这篇文章中,我将讨论我在Windows服务跟踪中发现的一个任意文件移动漏洞。从我的测试来看,它影响了从Vista到10的所有Windows版本,但它可能更老,因为这个功能在XP中已经有了。


简介

Service Tracing是一个古老的功能,最早可以追溯到Windows XP,而在更古老的操作系统中可能也存在类似功能。它旨在提供有关运行服务和模块的一些基本调试信息,它可由任何本地用户配置,只需在HKLMSOFTWAREMicrosoftTracing下编辑一些注册表键和值。

一个服务或模块往往与其中一个注册表键相关联。每个键包含6个值(相关设置)。我们将关注其中的三个值:EnableFileTracing(启用/禁用“跟踪”)、FileDirectory(设置输出日志文件的位置)和MaxFileSize(设置日志文件的最大文件值)。

在启用了EnableFileTracing后,目标服务将开始写入你选择的目录中的日志文件。一旦输出文件的大小超过MaxFileSize,它就会被移动(.log扩展名改为.old),并创建一个新的日志文件。

多亏了有James Forshaw的符号链接测试工具,让我们利用这个漏洞变得非常简单。我们所需要做的就是将日志目录设置为RPC Control对象目录的挂载点,然后创建两个符号链接:

·

一个从MODULE.LOG链接到你控制的文件(其大小必须大于MaxFileSize)。

·

·

另外一个从MODULE.OLD链接到文件系统中的任意文件(例如C:WindowsSystem32WindowsCoreDeviceInfo.dll)。

·

最后,文件的一系列改动被触发(以NT AUTHORITYSYSTEM权限),通过Update Session Orchestrator服务来执行任意命令。

The Tracing Feature for Services

如前所述,任何本地用户都可以配置Service Tracing功能,只需在HKLMSOFTWAREMicrosoftTracing下编辑一些注册表键和值即可。

使用来自Windows Sysinternals工具套件的AccessChk,我们可以看到普通用户几乎对所有的子键都具有读/写权限。


在本文的其余部分,我将使用RASTAPI模块作为示例,因为它是我利用的一个模块。这个模块由IKEEXT服务使用。因此,通过初始化虚拟VPN连接可以很容易地触发日志事件。下面的屏幕截图显示了注册表项的默认内容。为其他服务和模块配置了完全相同的值。



从本地攻击者的角度来看,最有趣的在下面



通过设置这些值,我们可以:

·

将EnableFileTracing设置为0或1,强制特定的服务或模块启动或停止输出日志文件(调试信息写入日志文件)。

·

·

设置FileDirectory来指定日志文件的位置。

·

·

设置MaxFileSize指定输出文件的最大大小。


The Arbitrary File Move Vulnerability

·

考虑到前面的上下文元素,可以很容易地解释漏洞。


Case #1: MaxFileSize - Default value

对于第一个测试用例,我简单地将C:LOGS设置为输出目录并启用文件跟踪。



现在,如果我们希望目标服务开始写入这个文件,我们必须生成一些事件。一种非常简单的方法是使用rasdial命令和一个PBK文件初始化一个虚拟VPN连接。

I它执行了,日志文件是由NT AUTHORITY系统编写的。它的大小大约是24KB。



Case #2: MaxFileSize - Custom value

在前面的测试中,我们看到输出日志文件的最终大小约为24KB。因此,这一次,我们将把MaxFileSize设置为0x4000(16,384字节)并重新启动测试。



“进程监视器”捕获的事件可以总结如下:


1.服务获取关于日志文件的基本信息。我们可以看到EndOfFile的偏移量为23,906,这是此时文件的大小。问题是,我们指定了最大文件大小为16,384字节,因此系统将判定没有更多的空闲空间。使用FileName=C:LOGS rasta . old调用SetRenameInformationFile。换句话说,因为现有文件被判定达到最大容量了,所以它从C:LOGS rasta . log移到了C:LOGSRASTAPI.OLD。


2. 该服务创建一个新的C:LOGS rasta . log文件并开始对其进行写入。


3. “Move” 操作作为NT AUTHORITY系统执行。因此,它可用于所有文件移动到文件系统上的任何位置,比如C:WindowsSystem32.

利用

整体攻击流程可概括为:

1.创建(或复制)一个大于0x8000(32768)字节的恶意DLL(FakeDll.dll)。

2.创建一个新目录(例如C:EXPLOITmountpoint),并将其设置为RPC Control的挂载点。

3.创建以下符号链接:

RPC ControlRASTAPI.LOG -> ??C:EXPLOITFakeDll.dll (owner = current user)

RPC ControlRASTAPI.OLD -> ??C:WindowsSystem32WindowsCoreDeviceInfo.dll

4.在注册表中配置以下值:

FileDirectory = C:EXPLOITmountpoint

MaxFileSize = 0x8000 (32,768? bytes)

EnableFileTracing = 1

5.使用Windows API中的RasDial功能触发RASTAPI的相关事件。

6.触发Update Session Orchestrator服务,以NT AUTHORITYSYSTEM权限加载恶意DLL。


Links & Resourc

MSRC - CVE-2020-0668


https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-0668

-

Windows Exploitation Tricks: Exploiting Arbitrary File Writes for Local Elevation of Privilege


https://googleprojectzero.blogspot.com/2018/04/windows-exploitation-tricks-exploiting.html

i

Symbolic Link Testing Tools


https://github.com/googleprojectzero/symboliclink-testing-tools

k

UsoDllLoader


https://github.com/itm4n/UsoDllLoader

m

My PoC for CVE-2020-0668


https://github.com/itm4n/SysTracingPoc

b.com/itm4n/SysTracingPoc

·

本文翻译至 https://itm4n.github.io/cve-2020-0668-windows-service-tracing-eop/

本文出处: https://www.toutiao.com/i6831166832506831374/
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手
1

鲜花

鸡蛋

刚表态过的朋友 (1 人)

最新评论

返回顶部