安基网 欢乐生肖 资讯 安全报 查看内容

CVE-2020-0668:Windows Service Tracing本地提权漏洞分析

2020-2-21 13:51| 投稿: |来自:


免责声明:本站系公益性非盈利IT技术普及网,本文由投稿者转载自互联网的公开文章,文末均已注明出处,其内容和图片版权归原网站或作者所有,文中所述不代表本站观点,若有无意侵权或转载不当之处请从网站右下角联系我们处理,谢谢合作!

摘要: 译文声明本文是翻译文章,文章原作者itm4n,文章来源:itm4n.github.io原文地址:https://itm4n.github.io/cve-2020-0668-windows-service-tracing-eop/译文仅供参考,具体内容表达以及含义原文为准× 0x00 前言在本文中,我将与大家分享我在Windows Service Tracing中找到的一个任意文件移动漏洞。根 ...
译文声明

本文是翻译文章,文章原作者itm4n,文章来源:itm4n。github。io原文地址:https://itm4n。github。io/cve-2020-0668-windows-service-tracing-eop/


译文仅供参考,具体内容表达以及含义原文为准

0x00 前言

在本文中,我将与大家分享我在Windows Service Tracing中找到的一个任意文件移动漏洞。根据测试结果,该漏洞影响从Vista到10的所有Windows版本。由于XP系统中已存在该功能,因此该漏洞可能会影响更早的版本。

Service Tracing是Windows系统中很早就存在的一个功能,可以追溯到XP时代,但更早系统中可能已经包含该功能。Service Tracing可以提供正在运行的服务和模块的基础调试信息,配置起来非常方便,本地用户只要编辑HKLMSOFTWAREMicrosoftTracing下的某些注册表键值即可。

Windows系统中,服务或者模块会关联某些注册表项,其中每个键都包含6个值(即具体的设置信息)。这里我们主要关注其中3个值:EnableFileTracing(启用/禁用“跟踪”功能)、FileDirectory(设置输出日志文件的具体位置)及MaxFileSize(设置日志文件的最大文件大小)。

当启用EnableFileTracing选项后,目标服务会将日志文件写入用户选择的目录中。当输出文件大小超过MaxFileSize时,该文件会被系统移动(将。LOG扩展名替换为。OLD),创建一个新的日志文件。

借助于James Forshaw的符号链接测试工具,我们很容易就能构造利用工具,只需要将目标目录设置为挂载点,指向RPC Control对象目录,然后创建如下2个符号链接:

1、从MODULE.LOG到我们拥有的某个文件的符号链接(该文件大小必须大于MaxFileSize);

2、从MODULE.OLD到系统上任意文件的符号链接(比如C:WindowsSystem32WindowsCoreDeviceInfo.dll)。

最后,我们选择以NT AUTHORITYSYSTEM权限运行的服务作为目标来触发文件移动操作,然后利用Update Session Orchestrator服务来获得任意代码执行权限。

0x01 服务跟踪

前面简单提到过,任何本地用户都能配置Service Tracing功能,只要编辑某些注册表项,修改HKLMSOFTWAREMicrosoftTracing下的键值即可。

我们可以使用Windows Sysinternals工具集中的AccessChk工具,验证普通用户具备相关注册表项下几乎所有子项的的Read/Write权限:

为了演示方便,下文中我将以RASTAPI模块为例,这也是我利用代码中用到的模块。由于IKEEXT服务会用到该模块,因此我们可以通过启动任意VPN连接来触发事件日志行为。涉及到的相关注册表键值默认设置如下图所示,其他服务及模块也使用了完全相同的值。

从本地攻击者角度来看,比较有趣的几个值如下所示:

我们可以修改这些值,实现如下目标:

1、将EnableFileTracing修改为0或者1,强制特定服务或模块开始或停止将调试信息写入日志文件。

2、通过FileDirectory设置日志文件的具体位置。

3、通过MaxFileSize设置输出文件的最大大小值。

这里唯一要注意的是我们无法选择输出文件的名称,该名称取决于被调试服务或模块的名称,但我们可以通过符号链接轻松解决该问题。

0x02 任意文件移动漏洞

了解前面信息后,我们可以澄清该漏洞的利用过程。

场景1:MaxFileSize为默认值

在这个测试案例中,我将C:LOGS设置为输出目录,启用文件跟踪功能。

现在,如果我们希望目标服务开始写入该文件,就必须生成某些事件。这里最简单的一种方法就是使用rasdial命令,配合PBK文件来初始化任意一个VPN连接。

这种方法行之有效,NT AUTHORITYSYSTEM用户会写入日志文件。目前日志文件大小约为24KB。

场景2:MaxFileSize为自定义值

在上一个测试用例中,输出日志文件的最终大小约为24KB。因此,这里我们要将MaxFileSize设置为0x4000(即16,384个字节),然后重新开始测试。

根据Process Monitor的分析结果,捕捉到的相关事件总结如下:

1、服务会获取日志文件的基础信息。我们可以看到EndOfFile的偏移量为23,906,这也是目前文件的大小值。由于我们设定的最大文件大小值为16,384字节,因此这里系统会判断没有更多空间可用。

2、服务调用SetRenameInformationFile,其中FileName=C:LOGSRASTAPI.OLD。由于系统认为当前文件已满,因此会将C:LOGSRASTAPI.LOG移动为C:LOGSRASTAPI.OLD。

3、服务创建一个新的C:LOGSRASTAPI.LOG文件,开始写入数据。

这里的文件移动操作由NT AUTHORITYSYSTEM执行。因此,我们可以利用这一点将用户所有的文件移动到系统中的任意位置,比如C:WindowsSystem32。

0x03 漏洞利用

利用过程非常简单,可以总结如下:

1、创建(或拷贝)大小超过0x8000(32,768)字节的一个文件。

2、创建一个新的目录(C:EXPLOITmountpoint for example),将其设置为指向RPC Control的一个挂载点。

3、创建如下符号链接:

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

4、在注册表中配置如下值:

FileDirectory = C:EXPLOITmountpointMaxFileSize = 0x8000 (32,768 bytes)EnableFileTracing = 1

5、使用Windows API中的RasDial函数,触发与RASTAPI相关的事件。

6、触发Update Session Orchestrator服务,使其在NT AUTHORITYSYSTEM上下文中加载相关DLL。

漏洞利用过程如下图所示:

0x04 参考资料

  • MSRC – CVE-2020-0668
    https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-0668
  • Windows利用技巧:利用任意文件写入实现本地权限提升
    https://googleprojectzero.blogspot.com/2018/04/windows-exploitation-tricks-exploiting.html
  • 符号链接测试工具
    https://github.com/googleprojectzero/symboliclink-testing-tools
  • UsoDllLoader
    https://github.com/itm4n/UsoDllLoader


小编推荐:欲学习电脑技术、系统维护、网络管理、编程开发和安全攻防等高端IT技术,请 点击这里 注册账号,公开课频道价值万元IT培训教程免费学,让您少走弯路、事半功倍,好工作升职加薪!

本文出自:https://www.toutiao.com/a6795421220306158094/

免责声明:本站系公益性非盈利IT技术普及网,本文由投稿者转载自互联网的公开文章,文末均已注明出处,其内容和图片版权归原网站或作者所有,文中所述不代表本站观点,若有无意侵权或转载不当之处请从网站右下角联系我们处理,谢谢合作!

相关阅读

最新评论

 最新
返回顶部
欢乐生肖 韩国1.5分彩 快3平台 欢乐生肖 快乐赛车 北京幸运28 一分时时彩 pk10怎么玩 快乐赛车开奖 广西快3走势