欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

利用Foxit Reader的PDF Printer实现提权

来源:本站整理 作者:佚名 时间:2019-04-25 TAG: 我要投稿

去年年中,我在一篇文章中讲述了在Foxit Reader中挖掘UAF漏洞的过程,以及如何利用该漏洞发送远程代码执行攻击。之后,我又在一篇文章中介绍了Foxit Reader SDK ActiveX中的一个命令注入漏洞。本着不放弃不抛弃的精神,在同年晚些时候我又对Foxit Reader的一个新组件进行了深入的研究。令我惊讶的是,在这个组件中又发现了几个允许有限提升权限的漏洞,其中一个漏洞尤其严重,所以,本文就诞生了。
摘要
我们将通过发送一个精心构造的proxyDoAction请求,来详细考察CVE-2018-20310(它是位于PDF Printer中的一个基于堆栈的缓冲区溢出漏洞)的攻击向量、漏洞分析和利用方法。
软件版本
文中描述的方法已经在9.3.0.912版本的Foxit Reader软件进行了测试,其中FoxitProxyServer_Socket_RD.exe二进制文件的SHA1值为:0e1554311ba8dc04c18e19ec144b02a22b118eb7。该版本是撰写本文时的最新版本。
攻击向量
PDF Printer是Foxit Reader中的一个功能,主要用于处理来自应用程序的PDF文件打印请求。安装Foxit Reader后,Foxit PDF Printer就会成为处理打印作业的默认打印机。

从Chrome打印文档
这实际上意味着FoxitProxyServer_Socket_RD.exe二进制文件启动后,会在中等完整性级别运行片刻。

从应用程序打印文档时,FoxitProxyServer_Socket_RD.exe将在中等完整性级别运行
只在这个级别运行片刻的原因是服务器默认监听localhost端口50000并且只接受一个请求。一旦发出请求,它就会关闭端口并终止执行。当用户尝试使用Foxit PDF Printer打印到PDF时,攻击者就能够在渲染选项卡中执行代码。
在对该问题进行深入考察之后,发现可以从沙盒进程发出未公开的ALPC请求,以使用默认打印机启动打印作业。这意味着,攻击者根本不需要向FoxitProxyServer_Socket_RD.exe二进制文件发送竞争请求。
漏洞分析
在从浏览器打印页面时,我们截获了许多发送到端口50000的请求样本;此后,我们又发现了一个重要的函数,即sub_41DBA0。

sub_41DBA0的代码流程
这个函数用于处理多种不同类型的请求,其中,相应的处理程序在上图中用蓝色突出加以显示,其中包括:
· proxyDoAction
· proxyPreviewAction
· proxyPopupsAction
· proxyCPDFAction
· proxyUpdatePreview
· proxyFinishPreview
· proxyCollectSysFont
· proxyGetImageSize
· proxyCheckLicence
· proxyGetAppEdition
· proxyInitLocalization
· proxyCreateDirectoryCascade
· proxyIEMoveFileEx
· proxySendFileAsEmailAttachment
虽然其中一些处理程序确实是高度可利用的,但并不总是能够到达易受攻击的API,这里,我们将以proxyIEMoveFileEx为例进行介绍。该函数接受三个参数,它实际上就是一个MoveFileExW调用,并且没有对参数进行任何检查。不过,由于它无法正确解析提供的数据包结构,因此,该函数实际上是无法利用的。通常情况下,软件开发人员在发布软件之前会进行相应的测试,以确保它们能正常工作!以下是这个底层API所在的位置:
.text:00420C85 loc_420C85:                             ; CODE XREF: sub_420930+331
.text:00420C85                 push    ebx             ; dwFlags
.text:00420C86                 push    edi             ; lpNewFileName
.text:00420C87                 push    eax             ; lpExistingFileName
.text:00420C88                 call    ds:MoveFileExW
在进行了更加深入的逆向分析之后,我们发现proxyDoAction也是一个非常让人感兴趣的函数,因为攻击者可以利用它的操作码抵达5条不同的代码路径。以下是检查请求数据包中的proxyDoAction字符串的相关代码:

 sub_41DBA0函数会检查proxyDoAction请求
也就是说,只要能够提供正确格式的请求,我们最终可以到达该处理程序:

用于到达处理程序的proxyDoAction请求
在处理程序内部,我们可以看到它具有3个参数:

[1] [2] [3] [4] [5] [6] [7]  下一页

【声明】:黑吧安全网(http://www.ylxj.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载