前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CVE-2019-13382:SNAGIT中的本地权限提升

CVE-2019-13382:SNAGIT中的本地权限提升

作者头像
洛米唯熊
发布2019-07-30 17:15:13
9660
发布2019-07-30 17:15:13
举报
文章被收录于专栏:洛米唯熊洛米唯熊

0x00:漏洞概述

版本:Snagit 2019.1.2 Build 3596 操作系统测试时间:Windows 10 1803(x64) 漏洞:SnagIt Relay Classic Recorder本地权限通过不安全的文件移动升级 此漏洞是与资本集团安全测试团队的Marcus Sailler,Rick Romo和Gary Muller共同发现的 每隔30-60秒,TechSmith上传服务(UploaderService.exe)会检查“* .xml”格式的任何演示文件文件夹“C:\ ProgramData \ Techsmith \ TechSmith Recorder \ QueuedPresentations”。如果找到无效的服务,则服务将该文件作为SYSTEM移动到

代码语言:javascript
复制
“C:\ProgramData\Techsmith\TechSmith Recorder \ InvalidPresentations”。

由于低权限用户可以完全控制QueuedPresentations和InvalidPresentations文件夹,因此可以在QueuedPresentations文件夹中创建无效的演示文稿,然后在InvalidPresentations文件夹中为该文件名放置一个指向特权位置的符号链接。 当服务检查演示文稿时,它会将文件移出QueuedPresentations文件夹并进入InvalidPresentations文件夹。当它这样做时,服务将点击符号链接并将新文件写入受保护的位置,其权限允许低权限用户完全控制内容,从而导致权限提升到NT AUTHORITY \ SYSTEM。 0x01:识别和利用 在评估特权升级漏洞的软件时,找到起点往往是压倒性的,因为存在许多不同的原语和漏洞类。我的方法通常包括从基础开始,并在复杂性方面努力。此过程通常涉及运行PowerUp等工具,该工具将识别各种琐碎(但常见)的错误配置。 如果没有返回任何有趣内容,下一步通常是寻找逻辑漏洞; 特别是滥用symlink / mountpoint / hardlink原语。为了快速识别可能被链接原语利用的潜在漏洞,我们需要在操作系统上识别特权进程(通常是SYSTEM)与低权限用户可以控制的文件夹或文件交互的位置。这种逻辑在大多数逻辑漏洞中都是正确的,因为有趣的攻击面与利用低权限用户控制的资源的特权进程相关联。 在寻找这样的错误时,我经常开始运行Process Monitor,过滤SYSTEM过程和常用的文件系统位置,例如C:\ProgramData ,C:\ Windows\Temp和C:\Users\ <用户名> \ AppData。这样的过滤器可能如下所示:

当应用Process Monitor并观察输出几分钟时,很明显“UploaderService.exe”正在查询任何XML文件的

代码语言:javascript
复制
“C:\ProgramData\Techsmith\TechSmith Recorder\ QueuedPresentations”

目录

查看该文件夹上的DACL,它还突出了“BUILTIN\Users”具有写访问权限:

特别有趣的是,特权SYSTEM进程(UploaderService.exe)正在查找低权限用户具有读/写访问权限的目录中的文件。有了这些信息,下一步就是给“UploaderService.exe”一个XML文件来查找并查看会发生什么。

正如所料,“UploaderService.exe”检查任何XML文件的“C:\ProgramData\ Techsmith\TechSmith Recorder\QueuedPresentations”并找到我们创建的文件:

接下来的问题是,“UploaderService.exe”对我们的XML文件做了什么?它是否读取并摄取内容?它把它放在别的地方吗? 查看Process Monitor输出的其余部分为我们回答了这个问题。在这种情况下,“UploaderService.exe”接受“C:\ProgramData\Techsmith\TechSmith Recorder\QueuedPresentations”中的任何XML文件,并确定XML表示文件是否有效。由于我们只是在我们的XML文件中回显“1”,服务可执行文件确定“1.xml”是无效的表示并将其移动到“C:\ProgramData\Techsmith\TechSmith Recorder\InvalidPresentations\1.xml”:

查看“C:ProgramData\Techsmith\TechSmith Recorder\InvalidPresentations”目录,“BUILTIN\Users”也具有读/写访问权限:

此时,我们已经确定SYSTEM进程(UploaderService.exe)正在检查用户控制的目录中是否有任何XML文件。找到后,特权进程将获取攻击者提供的XML文件,并将其从QueuedPresentations文件夹移动到InvalidPresentations文件夹,同时保留原始文件名。 为什么这很有趣?这提供了在移动文件操作期间使用符号链接来完成特权文件写入的机会。你怎么会问?工作流程如下: 1、在“C:\ProgramData\Techsmith\TechSmith Recorder\InvalidPresentations\ 1.xml”上创建一个指向“C:\Windows\System32\ualapi.dll”的符号链接 2、应该注意,“C:\Windows\System32\ ualapi.dll”不存在。这是我们正在种植的DLL,以便将代码执行作为SYSTEM 3、由于该进程具有特权“SYSTEM”,因此它将具有写入此文件的正确权限。 4、将虚拟xml文件写入“C:\ProgramData\Techsmith\TechSmith Recorder\ QueuedPresentations\1.xml” 5、当“UploaderService.exe”检查任何XML文件的“C:\ProgramData\ Techsmith\TechSmith Recorder\QueuedPresentations”时,它会找到“1.xml”并将其移动到“C:\ProgramData\Techsmith\TechSmith Recorder\InvalidPresentations\1.XML”。在这样做时,它会点击我们的符号链接,而是将文件移动到“C:\Windows\System32\ualapi.dll”(同时保留原始DACL) 从理论上讲,这应该有效。我们试一试吧!对于Symbolic Link,我使用了James Forshaw的Symbolic Link Testing Tools repo中的“CreateSymlink.exe” 。我们需要做的就是在“C:\ProgramData\Techsmith\TechSmith Recorder\InvalidPresentations\1.xml”上放置一个符号链接,指向“C:\Windows\System32\\ualapi.dll”,然后创建“C:\ProgramData\Techsmith\TechSmith Recorder\QueuedPresentations\1.xml“:

创建符号链接并创建虚拟XML文件后,我们等待60秒,“UploaderService.exe”检查QueuedPresentations文件夹。如果是这样,它会找到我们的“1.xml”文件并尝试将其移动到“C:\ProgramData\TechSmith\TechSmith Recorder\ InvalidPresentations\1.xml”。当它这样做时,它会点击我们在“C:\ProgramData\ TechSmith\TechSmith Recorder\InvalidPresentations\1.xml”上的符号链接,而是将其写入“C:\Windows\System32\ualapi.dll”:

然后我们可以确认“C:\Windows\System32\ualapi.dll”的存在:

这很好,但不应该新创建的“ualapi.dll”文件只是继承父文件夹(C:\Windows\System32)的权限并阻止低权限用户写入它?这是我的想法(在检查文件上的DACL之前),但“UploaderService.exe”使用MoveFileW()。根据文档,MoveFileW()在同一卷上移动文件时保留原始DACL:

虽然没有明确说明,但可以推断,如果文件没有跨卷移动,则会随着DACL的原样移动。这意味着当“UploaderService.exe”命中“C:\ProgramData\TechSmith\ TechSmith Recorder\InvalidPresentations\ \1.xml”上的符号链接并尝试将原始文件移动到“C:\Windows\System32\ualapi.dll”时“,它保留原始DACL为”1.xml“。由于它是由低权限用户创建的,因此它具有DACL,其具有低权限用户作为具有“FullControl”权限的所有者:

此时,我们现在拥有“C:\Windows\System32\ualapi.dll”,允许我们的低权限用户写入它。这意味着我们可以使用我们选择的有效负载简单地复制新创建的ualapi.dll文件。在这种情况下,有效负载在加载时启动cmd.exe。

我们现在有一个有效负载位于C:\Windows\System32\ualapi.dll。假脱机程序服务启动时会加载此DLL。对于PoC,剩下的就是重新启动主机以使假脱机程序服务重新启动。此外,可以使用CollectorService加载DLL而无需重新启动。由于这是一个PoC,这是一个留给读者的练习。 重新启动主机后,“spoolsv.exe”将从C:\Windows\System32\ualapi.dll加载我们的有效负载作为SYSTEM,从而导致权限提升:

可以在此处找到利用视频:

代码语言:javascript
复制
https://www.youtube.com/watch?v = V90JRwlaHRY&feature = youtu.be

此漏洞已在SnagIt版本2019.1.3,2018.2.4和13.1.7中使用CVE-2019-13382修复。在移动文件时结合检查重新分析点(FSCTL_GET_REPARSE_POINT)时使用_time64进行修复。如果存在重新分析点,则将其删除。

本文转载至

代码语言:javascript
复制
https://enigma0x3.net/2019/07/24/cve-2019-13382-privilege-escalation-in-snagit/?source=post_page
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 洛米唯熊 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
手游安全测试
手游安全测试(Security Radar,SR)为企业提供私密的安全测试服务,通过主动挖掘游戏业务安全漏洞(如钻石盗刷、服务器宕机、无敌秒杀等40多种漏洞),提前暴露游戏潜在安全风险,提供解决方案及时修复,最大程度降低事后外挂危害与外挂打击成本。该服务为腾讯游戏开放的手游安全漏洞挖掘技术,杜绝游戏外挂损失。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档