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

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

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

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

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

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

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

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

服务的跟踪功能

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

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

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

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

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

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

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

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

任意文件移动防御

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

情况1:MaxFileSize-最小值

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

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

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

情况2:MaxFileSize-自定义值

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

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

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

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

进攻利用

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

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

  2. 创建一个新目录(C:\EXPLOIT\mountpoint\例如)放入其设置为的挂载点\RPC Control

  3. 创建以下符号链接:

    \RPC Control\RASTAPI.LOG -> \??\C:\EXPLOIT\FakeDll.dll (owner = current user)
    \RPC Control\RASTAPI.OLD -> \??\C:\Windows\System32\WindowsCoreDeviceInfo.dll
  4. 在注册表中配置以下值:

    FileDirectory = C:\EXPLOIT\mountpoint
    MaxFileSize = 0x8000 (32,768‬ bytes)
    EnableFileTracing = 1
  5. 使用RasDialWindows API中的函数触发与RASTAPI相关的事件。

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

演示版

最新文章

  1. mysql函数大全
  2. Git Windows客户端保存用户名与密码
  3. Atitit 发帖机系列(8)  词法分析器v5 版本新特性说明)
  4. mysql一个事务中有DDL语句的binlog情况
  5. BZOJ1045 [HAOI2008] 糖果传递
  6. combobox中动态加入几个checkbox,实现下拉框多选
  7. Js 中的this
  8. Lambda表达式中的表达式lambda和语句lambda区别
  9. Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍
  10. Android应用程序框架层和系统运行库层日志系统源代码分析
  11. ClassLoader 工作机制
  12. 有两个序列A和B,A=(a1,a2,...,ak),B=(b1,b2,...,bk),A和B都按升序排列。对于1<=i,j<=k,求k个最小的(ai+bj)。要求算法尽量高效。
  13. ZooKeeper安装,部署
  14. js 知识点整理
  15. 全面剖析Smarty缓存机制一[三种缓存方式]
  16. Vue项目上线后刷新报错404问题(apache,nginx,tomcat)
  17. R语言笔记006——分组获取描述性统计量
  18. C语言讲解命令行参数
  19. k8s之configmap配置中心
  20. 列举你了解的Python较其他语言的优势

热门文章

  1. Window初始化Git环境
  2. 技术交流群和CSDN免费下载服务
  3. 【javaScript】报getElementId()为Null的错误
  4. python接口自动化测试 - openpyxl基本使用
  5. 记录 解决ubuntu16.04 ‘E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用) ’
  6. (1)C#连接数据库:Connection对象
  7. AntV F2 数据可视化填坑,图表横向滚动
  8. 【模板】普通平衡树(权值splay)
  9. CentOS7主机名的查看和修改
  10. YYC松鼠短视频系统上传视频会被压缩的问题如何解决?