zoukankan      html  css  js  c++  java
  • CVE-2020-0668-Windows服务跟踪中的普通特权升级错误

    CVE-2020-0668-Windows服务跟踪中的普通特权升级错误

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

    服务跟踪是一项旧功能,我可以转换到Windows XP,但它可能已存在于以前的OS版本中。它逐步提供有关正在运行的服务和模块的一些基本调试信息。任何本地用户都可以配置它,只是在下编辑一些导航项和值即可HKLMSOFTWAREMicrosoftTracing

    服务或模块与注册表项关联。每个键包含6个值(即设置)。我们将关注的3个值是:(EnableFileTracing启用/替换“跟踪”),FileDirectory(设置输出日志文件的位置)和MaxFileSize(设置)。日志文件的最大文件大小)。

    一旦EnableFileTracing被启用,目标服务将开始在写入其日志文件指定目录。一旦输出文件的大小超过MaxFileSize,则被移动.LOG扩展名被替换.OLD)并创建一个新的日志文件。

    感谢James Forshaw的符号链接测试工具,该攻击非常简单。您需要做的就是将目标目录设置为对象目录的挂载点RPC Control,然后创建两个符号链接:

    • 指向MODULE.LOG您所拥有文件的符号链接(其大小必须大于MaxFileSize)。
    • MODULE.OLD到文件系统上任何文件的符号链接(例如:)C:WindowsSystem32WindowsCoreDeviceInfo.dll

    最后,可以通过针对以身份运行的服务触发文件移动NT AUTHORITYSYSTEM,然后可以利用Update Session Orchestrator服务获取任意代码执行。

    服务的跟踪功能

    如前所述,任何本地用户都可以配置Service Tracing功能,只需在中编辑一些插入项和值即可HKLMSOFTWAREMicrosoftTracing

    通过使用AccessChkWindows Sysinternals工具套件,我们可以看到常规对几乎所有子键都Users具有Read/ Write权限。

    img

    在此处的其余部分中,我将以该RASTAPI模块为例,因为它是我利用漏洞利用的模块。因此,可以通过启动虚拟VPN连接轻松触发日志事件。以下快照显示了注册表项的全部内容。为其他服务和模块配置了完全相同的值。

    img

    从本地攻击者的角度来看,这是最有趣的值:

    名称可能的值描述
    EnableFileTracing 0-1 开始/停止写入日志文件。
    文件目录 一个弦 目录的绝对路径。
    最大文件大小 0x00000000-0xffffffff 输出日志文件的最大大小。

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

    • 通过设置为或,强制特定的服务或模块开始或停止将调试信息写入日志文件。EnableFileTracing``0``1
    • 通过设置指定日志文件的位置FileDirectory
    • 通过设置指定输出文件的最大大小MaxFileSize

    唯一需要注意的是,我们无法选择输出文件的名称,因为它基于调试的服务或模块的名称。使用符号链接可以轻松解决此问题。

    任意文件移动防御

    考虑到某些的所有先前元素,可以轻松地解释此突破。

    情况1:MaxFileSize-最小值

    对于第一个测试用例,我只是将其设置C:LOGS为输出目录并启用了File Tracing

    img

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

    img

    有效!日志文件由NT AUTHORITYSYSTEM编写。它的大小现在大约24KB。

    img

    情况2:MaxFileSize-自定义值

    在先前的测试中,我们看到输出日志文件的最终大小约为24KB。因此,这次,我们将设置MaxFileSize0x4000(16,384字节)并重新开始测试。

    img

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

    1. 该服务将获取有关日志文件的基本信息。我们可以看到EndOfFile转换23906,这是在这一刻文件的大小。问题是我们指定的最大文件大小为16,384字节,因此,系统将认为没有更多的可用空间。
    2. SetRenameInformationFile被称为FileName=C:LOGSRASTAPI.OLD。换句话说,由于现有文件被视为已满,因此将其从C:LOGSRASTAPI.LOG移到C:LOGSRASTAPI.OLD
    3. 该服务将创建一个新C:LOGSRASTAPI.LOG文件并开始进行进行写入。

    img

    “移动”操作按进行NT AUTHORITYSYSTEM。因此,可以利用所有者拥有的文件移动到文件系统上的任何位置,例如C:WindowsSystem32

    进攻利用

    该突破利用很简单,可以总结如下:

    1. 创建(或复制)一个大小大于0x8000(32,768)字节的文件。

    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. 使用RasDialWindows API中的函数触发与RASTAPI相关的事件。

    6. 触发更新会话Orchestrator服务以在其自身的中加载DLL NT AUTHORITYSYSTEM

    演示版

    img

  • 相关阅读:
    Aurora 数据库支持多达五个跨区域只读副本
    Amazon RDS 的 Oracle 只读副本
    Amazon EC2 密钥对
    DynamoDB 读取请求单位和写入请求单位
    使用 EBS 优化的实例或 10 Gb 网络实例
    启动 LAMP 堆栈 Web 应用程序
    AWS 中的错误重试和指数退避 Error Retries and Exponential Backoff in AWS
    使用 Amazon S3 阻止公有访问
    路由表 Router Table
    使用MySQLAdmin工具查看QPS
  • 原文地址:https://www.cnblogs.com/8gman/p/12342462.html
Copyright © 2011-2022 走看看