SandboxEscaper / PoC-LPE:里面有什么?


目前,已经有关于此漏洞的新闻 ,但不幸的是,没有技术细节。 建议您查看已发布的档案 (作者-SandboxEscaper )。

切割器下方是存档中描述文件的翻译。

漏洞描述


任务计划程序服务具有一个支持SchRpcSetSecurity方法的RPC接口(可通过ALPC传输访问)。

这是此方法的原型:

long _SchRpcSetSecurity( [in][string] wchar_t* arg_1, //Task name [in][string] wchar_t* arg_2, //Security Descriptor string [in]long arg_3); 

任务计划程序创建的任务在c:\ windows \ system32 \ tasks中创建相应的目录/文件。 此方法可能旨在记录位于此处的DACL'a任务。 但是录制将在模拟后进行。 但是,由于某种原因,该方法的实现还会检查c:\ windows \ tasks中是否存在.job文件,并在没有模拟的情况下向其中写入DACL。 由于用户(甚至来宾组中的用户)可以在此目录中创建文件,因此我们可以简单地创建指向我们可以读取的任何其他文件的硬链接。 使用这样的硬链接,我们可以强制调度程序服务(以SYSTEM特权执行)将任意DACL(请参阅第二个SchRpcSetSecurity参数)写入我们选择的文件。

因此:对于可以读取的任何文件,您可以更改DACL,从而可以完全覆盖它。

漏洞利用


此漏洞为我们提供了非常强大的原始功能! 主要问题在于,安装后(默认情况下),许多重要文件只能由TrustedInstaller用户修改(而不能由SYSTEM用户修改)。

该归档文件包含一个Powershell脚本,用于列出您可以控制的文件。 只需运行:
./enumerate.ps1 >output.txt

该系统有许多目标。 您可以控制程序文件,并且如果目标文件被管理员/其他用户使用,则可以使用所需特权启动已覆盖的文件。

第二个问题是,尽管我们可以控制许多文件,但是通常无法写入这些文件,因为这些DLL已经加载到某个地方执行了。 尝试为上载要执行的文件编写DACL会导致共享访问错误。 但是该漏洞可以用于其他类型的文件,这可能是比DLL更好的目标。

为了进行操作,选择了文件C:\ Windows \ System32 \ DriverStore \ FileRepository \ prnms003.inf_amd64_4592475aca2acf83 \ Amd64 \ printconfig.dll(目录名称可能有所不同,在PoC中已考虑在内)。 看起来该文件属于XPS打印机,并且默认情况下未加载到打印服务中(可能会发生该文件已经加载的情况,但是更常见的是,它不是)。

当我们使用XPS打印机开始打印作业时,该服务将加载此DLL,我们可以事先对其进行重写。 这样的攻击媒介(劫持)可以很容易地应用于更好的东西。 我可以尝试找到最好的选择...就让我知道。

注意 :在运行Windows 10多年的旧笔记本电脑上,有两个目录prnms003.inf_amd64_ *。 新版本不会删除旧版本,这意味着无法保证(在PoC中使用)FindFirstFile将找到当前目录。 因此,您可以通过覆盖所有找到的printconfig.dll来扩展代码,或者检查文件中最后一条记录的属性,然后选择一个更新的记录。

演示版


您还可以在档案库中找到带有演示的视频:
隐藏文字

Source: https://habr.com/ru/post/zh-CN421593/


All Articles